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

📄 irremote.lis

📁 ICCAVR环境下
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 0104 0895              ret
 0106                   .dbend
 0106                   .dbfunc e main _main fV
                        .even
 0106           _main::
 0106                   .dbline -1
 0106                   .dbline 83
 0106           ;     //使能接收,使能发送
 0106           ; }
 0106           ; 
 0106           ; void main(void)
 0106           ; {
 0106                   .dbline 84
 0106           ;    PORTA=0XFF;         
 0106 8FEF              ldi R24,255
 0108 8BBB              out 0x1b,R24
 010A                   .dbline 85
 010A           ;       DDRA=0XFF;                  //OUT
 010A 8ABB              out 0x1a,R24
 010C                   .dbline 86
 010C           ;       PORTB=0XFF;
 010C 88BB              out 0x18,R24
 010E                   .dbline 87
 010E           ;       DDRB=0X03;                 //PB0,PB1  OUT
 010E 83E0              ldi R24,3
 0110 87BB              out 0x17,R24
 0112                   .dbline 88
 0112           ;       PORTC=0XFF;     
 0112 8FEF              ldi R24,255
 0114 85BB              out 0x15,R24
 0116                   .dbline 89
 0116           ;     DDRD  =(1<<PIN_TXD);                                                              //TXD为输出   
 0116 82E0              ldi R24,2
 0118 81BB              out 0x11,R24
 011A                   .dbline 90
 011A           ;       init_USART();      
 011A EBDF              xcall _init_USART
 011C                   .dbline 91
 011C           ;       MCUCSR &=~(1<<ISC2);         //falling edge interrupt
 011C 84B7              in R24,0x34
 011E 8F7B              andi R24,191
 0120 84BF              out 0x34,R24
 0122                   .dbline 92
 0122           ;       GIFR=(1<<INTF2);             //写1清除标志位,在使能中断前最好先把对应的标志位清除,以免误触发
 0122 80E2              ldi R24,32
 0124 8ABF              out 0x3a,R24
 0126                   .dbline 93
 0126           ;     GICR=(1<<INT2);            //使能INT2外部中断
 0126 8BBF              out 0x3b,R24
 0128                   .dbline 94
 0128           ;     SEI();                                            //使能全局中断
 0128 7894              sei
 012A                   .dbline 95
 012A           ;       flag=0;
 012A 2224              clr R2
 012C 20920100          sts _flag,R2
 0130 09C0              xjmp L30
 0132           L29:
 0132                   .dbline 97
 0132           ;       while(1)
 0132           ;       {
 0132                   .dbline 98
 0132           ;               if(flag==1)
 0132 80910100          lds R24,_flag
 0136 8130              cpi R24,1
 0138 21F4              brne L32
 013A                   .dbline 99
 013A           ;               {
 013A                   .dbline 100
 013A           ;                 display(code);
 013A 00910000          lds R16,_code
 013E 8ADF              xcall _display
 0140                   .dbline 101
 0140           ;               }
 0140 01C0              xjmp L33
 0142           L32:
 0142                   .dbline 103
 0142           ;               else
 0142           ;               {
 0142                   .dbline 104
 0142           ;                displayerror();
 0142 B5DF              xcall _displayerror
 0144                   .dbline 105
 0144           ;           }
 0144           L33:
 0144                   .dbline 107
 0144           L30:
 0144                   .dbline 96
 0144 F6CF              xjmp L29
 0146           X0:
 0146                   .dbline -2
 0146           L28:
 0146                   .dbline 0 ; func end
 0146 0895              ret
 0148                   .dbend
                        .area vector(rom, abs)
                        .org 72
 0048 0C94A400          jmp _int2pro
                        .area text(rom, con, rel)
 0148                   .dbfile D:\M16开发板实验教程\icc-avr\irremote\irremote.c
 0148                   .dbfunc e int2pro _int2pro fV
 0148           ;              k -> R20
 0148           ;             aa -> y+0
 0148           ;              i -> R10
 0148           ;             dm -> R22
 0148           ;              j -> R12
                        .even
 0148           _int2pro::
 0148 0E940000          xcall push_lset
 014C 0E940000          xcall push_gset4
 0150 2297              sbiw R28,2
 0152                   .dbline -1
 0152                   .dbline 115
 0152           ;               
 0152           ;       }
 0152           ; }
 0152           ; 
 0152           ; /**********************************************************************
 0152           ; function: ext2 interrupt service function 
 0152           ; **********************************************************************/
 0152           ; #pragma interrupt_handler int2pro: iv_INT2
 0152           ; void int2pro(void) //INT2中断服务程序
 0152           ; {
 0152                   .dbline 116
 0152           ;   unsigned char i,j,k,dm=0,aa[2];
 0152 6627              clr R22
 0154                   .dbline 117
 0154           ;    for(k=0;k<10;k++)            //重复10次,目的是检测在9毫秒内如果出现高电平就退出解码程序
 0154 4427              clr R20
 0156 54C0              xjmp L38
 0158           L35:
 0158                   .dbline 118
 0158           ;   {                              //aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
 0158                   .dbline 120
 0158           ;     
 0158           ;     delay0_9ms();                   //延时0.9毫秒
 0158 BDDF              xcall _delay0_9ms
 015A                   .dbline 121
 015A           ;     if ((PINB&(1<<IR))==(1<<IR))
 015A 86B3              in R24,0x16
 015C 8470              andi R24,4
 015E 8430              cpi R24,4
 0160 11F4              brne L39
 0162                   .dbline 122
 0162           ;            {k=10;break;}    //延时0.9毫秒后判断PB2脚是否出现高电平如果有就退出解码程序
 0162                   .dbline 122
 0162 4AE0              ldi R20,10
 0164                   .dbline 122
 0164 50C0              xjmp L37
 0166           L39:
 0166                   .dbline 123
 0166           ;     else if(k==9)                //重复10次?
 0166 4930              cpi R20,9
 0168 09F0              breq X3
 016A 49C0              xjmp L41
 016C           X3:
 016C                   .dbline 124
 016C           ;     {                     //bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 016C           L43:
 016C                   .dbline 125
 016C           L44:
 016C                   .dbline 125
 016C           ;             while((PINB&(1<<IR))==0);       //等待高电平避开9毫秒低电平引导脉冲
 016C B29B              sbis 0x16,2
 016E FECF              rjmp L43
 0170                   .dbline 126
 0170           ;             delay4_5ms();           //延时4.5毫秒避开4.5毫秒的结果码
 0170 B5DF              xcall _delay4_5ms
 0172                   .dbline 132
 0172           ; 
 0172           ;                       
 0172           ; /********************************************
 0172           ; //26位的用户码,前13位数据码,后13位数据反码
 0172           ; *********************************************/
 0172           ;               for(j=1;j<=26;j++)//每组数据为26位
 0172 CC24              clr R12
 0174 C394              inc R12
 0176 0BC0              xjmp L49
 0178           X1:
 0178                   .dbline 133
 0178           ;                 {                 
 0178           L50:
 0178                   .dbline 134
 0178           L51:
 0178                   .dbline 134
 0178           ;                  while((PINB&(1<<IR))==0);  //
 0178 B29B              sbis 0x16,2
 017A FECF              rjmp L50
 017C                   .dbline 135
 017C           ;                  delay0_9ms();
 017C ABDF              xcall _delay0_9ms
 017E                   .dbline 136
 017E           ;                   if((PINB&(1<<IR))==(1<<IR))
 017E 86B3              in R24,0x16
 0180 8470              andi R24,4
 0182 8430              cpi R24,4
 0184 19F4              brne L53
 0186                   .dbline 137
 0186           ;                    {
 0186                   .dbline 138
 0186           ;                                          delay_nms(1);
 0186 01E0              ldi R16,1
 0188 10E0              ldi R17,0
 018A 55DF              xcall _delay_nms
 018C                   .dbline 139
 018C           ;                      }
 018C           L53:
 018C                   .dbline 140
 018C           L47:
 018C                   .dbline 132
 018C C394              inc R12
 018E           L49:
 018E                   .dbline 132
 018E 8AE1              ldi R24,26
 0190 8C15              cp R24,R12
 0192 90F7              brsh L51
 0194                   .dbline 147
 0194           ;                 }
 0194           ; 
 0194           ; 
 0194           ; /***************************************************
 0194           ; //16位的用户码,前8位数据码,后8位数据反码
 0194           ; ****************************************************/
 0194           ; 
 0194           ;                         for(i=0;i<2;i++)     
 0194 AA24              clr R10
 0196 23C0              xjmp L58
 0198           L55:
 0198                   .dbline 148
 0198           ;                {                
 0198                   .dbline 149
 0198           ;                  for(j=1;j<=8;j++)//每组数据为8位
 0198 CC24              clr R12
 019A C394              inc R12
 019C 15C0              xjmp L62
 019E           X2:
 019E                   .dbline 150
 019E           ;                 {                
 019E           L63:
 019E                   .dbline 151
 019E           L64:
 019E                   .dbline 151
 019E           ;                  while((PINB&(1<<IR))==0);  //
 019E B29B              sbis 0x16,2
 01A0 FECF              rjmp L63
 01A2                   .dbline 152
 01A2           ;                  delay0_9ms();
 01A2 98DF              xcall _delay0_9ms
 01A4                   .dbline 153
 01A4           ;                   if((PINB&(1<<IR))==(1<<IR))
 01A4 86B3              in R24,0x16
 01A6 8470              andi R24,4
 01A8 8430              cpi R24,4
 01AA 49F4              brne L66
 01AC                   .dbline 154
 01AC           ;                    {
 01AC                   .dbline 155
 01AC           ;                                    delay_nms(1);
 01AC 01E0              ldi R16,1
 01AE 10E0              ldi R17,0
 01B0 42DF              xcall _delay_nms
 01B2                   .dbline 156
 01B2           ;                      dm=dm|0x80;
 01B2 6068              ori R22,128
 01B4                   .dbline 157
 01B4           ;                      if(j<8) dm=dm>>1;           //数据"1",右移一个"1",一共7次
 01B4 8C2D              mov R24,R12
 01B6 8830              cpi R24,8
 01B8 30F4              brsh L67
 01BA                   .dbline 157
 01BA 6695              lsr R22
 01BC                   .dbline 158
 01BC           ;                    }                
 01BC 04C0              xjmp L67
 01BE           L66:
 01BE                   .dbline 159
 01BE           ;                   else  if(j<8) dm=dm>>1;          //数据"0",一共7次
 01BE 8C2D              mov R24,R12
 01C0 8830              cpi R24,8
 01C2 08F4              brsh L70
 01C4                   .dbline 159
 01C4 6695              lsr R22
 01C6           L70:
 01C6           L67:
 01C6                   .dbline 160
 01C6           L60:
 01C6                   .dbline 149
 01C6 C394              inc R12
 01C8           L62:
 01C8                   .dbline 149
 01C8 88E0              ldi R24,8
 01CA 8C15              cp R24,R12
 01CC 40F7              brsh L64
 01CE                   .dbline 161
 01CE CE01              movw R24,R28
 01D0 EA2D              mov R30,R10
 01D2 FF27              clr R31
 01D4 E80F              add R30,R24
 01D6 F91F              adc R31,R25
 01D8 6083              std z+0,R22
 01DA                   .dbline 162
 01DA 6627              clr R22
 01DC                   .dbline 163
 01DC           L56:
 01DC                   .dbline 147
 01DC A394              inc R10
 01DE           L58:
 01DE                   .dbline 147
 01DE 8A2D              mov R24,R10
 01E0 8230              cpi R24,2
 01E2 D0F2              brlo L55
 01E4                   .dbline 164
 01E4           ;                 }                    
 01E4           ;              aa[i]=dm;
 01E4           ;              dm=0;
 01E4           ;                } 
 01E4           ;                         if(aa[0]=~aa[1])
 01E4 2980              ldd R2,y+1
 01E6 2094              com R2
 01E8 2882              std y+0,R2
 01EA 2220              tst R2
 01EC 41F0              breq L72
 01EE                   .dbline 165
 01EE           ;                         {  
 01EE                   .dbline 166
 01EE           ;                code=aa[0];
 01EE 20920000          sts _code,R2
 01F2                   .dbline 167
 01F2           ;                          flag=1; 
 01F2 81E0              ldi R24,1
 01F4 80930100          sts _flag,R24
 01F8                   .dbline 168
 01F8           ;                          put_c(code);    
 01F8 00910000          lds R16,_code
 01FC 76DF              xcall _put_c
 01FE                   .dbline 169
 01FE           ;                         }       
 01FE           L72:
 01FE                   .dbline 171
 01FE           ;             
 01FE           ;           }                    
 01FE           L41:
 01FE                   .dbline 172
 01FE           L36:
 01FE                   .dbline 117
 01FE 4395              inc R20
 0200           L38:
 0200                   .dbline 117
 0200 4A30              cpi R20,10
 0202 08F4              brsh X4
 0204 A9CF              xjmp L35
 0206           X4:
 0206           L37:
 0206                   .dbline -2
 0206           L34:
 0206 2296              adiw R28,2
 0208 0E940000          xcall pop_gset4
 020C 0E940000          xcall pop_lset
 0210                   .dbline 0 ; func end
 0210 1895              reti
 0212                   .dbsym r k 20 c
 0212                   .dbsym l aa 0 A[2:2]c
 0212                   .dbsym r i 10 c
 0212                   .dbsym r dm 22 c
 0212                   .dbsym r j 12 c
 0212                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile D:\M16开发板实验教程\icc-avr\irremote\irremote.c
 0000           _code::
 0000                   .blkb 1
 0001                   .dbsym e code _code c
 0001           _flag::
 0001                   .blkb 1
 0002                   .dbsym e flag _flag c

⌨️ 快捷键说明

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