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

📄 timer.lis

📁 万能遥控器解码
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0126 80B3              in R24,0x10
 0128 8470              andi R24,4
 012A 8215              cp R24,R2
 012C 01F1              breq L20
 012E           X3:
 012E                   .dbline 74
 012E           ;    {           
 012E                   .dbline 75
 012E           ;     HW_OLD=(PIND&HW);
 012E 80B3              in R24,0x10
 0130 8470              andi R24,4
 0132 80931200          sts _HW_OLD,R24
 0136                   .dbline 76
 0136           ;     m=c;    //每次翻转将定时器中断的次数的值给m,用于记录电平状态的时间  ,m的值会跟随c的值不断更新     
 0136 20900000          lds R2,_c
 013A 30900100          lds R3,_c+1
 013E 30920300          sts _m+1,R3
 0142 20920200          sts _m,R2
 0146                   .dbline 77
 0146           ;       f++;    //记录翻转的次数
 0146 80910800          lds R24,_f
 014A 90910900          lds R25,_f+1
 014E 0196              adiw R24,1
 0150 90930900          sts _f+1,R25
 0154 80930800          sts _f,R24
 0158                   .dbline 78
 0158           ;       x=f;
 0158 1C01              movw R2,R24
 015A 30920500          sts _x+1,R3
 015E 20920400          sts _x,R2
 0162                   .dbline 79
 0162           ;       c=0;
 0162 2224              clr R2
 0164 3324              clr R3
 0166 30920100          sts _c+1,R3
 016A 20920000          sts _c,R2
 016E                   .dbline 80
 016E           ;    }
 016E           L20:
 016E                   .dbline 81
 016E           ;     if(x>3&&x%2==0)    //发生第四次翻转时红外的脉冲数据开始有效
 016E 20900400          lds R2,_x
 0172 30900500          lds R3,_x+1
 0176 83E0              ldi R24,3
 0178 90E0              ldi R25,0
 017A 8215              cp R24,R2
 017C 9305              cpc R25,R3
 017E 08F0              brlo X10
 0180 4DC0              rjmp L22
 0182           X10:
 0182           X4:
 0182 20FC              sbrc R2,0
 0184 4BC0              rjmp L22
 0186           X5:
 0186                   .dbline 82
 0186           ;          {x=0;
 0186                   .dbline 82
 0186 2224              clr R2
 0188 3324              clr R3
 018A 30920500          sts _x+1,R3
 018E 20920400          sts _x,R2
 0192                   .dbline 83
 0192           ;           flag++;        //记录存入数组中某一数据的位数,存入8位时应该清零
 0192 80910600          lds R24,_flag
 0196 90910700          lds R25,_flag+1
 019A 0196              adiw R24,1
 019C 90930700          sts _flag+1,R25
 01A0 80930600          sts _flag,R24
 01A4                   .dbline 84
 01A4           ;           IRCode[IRCON]<<=1;   
 01A4 80E0              ldi R24,<_IRCode
 01A6 90E0              ldi R25,>_IRCode
 01A8 20900A00          lds R2,_IRCON
 01AC 30900B00          lds R3,_IRCON+1
 01B0 220C              lsl R2
 01B2 331C              rol R3
 01B4 280E              add R2,R24
 01B6 391E              adc R3,R25
 01B8 F101              movw R30,R2
 01BA 2080              ldd R2,z+0
 01BC 3180              ldd R3,z+1
 01BE 220C              lsl R2
 01C0 331C              rol R3
 01C2 3182              std z+1,R3
 01C4 2082              std z+0,R2
 01C6                   .dbline 85
 01C6           ;               if(m>12) IRCode[IRCON]|=0x01;//为1是左移后最后一位写1。m的值为一个范围,在7和16之间
 01C6 8CE0              ldi R24,12
 01C8 90E0              ldi R25,0
 01CA 20900200          lds R2,_m
 01CE 30900300          lds R3,_m+1
 01D2 8215              cp R24,R2
 01D4 9305              cpc R25,R3
 01D6 88F4              brsh L24
 01D8           X6:
 01D8                   .dbline 85
 01D8 80E0              ldi R24,<_IRCode
 01DA 90E0              ldi R25,>_IRCode
 01DC A0900A00          lds R10,_IRCON
 01E0 B0900B00          lds R11,_IRCON+1
 01E4 AA0C              lsl R10
 01E6 BB1C              rol R11
 01E8 A80E              add R10,R24
 01EA B91E              adc R11,R25
 01EC F501              movw R30,R10
 01EE 8081              ldd R24,z+0
 01F0 9181              ldd R25,z+1
 01F2 8160              ori R24,1
 01F4 9183              std z+1,R25
 01F6 8083              std z+0,R24
 01F8 11C0              rjmp L25
 01FA           L24:
 01FA                   .dbline 86
 01FA           ;               else IRCode[IRCON]&=0XFE;
 01FA 80E0              ldi R24,<_IRCode
 01FC 90E0              ldi R25,>_IRCode
 01FE A0900A00          lds R10,_IRCON
 0202 B0900B00          lds R11,_IRCON+1
 0206 AA0C              lsl R10
 0208 BB1C              rol R11
 020A A80E              add R10,R24
 020C B91E              adc R11,R25
 020E F501              movw R30,R10
 0210 8081              ldd R24,z+0
 0212 9181              ldd R25,z+1
 0214 8E7F              andi R24,254
 0216 9070              andi R25,0
 0218 9183              std z+1,R25
 021A 8083              std z+0,R24
 021C           L25:
 021C                   .dbline 88
 021C           ;               //PORTB=m;
 021C           ;          }
 021C           L22:
 021C                   .dbline 89
 021C           ;           if(flag==8) 
 021C 80910600          lds R24,_flag
 0220 90910700          lds R25,_flag+1
 0224 8830              cpi R24,8
 0226 E0E0              ldi R30,0
 0228 9E07              cpc R25,R30
 022A 79F5              brne L26
 022C           X7:
 022C                   .dbline 90
 022C           ;                  {
 022C                   .dbline 91
 022C           ;                         flag=0;
 022C 2224              clr R2
 022E 3324              clr R3
 0230 30920700          sts _flag+1,R3
 0234 20920600          sts _flag,R2
 0238                   .dbline 92
 0238           ;                         IRCON++;    //存满一个数据后数组的指针要加一
 0238 80910A00          lds R24,_IRCON
 023C 90910B00          lds R25,_IRCON+1
 0240 0196              adiw R24,1
 0242 90930B00          sts _IRCON+1,R25
 0246 80930A00          sts _IRCON,R24
 024A                   .dbline 93
 024A           ;                         if(IRCON==4)   //数组中的数据存满
 024A 8430              cpi R24,4
 024C E0E0              ldi R30,0
 024E 9E07              cpc R25,R30
 0250 E1F4              brne L28
 0252           X8:
 0252                   .dbline 94
 0252           ;                            {
 0252                   .dbline 96
 0252           ;                           
 0252           ;                                  IRCON=0;     
 0252 30920B00          sts _IRCON+1,R3
 0256 20920A00          sts _IRCON,R2
 025A                   .dbline 97
 025A           ;                                    uart0_init();   //开始向串口发送数据
 025A ECDE              rcall _uart0_init
 025C                   .dbline 98
 025C           ;                                     for(j=0;j<4;j++)
 025C 4427              clr R20
 025E 0BC0              rjmp L33
 0260           L30:
 0260                   .dbline 99
 0260           ;                            {
 0260                   .dbline 100
 0260           ;                                       sendchar(IRCode[j]);
 0260 80E0              ldi R24,<_IRCode
 0262 90E0              ldi R25,>_IRCode
 0264 E42F              mov R30,R20
 0266 FF27              clr R31
 0268 EE0F              lsl R30
 026A FF1F              rol R31
 026C E80F              add R30,R24
 026E F91F              adc R31,R25
 0270 0081              ldd R16,z+0
 0272 EBDE              rcall _sendchar
 0274                   .dbline 102
 0274           ;                                                       //PORTB=IRCode[0];                 
 0274           ;                              }
 0274           L31:
 0274                   .dbline 98
 0274 4395              inc R20
 0276           L33:
 0276                   .dbline 98
 0276 4430              cpi R20,4
 0278 98F3              brlo L30
 027A           X9:
 027A                   .dbline 103
 027A           ;                                          f=0;
 027A 2224              clr R2
 027C 3324              clr R3
 027E 30920900          sts _f+1,R3
 0282 20920800          sts _f,R2
 0286                   .dbline 106
 0286           ;                                       // delay_nms(1000);
 0286           ;                                // TIMSK = 0x00;     //关定时器中断
 0286           ;                   GICR=0X40;    //开外部中断      
 0286 80E4              ldi R24,64
 0288 8BBF              out 0x3b,R24
 028A                   .dbline 107
 028A           ;                            }
 028A           L28:
 028A                   .dbline 110
 028A           ;                                
 028A           ;                
 028A           ;                }      
 028A           L26:
 028A                   .dbline 111
 028A           ;         TCCR0 = 0x02;
 028A 82E0              ldi R24,2
 028C 83BF              out 0x33,R24
 028E                   .dbline 112
 028E           ;         TIMSK = 0x02;
 028E 89BF              out 0x39,R24
 0290                   .dbline -2
 0290           L19:
 0290                   .dbline 0 ; func end
 0290 00D0              rcall pop_xgset300C
 0292 0990              ld R0,y+
 0294 0FBE              out 0x3f,R0
 0296 F991              ld R31,y+
 0298 E991              ld R30,y+
 029A B991              ld R27,y+
 029C A991              ld R26,y+
 029E 9991              ld R25,y+
 02A0 8991              ld R24,y+
 02A2 3991              ld R19,y+
 02A4 2991              ld R18,y+
 02A6 1991              ld R17,y+
 02A8 0991              ld R16,y+
 02AA 9990              ld R9,y+
 02AC 8990              ld R8,y+
 02AE 7990              ld R7,y+
 02B0 6990              ld R6,y+
 02B2 5990              ld R5,y+
 02B4 4990              ld R4,y+
 02B6 3990              ld R3,y+
 02B8 2990              ld R2,y+
 02BA 1990              ld R1,y+
 02BC 0990              ld R0,y+
 02BE 1895              reti
 02C0                   .dbsym r j 20 c
 02C0                   .dbend
 02C0                   .dbfunc e init_devices_timer0 _init_devices_timer0 fV
                        .even
 02C0           _init_devices_timer0::
 02C0                   .dbline -1
 02C0                   .dbline 116
 02C0           ; }
 02C0           ; 
 02C0           ; void init_devices_timer0(void)
 02C0           ; {
 02C0                   .dbline 117
 02C0           ;  CLI(); 
 02C0 F894              cli
 02C2                   .dbline 118
 02C2           ;  timer0_init();
 02C2 01DF              rcall _timer0_init
 02C4                   .dbline 119
 02C4           ;  TIMSK = 0x02;    //开定时器中断
 02C4 82E0              ldi R24,2
 02C6 89BF              out 0x39,R24
 02C8                   .dbline 120
 02C8           ;  SEI(); 
 02C8 7894              sei
 02CA                   .dbline -2
 02CA           L34:
 02CA                   .dbline 0 ; func end
 02CA 0895              ret
 02CC                   .dbend
 02CC                   .dbfunc e main _main fV
                        .even
 02CC           _main::
 02CC                   .dbline -1
 02CC                   .dbline 125
 02CC           ; }
 02CC           ; 
 02CC           ; 
 02CC           ; void main(void)
 02CC           ; {
 02CC                   .dbline 126
 02CC           ;   DDRD&=~BIT(0);
 02CC 8898              cbi 0x11,0
 02CE                   .dbline 127
 02CE           ;   DDRD|=BIT(1);
 02CE 899A              sbi 0x11,1
 02D0                   .dbline 128
 02D0           ;   DDRD&=~BIT(2);
 02D0 8A98              cbi 0x11,2
 02D2                   .dbline 129
 02D2           ;   DDRB=0XFF;
 02D2 8FEF              ldi R24,255
 02D4 87BB              out 0x17,R24
 02D6                   .dbline 130
 02D6           ;   init_devices_int0();
 02D6 EEDE              rcall _init_devices_int0
 02D8           L36:
 02D8                   .dbline 131
 02D8           ;   while(1);
 02D8           L37:
 02D8                   .dbline 131
 02D8 FFCF              rjmp L36
 02DA           X11:
 02DA                   .dbline -2
 02DA           L35:
 02DA                   .dbline 0 ; func end
 02DA 0895              ret
 02DC                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile C:\DOCUME~1\Administrator.27F5F4061F03467\桌面\TIMER\timer.c
 0000           _c::
 0000                   .blkb 2
 0002                   .dbsym e c _c i
 0002           _m::
 0002                   .blkb 2
 0004                   .dbsym e m _m i
 0004           _x::
 0004                   .blkb 2
 0006                   .dbsym e x _x i
 0006           _flag::
 0006                   .blkb 2
 0008                   .dbsym e flag _flag i
 0008           _f::
 0008                   .blkb 2
 000A                   .dbsym e f _f i
 000A           _IRCON::
 000A                   .blkb 2
 000C                   .dbsym e IRCON _IRCON i
 000C           _IRCode::
 000C                   .blkb 6
 0012                   .dbsym e IRCode _IRCode A[6:3]i
 0012           _HW_OLD::
 0012                   .blkb 1
 0013                   .dbsym e HW_OLD _HW_OLD c
 0013           ; }

⌨️ 快捷键说明

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