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

📄 m8sp01.lis

📁 AVR MEGA8双机串行口通讯程序,单工485方式,用于单片机组网,有PROTEUS仿真电路,可以立刻验证
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 013C 8F5F              subi R24,255    ; addi 1
 013E 80930900          sts _RXbufP,R24
 0142                   .dbline 198
 0142           ;            }          
 0142           L27:
 0142                   .dbline 199
 0142 80E0              ldi R24,<_RXBUF
 0144 90E0              ldi R25,>_RXBUF
 0146 E0910900          lds R30,_RXbufP
 014A FF27              clr R31
 014C E80F              add R30,R24
 014E F91F              adc R31,R25
 0150 0083              std z+0,R16
 0152                   .dbline 201
 0152           L24:
 0152                   .dbline -2
 0152           L22:
 0152 2990              ld R2,y+
 0154 2FBE              out 0x3f,R2
 0156 F991              ld R31,y+
 0158 E991              ld R30,y+
 015A 9991              ld R25,y+
 015C 8991              ld R24,y+
 015E 0991              ld R16,y+
 0160 3990              ld R3,y+
 0162 2990              ld R2,y+
 0164                   .dbline 0 ; func end
 0164 1895              reti
 0166                   .dbsym r TmpD 16 c
 0166                   .dbend
 0166                   .dbfunc e TXbufRDY _TXbufRDY fV
                        .even
 0166           _TXbufRDY::
 0166                   .dbline -1
 0166                   .dbline 204
 0166           ;            RXBUF[RXbufP]=TmpD;
 0166           ;           
 0166           ;         }//else
 0166           ;  }//void uart1_rx_isr(void)
 0166           ; void TXbufRDY(void)
 0166           ; {
 0166                   .dbline 206
 0166           ;  
 0166           ;  TXBUF[0]=TRFG0;
 0166 8EEF              ldi R24,254
 0168 80931E00          sts _TXBUF,R24
 016C                   .dbline 207
 016C           ;  TXBUF[1]=TRFG1;
 016C 8DEF              ldi R24,253
 016E 80931F00          sts _TXBUF+1,R24
 0172                   .dbline 208
 0172           ;  TXBUF[2]=SlaveAdress;
 0172 85E0              ldi R24,5
 0174 80932000          sts _TXBUF+2,R24
 0178                   .dbline 209
 0178           ;  TXBUF[10]=TRFG2;
 0178 81EF              ldi R24,241
 017A 80932800          sts _TXBUF+10,R24
 017E                   .dbline 210
 017E           ;  TXBUF[11]=TRFG3;
 017E 80EF              ldi R24,240
 0180 80932900          sts _TXBUF+11,R24
 0184                   .dbline -2
 0184           L29:
 0184                   .dbline 0 ; func end
 0184 0895              ret
 0186                   .dbend
 0186                   .dbfunc e RXBUFCLR _RXBUFCLR fV
 0186           ;              i -> R16
                        .even
 0186           _RXBUFCLR::
 0186                   .dbline -1
 0186                   .dbline 213
 0186           ; }//void TXbufRDY(void)
 0186           ; void RXBUFCLR(void)
 0186           ; {
 0186                   .dbline 214
 0186           ;   unsigned char i=0;
 0186 0027              clr R16
 0188                   .dbline 215
 0188           ;   for(i=0;i<RXINTMAX;i++)
 0188 09C0              rjmp L38
 018A           L35:
 018A                   .dbline 216
 018A 80E0              ldi R24,<_RXBUF
 018C 90E0              ldi R25,>_RXBUF
 018E E02F              mov R30,R16
 0190 FF27              clr R31
 0192 E80F              add R30,R24
 0194 F91F              adc R31,R25
 0196 2224              clr R2
 0198 2082              std z+0,R2
 019A           L36:
 019A                   .dbline 215
 019A 0395              inc R16
 019C           L38:
 019C                   .dbline 215
 019C 20900500          lds R2,_RXINTMAX
 01A0 0215              cp R16,R2
 01A2 98F3              brlo L35
 01A4                   .dbline -2
 01A4           L34:
 01A4                   .dbline 0 ; func end
 01A4 0895              ret
 01A6                   .dbsym r i 16 c
 01A6                   .dbend
 01A6                   .dbfunc e RX_INIT _RX_INIT fV
                        .even
 01A6           _RX_INIT::
 01A6                   .dbline -1
 01A6                   .dbline 220
 01A6           ;       RXBUF[i]=0;
 01A6           ; }//void RXBUFCLR(void)
 01A6           ; 
 01A6           ; void RX_INIT(void)
 01A6           ; {
 01A6                   .dbline 221
 01A6           ;     OUTDEOFF; 
 01A6 9498              cbi 0x12,4
 01A8                   .dbline 222
 01A8           ;     RXbufP=0;
 01A8 2224              clr R2
 01AA 20920900          sts _RXbufP,R2
 01AE                   .dbline 223
 01AE           ;       RDHIS=0xff;
 01AE 8FEF              ldi R24,255
 01B0 80930100          sts _RDHIS,R24
 01B4                   .dbline 224
 01B4           ;       RXADDRESS
 01B4 589A              sbi 0xb,0
 01B6                   .dbline 224
 01B6 20920000          sts _TRADFG,R2
 01BA                   .dbline 226
 01BA           ;       
 01BA           ;       RXENABLE
 01BA 5398              cbi 0xa,3
 01BC                   .dbline 226
 01BC 549A              sbi 0xa,4
 01BE                   .dbline -2
 01BE           L39:
 01BE                   .dbline 0 ; func end
 01BE 0895              ret
 01C0                   .dbend
 01C0                   .dbfunc e RXRCK2 _RXRCK2 fV
                        .even
 01C0           _RXRCK2::
 01C0 00D0              rcall push_gset2
 01C2                   .dbline -1
 01C2                   .dbline 230
 01C2           ; }//void RX_INIT(void)
 01C2           ; 
 01C2           ; void RXRCK2(void)  //检查收到的数据是否有效
 01C2           ; {
 01C2                   .dbline 232
 01C2           ; 
 01C2           ;  if(RXbufP>RXbufPmax)
 01C2 20900A00          lds R2,_RXbufPmax
 01C6 30900900          lds R3,_RXbufP
 01CA 2314              cp R2,R3
 01CC B0F5              brsh L41
 01CE                   .dbline 233
 01CE           ;    {
 01CE                   .dbline 235
 01CE           ;     
 01CE           ;       RXERROR=2;
 01CE 82E0              ldi R24,2
 01D0 80930B00          sts _RXERROR,R24
 01D4                   .dbline 236
 01D4           ;       if(RXBUF[12]==TRFG3 & RXBUF[11]==TRFG2 & RXBUF[1]==TRFG0 & RXBUF[2]==TRFG1)
 01D4 80910C00          lds R24,_RXBUF+12
 01D8 803F              cpi R24,240
 01DA 19F4              brne L49
 01DC 61E0              ldi R22,1
 01DE 70E0              ldi R23,0
 01E0 02C0              rjmp L50
 01E2           L49:
 01E2 6627              clr R22
 01E4 7727              clr R23
 01E6           L50:
 01E6 80910B00          lds R24,_RXBUF+11
 01EA 813F              cpi R24,241
 01EC 19F4              brne L51
 01EE 41E0              ldi R20,1
 01F0 50E0              ldi R21,0
 01F2 02C0              rjmp L52
 01F4           L51:
 01F4 4427              clr R20
 01F6 5527              clr R21
 01F8           L52:
 01F8 80910100          lds R24,_RXBUF+1
 01FC 8E3F              cpi R24,254
 01FE 19F4              brne L53
 0200 21E0              ldi R18,1
 0202 30E0              ldi R19,0
 0204 02C0              rjmp L54
 0206           L53:
 0206 2227              clr R18
 0208 3327              clr R19
 020A           L54:
 020A 80910200          lds R24,_RXBUF+2
 020E 8D3F              cpi R24,253
 0210 19F4              brne L55
 0212 01E0              ldi R16,1
 0214 10E0              ldi R17,0
 0216 02C0              rjmp L56
 0218           L55:
 0218 0027              clr R16
 021A 1127              clr R17
 021C           L56:
 021C 1B01              movw R2,R22
 021E 2422              and R2,R20
 0220 3522              and R3,R21
 0222 2222              and R2,R18
 0224 3322              and R3,R19
 0226 2022              and R2,R16
 0228 3122              and R3,R17
 022A 2220              tst R2
 022C 11F4              brne X0
 022E 3320              tst R3
 0230 39F0              breq L42
 0232           X0:
 0232                   .dbline 237
 0232           ;        {
 0232                   .dbline 239
 0232           ;          
 0232           ;               RXERROR=0;
 0232 2224              clr R2
 0234 20920B00          sts _RXERROR,R2
 0238                   .dbline 240
 0238           ;        }                         
 0238                   .dbline 242
 0238           ;               
 0238           ;       }//if(RXbufP>RXbufPmax)
 0238 03C0              rjmp L42
 023A           L41:
 023A                   .dbline 244
 023A                   .dbline 245
 023A 81E0              ldi R24,1
 023C 80930B00          sts _RXERROR,R24
 0240                   .dbline 246
 0240           L42:
 0240                   .dbline -2
 0240           L40:
 0240 00D0              rcall pop_gset2
 0242                   .dbline 0 ; func end
 0242 0895              ret
 0244                   .dbend
 0244                   .dbfunc e RXRCK _RXRCK fV
 0244           ;              i -> R16
 0244           ;             tP -> R16
                        .even
 0244           _RXRCK::
 0244 00D0              rcall push_gset2
 0246                   .dbline -1
 0246                   .dbline 252
 0246           ;   else
 0246           ;    {
 0246           ;       RXERROR=1;
 0246           ;    }//else
 0246           ;   
 0246           ;     // OUTLED1ON;
 0246           ; }//void RXRCK(void)
 0246           ; 
 0246           ; void RXRCK(void)  //检查收到的数据是否有效
 0246           ; {
 0246                   .dbline 253
 0246           ;  unsigned char tP=0;
 0246 0027              clr R16
 0248                   .dbline 254
 0248           ;  unsigned char i=0;
 0248                   .dbline 255
 0248           ;  if(RXbufP>RXbufPmax)
 0248 20900A00          lds R2,_RXbufPmax
 024C 30900900          lds R3,_RXbufP
 0250 2314              cp R2,R3
 0252 08F0              brlo X2
 0254 3FC0              rjmp L58
 0256           X2:
 0256                   .dbline 256
 0256           ;    {
 0256                   .dbline 258
 0256           ;    // OUTLED1ON;
 0256           ;       RXERROR=2;
 0256 82E0              ldi R24,2
 0258 80930B00          sts _RXERROR,R24
 025C                   .dbline 259
 025C           ;       if(RXBUF[12]==TRFG3 & RXBUF[11]==TRFG2 & RXBUF[1]==TRFG0 & RXBUF[2]==TRFG1)
 025C 80910C00          lds R24,_RXBUF+12
 0260 803F              cpi R24,240
 0262 19F4              brne L66
 0264 61E0              ldi R22,1
 0266 70E0              ldi R23,0
 0268 02C0              rjmp L67
 026A           L66:
 026A 6627              clr R22
 026C 7727              clr R23
 026E           L67:
 026E 80910B00          lds R24,_RXBUF+11
 0272 813F              cpi R24,241
 0274 19F4              brne L68
 0276 41E0              ldi R20,1
 0278 50E0              ldi R21,0
 027A 02C0              rjmp L69
 027C           L68:
 027C 4427              clr R20
 027E 5527              clr R21
 0280           L69:
 0280 80910100          lds R24,_RXBUF+1
 0284 8E3F              cpi R24,254
 0286 19F4              brne L70
 0288 21E0              ldi R18,1
 028A 30E0              ldi R19,0
 028C 02C0              rjmp L71
 028E           L70:
 028E 2227              clr R18
 0290 3327              clr R19

⌨️ 快捷键说明

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