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

📄 ir_test.lis

📁 mega16_32实验板上的程序:mega16+LCD1602+遥控器输入
💻 LIS
📖 第 1 页 / 共 5 页
字号:
                        .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 + -