⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ir.lst

📁 无线遥控器的源代码
💻 LST
📖 第 1 页 / 共 4 页
字号:
__text_start:
__start:
      A6 E5CF      LDI	R28,0x5F
      A7 E0D4      LDI	R29,4
      A8 BFCD      OUT	0x3D,R28
      A9 BFDE      OUT	0x3E,R29
      AA 51C0      SUBI	R28,0x10
      AB 40D0      SBCI	R29,0
      AC EA0A      LDI	R16,0xAA
      AD 8308      STD	Y+0,R16
      AE 2400      CLR	R0
      AF E5E8      LDI	R30,0x58
      B0 E0F1      LDI	R31,1
      B1 E011      LDI	R17,1
      B2 35ED      CPI	R30,0x5D
      B3 07F1      CPC	R31,R17
      B4 F011      BEQ	0x00B7
      B5 9201      ST	R0,Z+
      B6 CFFB      RJMP	0x00B2
      B7 8300      STD	Z+0,R16
      B8 E5E4      LDI	R30,0x54
      B9 E0F0      LDI	R31,0
      BA E6A0      LDI	R26,0x60
      BB E0B0      LDI	R27,0
      BC E011      LDI	R17,1
      BD E000      LDI	R16,0
      BE BF0B      OUT	0x3B,R16
      BF 34EC      CPI	R30,0x4C
      C0 07F1      CPC	R31,R17
      C1 F021      BEQ	0x00C6
      C2 95C8      LPM
      C3 9631      ADIW	R30,1
      C4 920D      ST	R0,X+
      C5 CFF9      RJMP	0x00BF
      C6 D33F      RCALL	_main
_exit:
      C7 CFFF      RJMP	_exit
FILE: D:\mega16_32实验板资料\ICCAVR源程序\遥控器\delay.h
(0001) /**********延时函数*****************/
(0002) /*-----------------------------------------------
(0003) delay_us	   :1us延时函数
(0004) ------------------------------------------------*/
(0005) void delay_1us(void)
(0006) {
(0007)  asm("nop");
_delay_1us:
      C8 0000      NOP
      C9 9508      RET
_delay_us:
  t                    --> R20
      CA 934A      ST	R20,-Y
      CB 935A      ST	R21,-Y
      CC 01A8      MOVW	R20,R16
(0008) }
(0009) /*-----------------------------------------------
(0010) delay_nus          :长延时函数
(0011) 输入参数: t        :延时时间 us
(0012) ------------------------------------------------*/
(0013) void delay_us(unsigned int t)
(0014) {
      CD C001      RJMP	0x00CF
(0015)  while(t--)
(0016)   delay_1us();
      CE DFF9      RCALL	_delay_1us
      CF 011A      MOVW	R2,R20
      D0 5041      SUBI	R20,1
      D1 4050      SBCI	R21,0
      D2 2022      TST	R2
      D3 F7D1      BNE	0x00CE
      D4 2033      TST	R3
      D5 F7C1      BNE	0x00CE
      D6 9159      LD	R21,Y+
      D7 9149      LD	R20,Y+
      D8 9508      RET
(0017) }
(0018) /*----------------------------------------------
(0019) delay_ms	   :1ms延时函数
(0020) -----------------------------------------------*/
(0021) void delay_1ms(void)
(0022) {
(0023)  unsigned int i;
(0024)  for(i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
      D9 2700      CLR	R16
      DA 2711      CLR	R17
      DB C002      RJMP	0x00DE
      DC 5F0F      SUBI	R16,0xFF
      DD 4F1F      SBCI	R17,0xFF
      DE 3704      CPI	R16,0x74
      DF E0E4      LDI	R30,4
      E0 071E      CPC	R17,R30
      E1 F3D0      BCS	0x00DC
      E2 9508      RET
_delay_ms:
  t                    --> R20
      E3 934A      ST	R20,-Y
      E4 935A      ST	R21,-Y
      E5 01A8      MOVW	R20,R16
(0025) }
(0026) /*----------------------------------------------
(0027) delay_nms          :长延时函数
(0028) 输入参数: t        :延时时间 ms
(0029) -----------------------------------------------*/
(0030) void delay_ms(unsigned int t)
(0031) {
      E6 C001      RJMP	0x00E8
(0032)  while(t--)
(0033)   delay_1ms();
      E7 DFF1      RCALL	_delay_1ms
      E8 011A      MOVW	R2,R20
      E9 5041      SUBI	R20,1
      EA 4050      SBCI	R21,0
      EB 2022      TST	R2
      EC F7D1      BNE	0x00E7
      ED 2033      TST	R3
      EE F7C1      BNE	0x00E7
      EF 9159      LD	R21,Y+
      F0 9149      LD	R20,Y+
      F1 9508      RET
FILE: D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir.h
(0001) unsigned char ir_rx_complete_flag=0;
(0002) unsigned char bitcnt=0;
(0003) unsigned char user_code=0;
(0004) unsigned char operate_code=0;
(0005) unsigned char codebegin;
(0006) unsigned int  ir_num;
(0007) 
(0008) void spk(void)
(0009) {
(0010)  PORTD&=~BIT(PD7);
_spk:
      F2 9897      CBI	0x12,7
(0011)  delay_ms(100);
      F3 E604      LDI	R16,0x64
      F4 E010      LDI	R17,0
      F5 DFED      RCALL	_delay_ms
(0012)  PORTD|=BIT(PD7);
      F6 9A97      SBI	0x12,7
      F7 9508      RET
_timer1_capt_isr:
  newFall              --> R18
  temp                 --> R16
      F8 921A      ST	R1,-Y
      F9 922A      ST	R2,-Y
      FA 923A      ST	R3,-Y
      FB 930A      ST	R16,-Y
      FC 931A      ST	R17,-Y
      FD 932A      ST	R18,-Y
      FE 933A      ST	R19,-Y
      FF 938A      ST	R24,-Y
     100 939A      ST	R25,-Y
     101 93EA      ST	R30,-Y
     102 B61F      IN	R1,0x3F
     103 921A      ST	R1,-Y
(0013) }
(0014) 
(0015) #pragma interrupt_handler timer1_capt_isr:iv_TIM1_CAPT
(0016) void timer1_capt_isr(void)
(0017) {
(0018)  //timer 1 input capture event, read (int)value in ICR1 using;
(0019)  // value=ICR1L;            //Read low byte first (important)
(0020)  // value|=(int)ICR1H << 8; //Read high byte and shift into top byte
(0021)  static unsigned int oldFall;
(0022)  unsigned int temp,newFall;
(0023)  newFall=ICR1;
     104 B526      IN	R18,0x26
     105 B537      IN	R19,0x27
(0024)  temp=newFall-oldFall; //计算脉冲加间隔的时间
     106 9020 0158 LDS	R2,ir.h:oldFall
     108 9030 0159 LDS	R3,ir.h:oldFall+1
     10A 0189      MOVW	R16,R18
     10B 1902      SUB	R16,R2
     10C 0913      SBC	R17,R3
(0025)  oldFall=newFall;
     10D 9330 0159 STS	ir.h:oldFall+1,R19
     10F 9320 0158 STS	ir.h:oldFall,R18
(0026)  if(temp>100&&temp<1500) //判断数据0信号
     111 E684      LDI	R24,0x64
     112 E090      LDI	R25,0
     113 1780      CP	R24,R16
     114 0791      CPC	R25,R17
     115 F508      BCC	0x0137
     116 3D0C      CPI	R16,0xDC
     117 E0E5      LDI	R30,5
     118 071E      CPC	R17,R30
     119 F4E8      BCC	0x0137
(0027)  {
(0028)   temp=0;
     11A 2700      CLR	R16
     11B 2711      CLR	R17
     11C 940E 05EC CALL	0x05EC
(0029)   bitcnt++;
(0030)   if(bitcnt<16)//开始接收前16位 
     11E F430      BCC	0x0125
(0031)    user_code<<=1;
     11F 9020 0062 LDS	R2,user_code
     121 0C22      LSL	R2
     122 9220 0062 STS	user_code,R2
     124 C057      RJMP	0x017C
(0032)   else if(bitcnt<32)//开始接收后16位 
     125 9180 0061 LDS	R24,bitcnt
     127 3280      CPI	R24,0x20
     128 F430      BCC	0x012F
(0033)    operate_code<<=1;
     129 9020 0063 LDS	R2,operate_code
     12B 0C22      LSL	R2
     12C 9220 0063 STS	operate_code,R2
     12E C04D      RJMP	0x017C
(0034)   else if(bitcnt==32)//接收完最后一位
     12F 9180 0061 LDS	R24,bitcnt
     131 3280      CPI	R24,0x20
     132 F009      BEQ	0x0134
     133 C048      RJMP	0x017C
(0035)   {
(0036)    ir_rx_complete_flag=1;
     134 940E 05E5 CALL	0x05E5
(0037)    bitcnt=40;
(0038)   }//接收完最后一位
(0039)  }
     136 C045      RJMP	0x017C
(0040)  else if(temp>1500&&temp<4000)//判断数据1信号
     137 ED8C      LDI	R24,0xDC
     138 E095      LDI	R25,5
     139 1780      CP	R24,R16
     13A 0791      CPC	R25,R17
     13B F008      BCS	0x013D
     13C C02C      RJMP	0x0169
     13D 3A00      CPI	R16,0xA0
     13E E0EF      LDI	R30,0xF
     13F 071E      CPC	R17,R30
     140 F008      BCS	0x0142
     141 C027      RJMP	0x0169
(0041)  {
(0042)   temp=1;
     142 E001      LDI	R16,1
     143 E010      LDI	R17,0
     144 940E 05EC CALL	0x05EC
(0043)   bitcnt++;
(0044)   if(bitcnt<16) //开始接收前16位
     146 F438      BCC	0x014E
     147 940E 05F9 CALL	0x05F9
(0045)   {
(0046)    user_code++;
(0047)    user_code<<=1;
     149 2E28      MOV	R2,R24
     14A 0C22      LSL	R2
     14B 9220 0062 STS	user_code,R2
(0048)   }
     14D C02E      RJMP	0x017C
(0049)   else if(bitcnt==16)
     14E 9180 0061 LDS	R24,bitcnt
     150 3180      CPI	R24,0x10
     151 F419      BNE	0x0155
     152 940E 05F9 CALL	0x05F9
(0050)    user_code++;
     154 C027      RJMP	0x017C
(0051)   else if(bitcnt<32) //开始接收后16位
     155 9180 0061 LDS	R24,bitcnt
     157 3280      CPI	R24,0x20
     158 F438      BCC	0x0160
     159 940E 05F3 CALL	0x05F3
(0052)   {
(0053)    operate_code++;
(0054)    operate_code<<=1;
     15B 2E28      MOV	R2,R24
     15C 0C22      LSL	R2
     15D 9220 0063 STS	operate_code,R2
(0055)   }
     15F C01C      RJMP	0x017C
(0056)   else if(bitcnt>=32)
     160 9180 0061 LDS	R24,bitcnt
     162 3280      CPI	R24,0x20
     163 F0C0      BCS	0x017C
     164 940E 05F3 CALL	0x05F3
     166 940E 05E5 CALL	0x05E5
(0057)   {
(0058)    operate_code++;
(0059)    ir_rx_complete_flag=1;//接收完最后一位
(0060)    bitcnt=40; 
(0061)    return;
     168 C013      RJMP	0x017C
(0062)   }
(0063)  }
(0064)  else if(temp>10000&&temp<15000) //判断引导码信号,返回,等待下次开始接收
     169 E180      LDI	R24,0x10
     16A E297      LDI	R25,0x27
     16B 1780      CP	R24,R16
     16C 0791      CPC	R25,R17
     16D F470      BCC	0x017C
     16E 3908      CPI	R16,0x98
     16F E3EA      LDI	R30,0x3A
     170 071E      CPC	R17,R30
     171 F450      BCC	0x017C
(0065)  {
(0066)   codebegin=1;
     172 E081      LDI	R24,1
     173 9380 015C STS	codebegin,R24
(0067)   bitcnt=0;
     175 2422      CLR	R2
     176 9220 0061 STS	bitcnt,R2
(0068)   user_code=0;
     178 9220 0062 STS	user_code,R2
(0069)   operate_code=0;
     17A 9220 0063 STS	operate_code,R2
(0070)  }
     17C 9019      LD	R1,Y+
     17D BE1F      OUT	0x3F,R1
     17E 91E9      LD	R30,Y+
     17F 9199      LD	R25,Y+
     180 9189      LD	R24,Y+
     181 9139      LD	R19,Y+
     182 9129      LD	R18,Y+
     183 9119      LD	R17,Y+
     184 9109      LD	R16,Y+
     185 9039      LD	R3,Y+
     186 9029      LD	R2,Y+
     187 9019      LD	R1,Y+
     188 9518      RETI
_get_ir_code:
     189 934A      ST	R20,-Y
     18A 935A      ST	R21,-Y
     18B 9722      SBIW	R28,2
(0071) }
(0072) 
(0073) void get_ir_code(void)
(0074) {
(0075)  if(ir_rx_complete_flag==1)
     18C 9180 0060 LDS	R24,ir_rx_complete_flag
     18E 3081      CPI	R24,1
     18F F009      BEQ	0x0191
     190 C183      RJMP	0x0314
(0076)  {
(0077)   if((codebegin==1)&&(bitcnt==40))
     191 9180 015C LDS	R24,codebegin
     193 3081      CPI	R24,1
     194 F009      BEQ	0x0196
     195 C17E      RJMP	0x0314
     196 9180 0061 LDS	R24,bitcnt
     198 3288      CPI	R24,0x28
     199 F009      BEQ	0x019B
     19A C179      RJMP	0x0314
(0078)   {
(0079)    switch(operate_code)
     19B 9140 0063 LDS	R20,operate_code
     19D 2755      CLR	R21
     19E 3844      CPI	R20,0x84
     19F E0E0      LDI	R30,0
     1A0 075E      CPC	R21,R30
     1A1 F409      BNE	0x01A3
     1A2 C0E9      RJMP	0x028C
     1A3 E884      LDI	R24,0x84
     1A4 E090      LDI	R25,0
     1A5 1784      CP	R24,R20
     1A6 0795      CPC	R25,R21
     1A7 F40C      BGE	0x01A9
     1A8 C06B      RJMP	0x0214
     1A9 3348      CPI	R20,0x38
     1AA E0E0      LDI	R30,0
     1AB 075E      CPC	R21,R30
     1AC F409      BNE	0x01AE
     1AD C146      RJMP	0x02F4
     1AE E388      LDI	R24,0x38
     1AF E090      LDI	R25,0
     1B0 1784      CP	R24,R20
     1B1 0795      CPC	R25,R21
     1B2 F40C      BGE	0x01B4
     1B3 C030      RJMP	0x01E4
     1B4 3148      CPI	R20,0x18
     1B5 E0E0      LDI	R30,0
     1B6 075E      CPC	R21,R30
     1B7 F409      BNE	0x01B9
     1B8 C10B      RJMP	0x02C4
     1B9 E188      LDI	R24,0x18
     1BA E090      LDI	R25,0
     1BB 1784      CP	R24,R20
     1BC 0795      CPC	R25,R21
     1BD F084      BLT	0x01CE
     1BE 3044      CPI	R20,4
     1BF E0E0      LDI	R30,0
     1C0 075E      CPC	R21,R30
     1C1 F409      BNE	0x01C3
     1C2 C0C2      RJMP	0x0285
     1C3 3044      CPI	R20,4
     1C4 E0E0      LDI	R30,0
     1C5 075E      CPC	R21,R30
     1C6 F40C      BGE	0x01C8
     1C7 C12F      RJMP	0x02F7
     1C8 3144      CPI	R20,0x14
     1C9 E0E0      LDI	R30,0
     1CA 075E      CPC	R21,R30
     1CB F409      BNE	0x01CD
     1CC C0DB      RJMP	0x02A8
     1CD C129      RJMP	0x02F7
     1CE 3244      CPI	R20,0x24
     1CF E0E0      LDI	R30,0
     1D0 075E      CPC	R21,R30
     1D1 F409      BNE	0x01D3
     1D2 C0C5      RJMP	0x0298
     1D3 E284      LDI	R24,0x24
     1D4 E090      LDI	R25,0
     1D5 1784      CP	R24,R20
     1D6 0795      CPC	R25,R21
     1D7 F034      BLT	0x01DE
     1D8 3240      CPI	R20,0x20
     1D9 E0E0      LDI	R30,0
     1DA 075E      CPC	R21,R30
     1DB F409      BNE	0x01DD
     1DC C0F3      RJMP	0x02D0
     1DD C119      RJMP	0x02F7
     1DE 324D      CPI	R20,0x2D
     1DF E0E0      LDI	R30,0
     1E0 075E      CPC	R21,R30
     1E1 F409      BNE	0x01E3
     1E2 C0E5      RJMP	0x02C8
     1E3 C113      RJMP	0x02F7
     1E4 3449      CPI	R20,0x49
     1E5 E0E0      LDI	R30,0
     1E6 075E      CPC	R21,R30
     1E7 F409      BNE	0x01E9
     1E8 C0CB      RJMP	0x02B4
     1E9 E489      LDI	R24,0x49
     1EA E090      LDI	R25,0
     1EB 1784      CP	R24,R20
     1EC 0795      CPC	R25,R21
     1ED F084      BLT	0x01FE
     1EE 334E      CPI	R20,0x3E
     1EF E0E0      LDI	R30,0
     1F0 075E      CPC	R21,R30
     1F1 F409      BNE	0x01F3
     1F2 C0E5      RJMP	0x02D8

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -