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

📄 init.lis

📁 433M收发,内有PCB(用99打开),源程序ICC打开,用了IC发送和三极管两种,接收用RX3310
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 00D6 20920000          sts _ADcon,R2
 00DA                   .dbline 105
 00DA           ;  ADCSRA=0X16;
 00DA 86E1              ldi R24,22
 00DC 80937A00          sts 122,R24
 00E0                   .dbline 106
 00E0           ;  ADMUX=0X00;                          //关ADC
 00E0 2224              clr R2
 00E2 20927C00          sts 124,R2
 00E6                   .dbline 107
 00E6           ;  SEI();
 00E6 7894              sei
 00E8                   .dbline -2
 00E8           L6:
 00E8                   .dbline 0 ; func end
 00E8 0895              ret
 00EA                   .dbend
 00EA                   .dbfunc e CRC3 _CRC3 fc
 00EA           ;              i -> <dead>
 00EA           ;              j -> R22
 00EA           ;            len -> R10
 00EA           ;           data -> R20,R21
                        .even
 00EA           _CRC3::
 00EA 00D0              rcall push_gset3
 00EC A22E              mov R10,R18
 00EE A801              movw R20,R16
 00F0                   .dbline -1
 00F0                   .dbline 120
 00F0           ;  }
 00F0           ; /****************************************** 
 00F0           ; CRC3校验函数  
 00F0           ; 输  入:        ptr需要进行校验的数据包  
 00F0           ;         len需要校验的数据包字节数  
 00F0           ; 输  出:        校验码; 
 00F0           ; 调  用:        无; 
 00F0           ; 被调用:        从机协议打包函数; 
 00F0           ; 功  能:        将一给定的数据包进行CRC12校验给调用者返回校验码  
 00F0           ; ******************************************/ 
 00F0           ; 
 00F0           ; unsigned char CRC3(unsigned char *data, unsigned char len) 
 00F0           ; { 
 00F0                   .dbline 123
 00F0           ;     unsigned char i; 
 00F0           ;     unsigned char j; 
 00F0           ;     j = 0; 
 00F0 6627              clr R22
 00F2                   .dbline 124
 00F2           ;       crc=0;
 00F2 2224              clr R2
 00F4 20920000          sts _crc,R2
 00F8 29C0              rjmp L12
 00FA           L11:
 00FA                   .dbline 126
 00FA           ;     while(len) 
 00FA           ;     { 
 00FA                   .dbline 128
 00FA           ;         /*多项式除法*/ 
 00FA           ;         if(*data & (0x80>>j))  //如果该位为1 
 00FA 262F              mov R18,R22
 00FC 3327              clr R19
 00FE 00E8              ldi R16,128
 0100 10E0              ldi R17,0
 0102 00D0              rcall asr16
 0104 FA01              movw R30,R20
 0106 2080              ldd R2,z+0
 0108 3324              clr R3
 010A 2022              and R2,R16
 010C 3122              and R3,R17
 010E 2220              tst R2
 0110 11F4              brne X0
 0112 3320              tst R3
 0114 29F0              breq L14
 0116           X0:
 0116                   .dbline 129
 0116           ;             crc |= 0x01;  //则在余数尾部添1否则添0 
 0116 80910000          lds R24,_crc
 011A 8160              ori R24,1
 011C 80930000          sts _crc,R24
 0120           L14:
 0120                   .dbline 130
 0120           ;         if(crc >= 0x8) 
 0120 80910000          lds R24,_crc
 0124 8830              cpi R24,8
 0126 30F0              brlo L16
 0128                   .dbline 131
 0128           ;             crc ^= 11; 
 0128 8BE0              ldi R24,11
 012A 20900000          lds R2,_crc
 012E 2826              eor R2,R24
 0130 20920000          sts _crc,R2
 0134           L16:
 0134                   .dbline 132
 0134           ;         crc <<= 1; 
 0134 20900000          lds R2,_crc
 0138 220C              lsl R2
 013A 20920000          sts _crc,R2
 013E                   .dbline 133
 013E           ;         j++; 
 013E 6395              inc R22
 0140                   .dbline 134
 0140           ;         if(j == 8) 
 0140 6830              cpi R22,8
 0142 21F4              brne L18
 0144                   .dbline 135
 0144           ;         { 
 0144                   .dbline 136
 0144           ;             j = 0; 
 0144 6627              clr R22
 0146                   .dbline 137
 0146           ;             data++; 
 0146 4F5F              subi R20,255  ; offset = 1
 0148 5F4F              sbci R21,255
 014A                   .dbline 138
 014A           ;             len--; 
 014A AA94              dec R10
 014C                   .dbline 139
 014C           ;         } 
 014C           L18:
 014C                   .dbline 140
 014C           L12:
 014C                   .dbline 125
 014C AA20              tst R10
 014E A9F6              brne L11
 0150                   .dbline 141
 0150           ;       }
 0150           ;     return(crc);       
 0150 00910000          lds R16,_crc
 0154                   .dbline -2
 0154           L10:
 0154 00D0              rcall pop_gset3
 0156                   .dbline 0 ; func end
 0156 0895              ret
 0158                   .dbsym l i 1 c
 0158                   .dbsym r j 22 c
 0158                   .dbsym r len 10 c
 0158                   .dbsym r data 20 pc
 0158                   .dbend
                        .area vector(rom, abs)
                        .org 32
 0020 ACC0              rjmp _timer0_ovf_isr
                        .area text(rom, con, rel)
 0158                   .dbfile E:\abol\file\EMD\programme\init.c
 0158                   .dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
 0158           ;              j -> R20
 0158           ;              i -> R22
                        .even
 0158           _timer0_ovf_isr::
 0158 00D0              rcall push_lset
 015A 00D0              rcall push_gset2
 015C                   .dbline -1
 015C                   .dbline 145
 015C           ; }
 015C           ; #pragma interrupt_handler timer0_ovf_isr:17
 015C           ; void timer0_ovf_isr(void)     //中断程序 
 015C           ; { 
 015C                   .dbline 147
 015C           ;   unsigned char i,j;
 015C           ;   TCNT0=196;    //产生16.8K的信号
 015C 84EC              ldi R24,196
 015E 86BD              out 0x26,R24
 0160                   .dbline 149
 0160           ; 
 0160           ;   if (((flag&0x02)!=0)&&((flag&0x04)==0))//RF开关      
 0160 20900000          lds R2,_flag
 0164 21FE              sbrs R2,1
 0166 1FC1              rjmp L21
 0168 22FC              sbrc R2,2
 016A 1DC1              rjmp L21
 016C                   .dbline 150
 016C           ;   {//1
 016C                   .dbline 151
 016C           ;    if ((PINC&0x08)==0)//测试输入电平 如输入为1跳到高计数
 016C 3399              sbic 0x6,3
 016E 31C0              rjmp L23
 0170                   .dbline 152
 0170           ;     {//2
 0170                   .dbline 153
 0170           ;      if ((flag&0x01)==0)//检测以前的解码状态
 0170 20FC              sbrc R2,0
 0172 0CC0              rjmp L25
 0174                   .dbline 154
 0174           ;      {//2-1
 0174                   .dbline 155
 0174           ;        LO_COUNT++;//最大计数 FFH
 0174 80910000          lds R24,_LO_COUNT
 0178 8F5F              subi R24,255    ; addi 1
 017A 80930000          sts _LO_COUNT,R24
 017E                   .dbline 156
 017E           ;          if (LO_COUNT==0)
 017E 8823              tst R24
 0180 09F0              breq X3
 0182 11C1              rjmp L20
 0184           X3:
 0184                   .dbline 157
 0184           ;           {//2-1'
 0184                   .dbline 158
 0184           ;           LO_COUNT--;
 0184 8150              subi R24,1
 0186 80930000          sts _LO_COUNT,R24
 018A                   .dbline 159
 018A           ;           }//2-1'
 018A                   .dbline 160
 018A           ;        return;//大于FFH跳出中断
 018A 0DC1              rjmp L20
 018C           L25:
 018C                   .dbline 162
 018C           ;        }//2-1
 018C           ;        DECODER_STATUS_L; //变成当前状态
 018C 80910000          lds R24,_flag
 0190 8E7F              andi R24,254
 0192 80930000          sts _flag,R24
 0196                   .dbline 163
 0196           ;        LO_COUNT_SAVE=LO_COUNT;//保存低电平计数
 0196 20900000          lds R2,_LO_COUNT
 019A 20920000          sts _LO_COUNT_SAVE,R2
 019E                   .dbline 164
 019E           ;        LO_COUNT=0;//更新低电平计数
 019E 2224              clr R2
 01A0 20920000          sts _LO_COUNT,R2
 01A4                   .dbline 165
 01A4           ;        if ((HI_COUNT_SAVE>MAXDURATION)||(HI_COUNT_SAVE==0))//如果高电平大于限定值
 01A4 E0E0              ldi R30,<_MAXDURATION
 01A6 F0E0              ldi R31,>_MAXDURATION
 01A8 E491              lpm R30,Z
 01AA 20900000          lds R2,_HI_COUNT_SAVE
 01AE E215              cp R30,R2
 01B0 18F0              brlo L31
 01B2 2220              tst R2
 01B4 09F0              breq X4
 01B6 F7C0              rjmp L20
 01B8           X4:
 01B8           L31:
 01B8                   .dbline 166
 01B8           ;          {//2-2
 01B8                   .dbline 167
 01B8           ;          BITCOUNTER=CODELANGTH;//代码是错误的
 01B8 E0E0              ldi R30,<_CODELANGTH
 01BA F0E0              ldi R31,>_CODELANGTH
 01BC E491              lpm R30,Z
 01BE E0930000          sts _BITCOUNTER,R30
 01C2                   .dbline 168
 01C2           ;          data[0]=0; 
 01C2 2224              clr R2
 01C4 20920000          sts _data,R2
 01C8                   .dbline 169
 01C8           ;          data[1]=0;
 01C8 20920100          sts _data+1,R2
 01CC                   .dbline 170
 01CC           ;          data[2]=0;
 01CC 20920200          sts _data+2,R2
 01D0                   .dbline 171
 01D0           ;          }//2-2
 01D0                   .dbline 172
 01D0           ;          return;//跳出中断
 01D0 EAC0              rjmp L20
 01D2           L23:
 01D2                   .dbline 175
 01D2           ;     }//2
 01D2           ;    else//高计数
 01D2           ;    {//3
 01D2                   .dbline 176
 01D2           ;    if ((flag&0x01)!=0)//检测以前的解码状态
 01D2 20900000          lds R2,_flag
 01D6 20FE              sbrs R2,0
 01D8 0CC0              rjmp L34
 01DA                   .dbline 177
 01DA           ;     {//4
 01DA                   .dbline 178
 01DA           ;       HI_COUNT++;
 01DA 80910000          lds R24,_HI_COUNT
 01DE 8F5F              subi R24,255    ; addi 1
 01E0 80930000          sts _HI_COUNT,R24
 01E4                   .dbline 179
 01E4           ;         if (HI_COUNT==0)//大于FFH跳出中断
 01E4 8823              tst R24
 01E6 09F0              breq X5
 01E8 DEC0              rjmp L20
 01EA           X5:
 01EA                   .dbline 180
 01EA           ;         {//4-1
 01EA                   .dbline 181
 01EA           ;         HI_COUNT--;
 01EA 8150              subi R24,1
 01EC 80930000          sts _HI_COUNT,R24
 01F0                   .dbline 182
 01F0           ;         }//4-1
 01F0                   .dbline 183
 01F0           ;         return;//跳出中断
 01F0 DAC0              rjmp L20
 01F2           L34:
 01F2                   .dbline 185
 01F2           ;     }//4
 01F2           ;       DECODER_STATUS_H; //变成当前状态
 01F2 80910000          lds R24,_flag
 01F6 8160              ori R24,1
 01F8 80930000          sts _flag,R24
 01FC                   .dbline 186
 01FC           ;       HI_COUNT_SAVE=HI_COUNT;//保存高电平计数
 01FC 20900000          lds R2,_HI_COUNT
 0200 20920000          sts _HI_COUNT_SAVE,R2
 0204                   .dbline 187
 0204           ;       HI_COUNT=0;//更新低电平计数
 0204 2224              clr R2
 0206 20920000          sts _HI_COUNT,R2
 020A                   .dbline 188

⌨️ 快捷键说明

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