📄 timer.lis
字号:
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 + -