📄 ir_test.lis
字号:
.module ir_test.c
.area text(rom, con, rel)
0000 .dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir_test.c
0000 .dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\delay.h
0000 .dbfunc e delay_1us _delay_1us fV
.even
0000 _delay_1us::
0000 .dbline -1
0000 .dbline 6
0000 ; /**********延时函数*****************/
0000 ; /*-----------------------------------------------
0000 ; delay_us :1us延时函数
0000 ; ------------------------------------------------*/
0000 ; void delay_1us(void)
0000 ; {
0000 .dbline 7
0000 ; asm("nop");
0000 0000 nop
0002 .dbline -2
0002 L1:
0002 .dbline 0 ; func end
0002 0895 ret
0004 .dbend
0004 .dbfunc e delay_us _delay_us fV
0004 ; t -> R20,R21
.even
0004 _delay_us::
0004 4A93 st -y,R20
0006 5A93 st -y,R21
0008 A801 movw R20,R16
000A .dbline -1
000A .dbline 14
000A ; }
000A ; /*-----------------------------------------------
000A ; delay_nus :长延时函数
000A ; 输入参数: t :延时时间 us
000A ; ------------------------------------------------*/
000A ; void delay_us(unsigned int t)
000A ; {
000A 01C0 xjmp L4
000C L3:
000C .dbline 16
000C ; while(t--)
000C ; delay_1us();
000C F9DF xcall _delay_1us
000E L4:
000E .dbline 15
000E 1A01 movw R2,R20
0010 4150 subi R20,1
0012 5040 sbci R21,0
0014 2220 tst R2
0016 D1F7 brne L3
0018 3320 tst R3
001A C1F7 brne L3
001C X0:
001C .dbline -2
001C L2:
001C .dbline 0 ; func end
001C 5991 ld R21,y+
001E 4991 ld R20,y+
0020 0895 ret
0022 .dbsym r t 20 i
0022 .dbend
0022 .dbfunc e delay_1ms _delay_1ms fV
0022 ; i -> R16,R17
.even
0022 _delay_1ms::
0022 .dbline -1
0022 .dbline 22
0022 ; }
0022 ; /*----------------------------------------------
0022 ; delay_ms :1ms延时函数
0022 ; -----------------------------------------------*/
0022 ; void delay_1ms(void)
0022 ; {
0022 .dbline 24
0022 ; unsigned int i;
0022 ; for(i=0;i<1140;i++);
0022 0027 clr R16
0024 1127 clr R17
0026 02C0 xjmp L10
0028 L7:
0028 .dbline 24
0028 L8:
0028 .dbline 24
0028 0F5F subi R16,255 ; offset = 1
002A 1F4F sbci R17,255
002C L10:
002C .dbline 24
002C 0437 cpi R16,116
002E E4E0 ldi R30,4
0030 1E07 cpc R17,R30
0032 D0F3 brlo L7
0034 X1:
0034 .dbline -2
0034 L6:
0034 .dbline 0 ; func end
0034 0895 ret
0036 .dbsym r i 16 i
0036 .dbend
0036 .dbfunc e delay_ms _delay_ms fV
0036 ; t -> R20,R21
.even
0036 _delay_ms::
0036 4A93 st -y,R20
0038 5A93 st -y,R21
003A A801 movw R20,R16
003C .dbline -1
003C .dbline 31
003C ; }
003C ; /*----------------------------------------------
003C ; delay_nms :长延时函数
003C ; 输入参数: t :延时时间 ms
003C ; -----------------------------------------------*/
003C ; void delay_ms(unsigned int t)
003C ; {
003C 01C0 xjmp L13
003E L12:
003E .dbline 33
003E ; while(t--)
003E ; delay_1ms();
003E F1DF xcall _delay_1ms
0040 L13:
0040 .dbline 32
0040 1A01 movw R2,R20
0042 4150 subi R20,1
0044 5040 sbci R21,0
0046 2220 tst R2
0048 D1F7 brne L12
004A 3320 tst R3
004C C1F7 brne L12
004E X2:
004E .dbline -2
004E L11:
004E .dbline 0 ; func end
004E 5991 ld R21,y+
0050 4991 ld R20,y+
0052 0895 ret
0054 .dbsym r t 20 i
0054 .dbend
.area data(ram, con, rel)
0000 .dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\delay.h
0000 _ir_rx_complete_flag::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\delay.h
0001 .dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir.h
0001 .dbsym e ir_rx_complete_flag _ir_rx_complete_flag c
0001 _bitcnt::
0001 .blkb 1
.area idata
0001 00 .byte 0
.area data(ram, con, rel)
0002 .dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir.h
0002 .dbsym e bitcnt _bitcnt c
0002 _user_code::
0002 .blkb 1
.area idata
0002 00 .byte 0
.area data(ram, con, rel)
0003 .dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir.h
0003 .dbsym e user_code _user_code c
0003 _operate_code::
0003 .blkb 1
.area idata
0003 00 .byte 0
.area data(ram, con, rel)
0004 .dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir.h
0004 .dbsym e operate_code _operate_code c
.area text(rom, con, rel)
0054 .dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir.h
0054 .dbfunc e spk _spk fV
.even
0054 _spk::
0054 .dbline -1
0054 .dbline 9
0054 ; unsigned char ir_rx_complete_flag=0;
0054 ; unsigned char bitcnt=0;
0054 ; unsigned char user_code=0;
0054 ; unsigned char operate_code=0;
0054 ; unsigned char codebegin;
0054 ; unsigned int ir_num;
0054 ;
0054 ; void spk(void)
0054 ; {
0054 .dbline 10
0054 ; PORTD&=~BIT(PD7);
0054 9798 cbi 0x12,7
0056 .dbline 11
0056 ; delay_ms(100);
0056 04E6 ldi R16,100
0058 10E0 ldi R17,0
005A EDDF xcall _delay_ms
005C .dbline 12
005C ; PORTD|=BIT(PD7);
005C 979A sbi 0x12,7
005E .dbline -2
005E L15:
005E .dbline 0 ; func end
005E 0895 ret
0060 .dbend
.area vector(rom, abs)
.org 20
0014 0C943000 jmp _timer1_capt_isr
.area text(rom, con, rel)
0060 .dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir.h
.area bss(ram, con, rel)
0000 .dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir.h
0000 L17:
0000 .blkb 2
.area text(rom, con, rel)
0060 .dbfile D:\mega16_32实验板资料\ICCAVR源程序\遥控器\ir.h
0060 .dbfunc e timer1_capt_isr _timer1_capt_isr fV
0060 .dbsym s oldFall L17 i
0060 ; newFall -> R18,R19
0060 ; temp -> R16,R17
.even
0060 _timer1_capt_isr::
0060 1A92 st -y,R1
0062 2A92 st -y,R2
0064 3A92 st -y,R3
0066 0A93 st -y,R16
0068 1A93 st -y,R17
006A 2A93 st -y,R18
006C 3A93 st -y,R19
006E 8A93 st -y,R24
0070 9A93 st -y,R25
0072 EA93 st -y,R30
0074 1FB6 in R1,0x3f
0076 1A92 st -y,R1
0078 .dbline -1
0078 .dbline 17
0078 ; }
0078 ;
0078 ; #pragma interrupt_handler timer1_capt_isr:iv_TIM1_CAPT
0078 ; void timer1_capt_isr(void)
0078 ; {
0078 .dbline 23
0078 ; //timer 1 input capture event, read (int)value in ICR1 using;
0078 ; // value=ICR1L; //Read low byte first (important)
0078 ; // value|=(int)ICR1H << 8; //Read high byte and shift into top byte
0078 ; static unsigned int oldFall;
0078 ; unsigned int temp,newFall;
0078 ; newFall=ICR1;
0078 26B5 in R18,0x26
007A 37B5 in R19,0x27
007C .dbline 24
007C ; temp=newFall-oldFall; //计算脉冲加间隔的时间
007C 20900000 lds R2,L17
0080 30900100 lds R3,L17+1
0084 8901 movw R16,R18
0086 0219 sub R16,R2
0088 1309 sbc R17,R3
008A .dbline 25
008A ; oldFall=newFall;
008A 30930100 sts L17+1,R19
008E 20930000 sts L17,R18
0092 .dbline 26
0092 ; if(temp>100&&temp<1500) //判断数据0信号
0092 84E6 ldi R24,100
0094 90E0 ldi R25,0
0096 8017 cp R24,R16
0098 9107 cpc R25,R17
009A 48F5 brsh L18
009C X3:
009C 0C3D cpi R16,220
009E E5E0 ldi R30,5
00A0 1E07 cpc R17,R30
00A2 28F5 brsh L18
00A4 X4:
00A4 .dbline 27
00A4 ; {
00A4 .dbline 28
00A4 ; temp=0;
00A4 0027 clr R16
00A6 1127 clr R17
00A8 .dbline 29
00A8 ; bitcnt++;
00A8 80910100 lds R24,_bitcnt
00AC 8F5F subi R24,255 ; addi 1
00AE 80930100 sts _bitcnt,R24
00B2 .dbline 30
00B2 ; if(bitcnt<16)//开始接收前16位
00B2 8031 cpi R24,16
00B4 30F4 brsh L20
00B6 X5:
00B6 .dbline 31
00B6 ; user_code<<=1;
00B6 20900200 lds R2,_user_code
00BA 220C lsl R2
00BC 20920200 sts _user_code,R2
00C0 6FC0 xjmp L19
00C2 L20:
00C2 .dbline 32
00C2 ; else if(bitcnt<32)//开始接收后16位
00C2 80910100 lds R24,_bitcnt
00C6 8032 cpi R24,32
00C8 30F4 brsh L22
00CA X6:
00CA .dbline 33
00CA ; operate_code<<=1;
00CA 20900300 lds R2,_operate_code
00CE 220C lsl R2
00D0 20920300 sts _operate_code,R2
00D4 65C0 xjmp L19
00D6 L22:
00D6 .dbline 34
00D6 ; else if(bitcnt==32)//接收完最后一位
00D6 80910100 lds R24,_bitcnt
00DA 8032 cpi R24,32
00DC 09F0 breq X16
00DE 60C0 xjmp L19
00E0 X16:
00E0 X7:
00E0 .dbline 35
00E0 ; {
00E0 .dbline 36
00E0 ; ir_rx_complete_flag=1;
00E0 81E0 ldi R24,1
00E2 80930000 sts _ir_rx_complete_flag,R24
00E6 .dbline 37
00E6 ; bitcnt=40;
00E6 88E2 ldi R24,40
00E8 80930100 sts _bitcnt,R24
00EC .dbline 38
00EC ; }//接收完最后一位
00EC .dbline 39
00EC ; }
00EC 59C0 xjmp L19
00EE L18:
00EE .dbline 40
00EE ; else if(temp>1500&&temp<4000)//判断数据1信号
00EE 8CED ldi R24,1500
00F0 95E0 ldi R25,5
00F2 8017 cp R24,R16
00F4 9107 cpc R25,R17
00F6 08F0 brlo X17
00F8 40C0 xjmp L26
00FA X17:
00FA X8:
00FA 003A cpi R16,160
00FC EFE0 ldi R30,15
00FE 1E07 cpc R17,R30
0100 08F0 brlo X18
0102 3BC0 xjmp L26
0104 X18:
0104 X9:
0104 .dbline 41
0104 ; {
0104 .dbline 42
0104 ; temp=1;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -