📄 irr.lis
字号:
02DA DF98 cbi 0x1b,7
02DC .dbline 232
02DC 08EC ldi R16,200
02DE 10E0 ldi R17,0
02E0 8FDE xcall _s_ms
02E2 .dbline 233
02E2 4F5F subi R20,255 ; offset = 1
02E4 5F4F sbci R21,255
02E6 .dbline 234
02E6 L41:
02E6 .dbline 223
02E6 AA94 dec R10
02E8 L43:
02E8 .dbline 223
02E8 AA20 tst R10
02EA 51F7 brne L40
02EC X10:
02EC .dbline -2
02EC L37:
02EC .dbline 0 ; func end
02EC 0C940000 xjmp pop_xgsetF03C
02F0 .dbsym r t 12 c
02F0 .dbsym r i 10 c
02F0 .dbsym r pBuffer 20 pc
02F0 .dbsym l num 8 i
02F0 .dbsym r col 10 c
02F0 .dbsym r row 22 c
02F0 .dbend
.area vector(rom, abs)
.org 4
0004 0C947801 jmp _ext_int0_isr
.area text(rom, con, rel)
02F0 .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\1602.h
.area data(ram, con, rel)
0000 .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\1602.h
0000 _irr_b::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\1602.h
0001 .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
0001 .dbsym e irr_b _irr_b c
0001 _s_s::
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data(ram, con, rel)
0002 .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
0002 .dbsym e s_s _s_s c
0002 _wb::
0002 .blkb 1
.area idata
0002 00 .byte 0
.area data(ram, con, rel)
0003 .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
0003 .dbsym e wb _wb c
0003 _a::
0003 .blkb 1
.area idata
0003 00 .byte 0
.area data(ram, con, rel)
0004 .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
0004 .dbsym e a _a c
0004 _ds::
0004 .blkb 1
.area idata
0004 00 .byte 0
.area data(ram, con, rel)
0005 .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
0005 .dbsym e ds _ds c
0005 _da::
0005 .blkb 4
.area idata
0005 00000000 .word 0,0
.area data(ram, con, rel)
0009 .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
0009 .dbsym e da _da L
.area text(rom, con, rel)
02F0 .dbfile C:\DOCUME~1\wdd\MYDOCU~1\16实验程序\红外接收\irr.c
02F0 .dbfunc e ext_int0_isr _ext_int0_isr fV
.even
02F0 _ext_int0_isr::
02F0 2A92 st -y,R2
02F2 3A92 st -y,R3
02F4 4A92 st -y,R4
02F6 5A92 st -y,R5
02F8 0A93 st -y,R16
02FA 1A93 st -y,R17
02FC 2A93 st -y,R18
02FE 3A93 st -y,R19
0300 8A93 st -y,R24
0302 9A93 st -y,R25
0304 AA93 st -y,R26
0306 BA93 st -y,R27
0308 2FB6 in R2,0x3f
030A 2A92 st -y,R2
030C .dbline -1
030C .dbline 17
030C ; //Atmega16的红外遥控器接收试验
030C ; //使用1602液晶进行显示,
030C ; #include<iom16v.h>
030C ; #include"1602.h"
030C ; #pragma interrupt_handler ext_int0_isr:2 //指定外部中断函数
030C ; #define uchar unsigned char
030C ; #define uint unsigned int
030C ;
030C ; uchar irr_b=0,s_s=0;
030C ; uchar wb=0,a=0,ds=0;
030C ; long da=0;
030C ; uchar d1,d2,d3,d4;
030C ; uchar ten_1,ten_2,ten_3,ten_4,i;
030C ;
030C ; //中断接收
030C ; void ext_int0_isr(void)
030C ; {
030C .dbline 18
030C ; if(irr_b==0) //第一个中断
030C 20900000 lds R2,_irr_b
0310 2220 tst R2
0312 31F4 brne L45
0314 X11:
0314 .dbline 19
0314 ; {
0314 .dbline 20
0314 ; irr_b=1; //状态为:开始接收
0314 81E0 ldi R24,1
0316 80930000 sts _irr_b,R24
031A .dbline 21
031A ; TCNT1L=0x00; //定时器清零
031A 2224 clr R2
031C 2CBC out 0x2c,R2
031E .dbline 22
031E ; }
031E 71C0 xjmp L46
0320 L45:
0320 .dbline 23
0320 ; else if(irr_b==1) //第二个以后的中断
0320 80910000 lds R24,_irr_b
0324 8130 cpi R24,1
0326 09F0 breq X20
0328 6CC0 xjmp L47
032A X20:
032A X12:
032A .dbline 24
032A ; {
032A .dbline 25
032A ; a=TCNT1L; //读取定时器的值
032A 2CB4 in R2,0x2c
032C 20920300 sts _a,R2
0330 .dbline 27
0330 ; //判断是引导,还是数据
0330 ; if((170<a)&&(a<235)) //引导
0330 422C mov R4,R2
0332 3324 clr R3
0334 8AEA ldi R24,170
0336 90E0 ldi R25,0
0338 8215 cp R24,R2
033A 9305 cpc R25,R3
033C A4F4 brge L49
033E X13:
033E 822D mov R24,R2
0340 8B3E cpi R24,235
0342 88F4 brsh L49
0344 X14:
0344 .dbline 28
0344 ; {
0344 .dbline 29
0344 ; wb=0; //数据计数清零
0344 2224 clr R2
0346 20920200 sts _wb,R2
034A .dbline 30
034A ; da=0; //数据清零
034A 80E0 ldi R24,0
034C 90E0 ldi R25,0
034E A0E0 ldi R26,0
0350 B0E0 ldi R27,0
0352 90930600 sts _da+1,R25
0356 80930500 sts _da,R24
035A B0930800 sts _da+2+1,R27
035E A0930700 sts _da+2,R26
0362 .dbline 31
0362 ; TCNT1L=0x00; //定时器清零
0362 2CBC out 0x2c,R2
0364 .dbline 32
0364 ; }
0364 4EC0 xjmp L50
0366 L49:
0366 .dbline 33
0366 ; else if((8<a)&&(a<25)) //数据0
0366 20900300 lds R2,_a
036A 88E0 ldi R24,8
036C 8215 cp R24,R2
036E F8F4 brsh L51
0370 X15:
0370 822D mov R24,R2
0372 8931 cpi R24,25
0374 E0F4 brsh L51
0376 X16:
0376 .dbline 34
0376 ; {
0376 .dbline 35
0376 ; wb++;
0376 80910200 lds R24,_wb
037A 8F5F subi R24,255 ; addi 1
037C 80930200 sts _wb,R24
0380 .dbline 36
0380 ; da=(da<<1);
0380 40900700 lds R4,_da+2
0384 50900800 lds R5,_da+2+1
0388 20900500 lds R2,_da
038C 30900600 lds R3,_da+1
0390 220C lsl R2
0392 331C rol R3
0394 441C rol R4
0396 551C rol R5
0398 30920600 sts _da+1,R3
039C 20920500 sts _da,R2
03A0 50920800 sts _da+2+1,R5
03A4 40920700 sts _da+2,R4
03A8 .dbline 37
03A8 ; TCNT1L=0x00;
03A8 2224 clr R2
03AA 2CBC out 0x2c,R2
03AC .dbline 38
03AC ; }
03AC 2AC0 xjmp L52
03AE L51:
03AE .dbline 39
03AE ; else if((25<a)&&(a<45)) //数据1
03AE 00910300 lds R16,_a
03B2 89E1 ldi R24,25
03B4 8017 cp R24,R16
03B6 28F5 brsh L53
03B8 X17:
03B8 0D32 cpi R16,45
03BA 18F5 brsh L53
03BC X18:
03BC .dbline 40
03BC ; {
03BC .dbline 41
03BC ; wb++;
03BC 80910200 lds R24,_wb
03C0 8F5F subi R24,255 ; addi 1
03C2 80930200 sts _wb,R24
03C6 .dbline 42
03C6 ; da=(da<<1)+1;
03C6 81E0 ldi R24,1
03C8 90E0 ldi R25,0
03CA A0E0 ldi R26,0
03CC B0E0 ldi R27,0
03CE 40900700 lds R4,_da+2
03D2 50900800 lds R5,_da+2+1
03D6 20900500 lds R2,_da
03DA 30900600 lds R3,_da+1
03DE 220C lsl R2
03E0 331C rol R3
03E2 441C rol R4
03E4 551C rol R5
03E6 280E add R2,R24
03E8 391E adc R3,R25
03EA 4A1E adc R4,R26
03EC 5B1E adc R5,R27
03EE 30920600 sts _da+1,R3
03F2 20920500 sts _da,R2
03F6 50920800 sts _da+2+1,R5
03FA 40920700 sts _da+2,R4
03FE .dbline 43
03FE ; TCNT1L=0x00;
03FE 2224 clr R2
0400 2CBC out 0x2c,R2
0402 .dbline 44
0402 ; }
0402 L53:
0402 L52:
0402 L50:
0402 .dbline 45
0402 ; }
0402 L47:
0402 L46:
0402 .dbline 46
0402 ; if(wb==32) //数据长度够32位
0402 80910200 lds R24,_wb
0406 8032 cpi R24,32
0408 41F4 brne L55
040A X19:
040A .dbline 47
040A ; {
040A .dbline 48
040A ; irr_b=0; //状态为停止接收
040A 2224 clr R2
040C 20920000 sts _irr_b,R2
0410 .dbline 49
0410 ; wb=0; //数据计数清零
0410 20920200 sts _wb,R2
0414 .dbline 50
0414 ; s_s=1; //打开显示许可
0414 81E0 ldi R24,1
0416 80930100 sts _s_s,R24
041A .dbline 51
041A ; }
041A L55:
041A .dbline -2
041A L44:
041A .dbline 0 ; func end
041A 2990 ld R2,y+
041C 2FBE out 0x3f,R2
041E B991 ld R27,y+
0420 A991 ld R26,y+
0422 9991 ld R25,y+
0424 8991 ld R24,y+
0426 3991 ld R19,y+
0428 2991 ld R18,y+
042A 1991 ld R17,y+
042C 0991 ld R16,y+
042E 5990 ld R5,y+
0430 4990 ld R4,y+
0432 3990 ld R3,y+
0434 2990 ld R2,y+
0436 1895 reti
0438 .dbend
0438 .dbfunc e t1_init _t1_init fV
.even
0438 _t1_init::
0438 .dbline -1
0438 .dbline 56
0438 ; }
0438 ;
0438 ; //定时器T1初始化
0438 ; void t1_init()
0438 ; {
0438 .dbline 57
0438 ; TCCR1B=0x00; //关闭定时器
0438 2224 clr R2
043A 2EBC out 0x2e,R2
043C .dbline 58
043C ; TCNT1H=0x00; //定时器初值
043C 2DBC out 0x2d,R2
043E .dbline 59
043E ; TCNT1L=0x00;
043E 2CBC out 0x2c,R2
0440 .dbline 60
0440 ; TCCR1A=0x00; //普通模式
0440 2FBC out 0x2f,R2
0442 .dbline 61
0442 ; TCCR1B=0x05; //1024分频
0442 85E0 ldi R24,5
0444 8EBD out 0x2e,R24
0446 .dbline -2
0446 L57:
0446 .dbline 0 ; func end
0446 0895 ret
0448 .dbend
0448 .dbfunc e main _main fI
.even
0448 _main::
0448 2297 sbiw R28,2
044A .dbline -1
044A .dbline 66
044A ; }
044A ;
044A ; //主函数
044A ; main()
044A ; {
044A .dbline 68
044A ; //初始化端口
044A ; DDRA=0xff;
044A 8FEF ldi R24,255
044C 8ABB out 0x1a,R24
044E .dbline 69
044E ; PORTA=0x00;
044E 2224 clr R2
0450 2BBA out 0x1b,R2
0452 .dbline 70
0452 ; DDRB=0xff;
0452 87BB out 0x17,R24
0454 .dbline 71
0454 ; DDRD=0x00; //中断输入
0454 21BA out 0x11,R2
0456 .dbline 72
0456 ; PORTD=0xff; //内部上拉
0456 82BB out 0x12,R24
0458 .dbline 74
0458 ;
0458 ; t1_init(); //定时器t1初始化
0458 EFDF xcall _t1_init
045A .dbline 76
045A ;
045A ; MCUCR = 0x02; //下降沿中断
045A 82E0 ldi R24,2
045C 85BF out 0x35,R24
045E .dbline 77
045E ; GICR = 0x40; //开外部中断int_0
045E 80E4 ldi R24,64
0460 8BBF out 0x3b,R24
0462 .dbline 78
0462 ; TIMSK = 0x00;
0462 2224 clr R2
0464 29BE out 0x39,R2
0466 .dbline 79
0466 ; SREG=0x80; //开全局中断
0466 80E8 ldi R24,128
0468 8FBF out 0x3f,R24
046A .dbline 80
046A ; s_s=1; //开机进行一次显示
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -