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

📄 m8mp01.lis

📁 AVR MEGA8双机串行口通讯程序,单工485方式,用于单片机组网,有PROTEUS仿真电路,可以立刻验证
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 0088                   .dbline 127
 0088           ;     
 0088           ;     OUTDEOFF;
 0088 9498              cbi 0x12,4
 008A                   .dbline 128
 008A           ;     UCSRB=0x00;
 008A 2224              clr R2
 008C 2AB8              out 0xa,R2
 008E                   .dbline 130
 008E           ;       //UBRRL=0x25;  //19.2kbps
 008E           ;       UBRRL=0x1;  //38.4kbps
 008E 81E0              ldi R24,1
 0090 89B9              out 0x9,R24
 0092                   .dbline 132
 0092           ;       //TX EN ,9Bit ,Adress init
 0092           ;       UCSRB=((1<<RXCIE)|(1<<TXCIE)|(1<<TXEN)|(1<<UCSZ2)|(1<<TXB8));
 0092 8DEC              ldi R24,205
 0094 8AB9              out 0xa,R24
 0096                   .dbline -2
 0096           L16:
 0096                   .dbline 0 ; func end
 0096 0895              ret
 0098                   .dbend
 0098                   .dbfunc e timer_init _timer_init fV
                        .even
 0098           _timer_init::
 0098                   .dbline -1
 0098                   .dbline 138
 0098           ;       //UCSRB=((1<<TXCIE)|(1<<TXCIE)|(1<<TXEN)|(1<<TXB8));
 0098           ;    }//void uart_init(void) 
 0098           ; 
 0098           ; ///////////////Timer init      
 0098           ; void timer_init(void)
 0098           ;      {
 0098                   .dbline 139
 0098           ;         ;
 0098                   .dbline -2
 0098           L17:
 0098                   .dbline 0 ; func end
 0098 0895              ret
 009A                   .dbend
                        .area vector(rom, abs)
                        .org 16
 0010 4DC0              rjmp _timer1_ovf_isr
                        .area text(rom, con, rel)
 009A                   .dbfile E:\m8com\M8MP01.c
 009A                   .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
                        .even
 009A           _timer1_ovf_isr::
 009A                   .dbline -1
 009A                   .dbline 145
 009A           ;        }               
 009A           ;       
 009A           ; 
 009A           ; #pragma interrupt_handler timer1_ovf_isr:9
 009A           ; void timer1_ovf_isr(void)
 009A           ; {     
 009A                   .dbline 146
 009A           ;        ;  
 009A                   .dbline -2
 009A           L18:
 009A                   .dbline 0 ; func end
 009A 1895              reti
 009C                   .dbend
                        .area vector(rom, abs)
                        .org 26
 001A 4EC0              rjmp _uart1_tx_isr
                        .area text(rom, con, rel)
 009C                   .dbfile E:\m8com\M8MP01.c
 009C                   .dbfunc e uart1_tx_isr _uart1_tx_isr fV
                        .even
 009C           _uart1_tx_isr::
 009C 2A92              st -y,R2
 009E 8A93              st -y,R24
 00A0 9A93              st -y,R25
 00A2 EA93              st -y,R30
 00A4 FA93              st -y,R31
 00A6 2FB6              in R2,0x3f
 00A8 2A92              st -y,R2
 00AA                   .dbline -1
 00AA                   .dbline 153
 00AA           ;        
 00AA           ; }//void timer1_ovf_isr(void)
 00AA           ; 
 00AA           ; //TR to SLAVE
 00AA           ; #pragma interrupt_handler uart1_tx_isr:14
 00AA           ; void uart1_tx_isr(void)
 00AA           ;  {
 00AA                   .dbline 155
 00AA           ;     
 00AA           ;       TXbufP++;
 00AA 80910700          lds R24,_TXbufP
 00AE 8F5F              subi R24,255    ; addi 1
 00B0 80930700          sts _TXbufP,R24
 00B4                   .dbline 156
 00B4           ;       if(TXbufP<14)
 00B4 8E30              cpi R24,14
 00B6 A0F4              brsh L20
 00B8                   .dbline 157
 00B8           ;         {
 00B8                   .dbline 159
 00B8           ;        
 00B8           ;          if(TXbufP==2 )
 00B8 8230              cpi R24,2
 00BA 41F4              brne L22
 00BC                   .dbline 160
 00BC           ;            {
 00BC                   .dbline 161
 00BC           ;            OUTLED3Pulse;          
 00BC 84E0              ldi R24,4
 00BE 28B2              in R2,0x18
 00C0 2826              eor R2,R24
 00C2 28BA              out 0x18,R2
 00C4                   .dbline 162
 00C4           ;                TXDATA;         
 00C4 5098              cbi 0xa,0
 00C6                   .dbline 162
 00C6 81E0              ldi R24,1
 00C8 80930000          sts _TXADFG,R24
 00CC                   .dbline 162
 00CC                   .dbline 164
 00CC           ;               
 00CC           ;            }//if(TXbufP>1)
 00CC           L22:
 00CC                   .dbline 165
 00CC           ;               UDR=TXBUF[TXbufP]; 
 00CC 80E0              ldi R24,<_TXBUF
 00CE 90E0              ldi R25,>_TXBUF
 00D0 E0910700          lds R30,_TXbufP
 00D4 FF27              clr R31
 00D6 E80F              add R30,R24
 00D8 F91F              adc R31,R25
 00DA 2080              ldd R2,z+0
 00DC 2CB8              out 0xc,R2
 00DE                   .dbline 166
 00DE           ;         }
 00DE 04C0              rjmp L21
 00E0           L20:
 00E0                   .dbline 168
 00E0                   .dbline 169
 00E0 9498              cbi 0x12,4
 00E2                   .dbline 170
 00E2 C098              cbi 0x18,0
 00E4                   .dbline 171
 00E4 5398              cbi 0xa,3
 00E6                   .dbline 171
 00E6 549A              sbi 0xa,4
 00E8                   .dbline 172
 00E8           L21:
 00E8                   .dbline -2
 00E8           L19:
 00E8 2990              ld R2,y+
 00EA 2FBE              out 0x3f,R2
 00EC F991              ld R31,y+
 00EE E991              ld R30,y+
 00F0 9991              ld R25,y+
 00F2 8991              ld R24,y+
 00F4 2990              ld R2,y+
 00F6                   .dbline 0 ; func end
 00F6 1895              reti
 00F8                   .dbend
                        .area vector(rom, abs)
                        .org 22
 0016 7CC0              rjmp _uart1_rx_isr
                        .area text(rom, con, rel)
 00F8                   .dbfile E:\m8com\M8MP01.c
 00F8                   .dbfunc e uart1_rx_isr _uart1_rx_isr fV
 00F8           ;           TmpD -> R16
                        .even
 00F8           _uart1_rx_isr::
 00F8 2A92              st -y,R2
 00FA 3A92              st -y,R3
 00FC 0A93              st -y,R16
 00FE 8A93              st -y,R24
 0100 9A93              st -y,R25
 0102 EA93              st -y,R30
 0104 FA93              st -y,R31
 0106 2FB6              in R2,0x3f
 0108 2A92              st -y,R2
 010A                   .dbline -1
 010A                   .dbline 179
 010A           ;       else
 010A           ;           {
 010A           ;                OUTDEOFF;
 010A           ;                OUTLED1ON;
 010A           ;                RXENABLE
 010A           ;               }//else
 010A           ;       
 010A           ;       
 010A           ;  }//void uart1_tx_isr(void)
 010A           ; 
 010A           ; #pragma interrupt_handler uart1_rx_isr:12
 010A           ; void uart1_rx_isr(void)
 010A           ;  {    
 010A                   .dbline 180
 010A           ;     unsigned char TmpD=0;
 010A 0027              clr R16
 010C                   .dbline 181
 010C           ;       TmpD=UDR;
 010C 0CB1              in R16,0xc
 010E                   .dbline 182
 010E           ;     if(RXbufP<RXINTMAX)
 010E 20900400          lds R2,_RXINTMAX
 0112 30900800          lds R3,_RXbufP
 0116 3214              cp R3,R2
 0118 20F4              brsh L25
 011A                   .dbline 183
 011A           ;         {
 011A                   .dbline 184
 011A           ;          RXbufP++;
 011A 832D              mov R24,R3
 011C 8F5F              subi R24,255    ; addi 1
 011E 80930800          sts _RXbufP,R24
 0122                   .dbline 185
 0122           ;         }             
 0122           L25:
 0122                   .dbline 186
 0122           ;       RXBUF[RXbufP]=UDR;
 0122 80E0              ldi R24,<_RXBUF
 0124 90E0              ldi R25,>_RXBUF
 0126 E0910800          lds R30,_RXbufP
 012A FF27              clr R31
 012C E80F              add R30,R24
 012E F91F              adc R31,R25
 0130 2CB0              in R2,0xc
 0132 2082              std z+0,R2
 0134                   .dbline 187
 0134           ;       OUTLED2Pulse;
 0134 82E0              ldi R24,2
 0136 28B2              in R2,0x18
 0138 2826              eor R2,R24
 013A 28BA              out 0x18,R2
 013C                   .dbline -2
 013C           L24:
 013C 2990              ld R2,y+
 013E 2FBE              out 0x3f,R2
 0140 F991              ld R31,y+
 0142 E991              ld R30,y+
 0144 9991              ld R25,y+
 0146 8991              ld R24,y+
 0148 0991              ld R16,y+
 014A 3990              ld R3,y+
 014C 2990              ld R2,y+
 014E                   .dbline 0 ; func end
 014E 1895              reti
 0150                   .dbsym r TmpD 16 c
 0150                   .dbend
 0150                   .dbfunc e TXbufRDY _TXbufRDY fV
                        .even
 0150           _TXbufRDY::
 0150                   .dbline -1
 0150                   .dbline 191
 0150           ;       
 0150           ;  }//void uart1_rx_isr(void)
 0150           ; void TXbufRDY(void)
 0150           ; {
 0150                   .dbline 192
 0150           ;  TXBUF[0]=SlaveCR;
 0150 20900100          lds R2,_SlaveCR
 0154 20921E00          sts _TXBUF,R2
 0158                   .dbline 193
 0158           ;  TXBUF[1]=SlaveCR;
 0158 20921F00          sts _TXBUF+1,R2
 015C                   .dbline 194
 015C           ;  TXBUF[2]=TRFG0;
 015C 8EEF              ldi R24,254
 015E 80932000          sts _TXBUF+2,R24
 0162                   .dbline 195
 0162           ;  TXBUF[3]=TRFG1;
 0162 8DEF              ldi R24,253
 0164 80932100          sts _TXBUF+3,R24
 0168                   .dbline 196
 0168           ;  TXBUF[4]=SlaveCR;
 0168 20922200          sts _TXBUF+4,R2
 016C                   .dbline 197
 016C           ;  TXBUF[5]=0xFF;
 016C 8FEF              ldi R24,255
 016E 80932300          sts _TXBUF+5,R24
 0172                   .dbline 198
 0172           ;  TXBUF[12]=TRFG2;
 0172 81EF              ldi R24,241
 0174 80932A00          sts _TXBUF+12,R24
 0178                   .dbline 199
 0178           ;  TXBUF[13]=TRFG3;
 0178 80EF              ldi R24,240
 017A 80932B00          sts _TXBUF+13,R24
 017E                   .dbline -2
 017E           L27:
 017E                   .dbline 0 ; func end
 017E 0895              ret
 0180                   .dbend
 0180                   .dbfunc e RXBUFCLR _RXBUFCLR fV
 0180           ;              i -> R16
                        .even
 0180           _RXBUFCLR::
 0180                   .dbline -1
 0180                   .dbline 203
 0180           ; }//void TXbufRDY(void)
 0180           ; 
 0180           ; void RXBUFCLR(void)
 0180           ; {
 0180                   .dbline 204
 0180           ;   unsigned char i=0;
 0180 0027              clr R16
 0182                   .dbline 205
 0182           ;   for(i=0;i<RXINTMAX;i++)
 0182 09C0              rjmp L39
 0184           L36:
 0184                   .dbline 206
 0184 80E0              ldi R24,<_RXBUF
 0186 90E0              ldi R25,>_RXBUF
 0188 E02F              mov R30,R16
 018A FF27              clr R31
 018C E80F              add R30,R24
 018E F91F              adc R31,R25
 0190 2224              clr R2
 0192 2082              std z+0,R2
 0194           L37:
 0194                   .dbline 205
 0194 0395              inc R16
 0196           L39:
 0196                   .dbline 205
 0196 20900400          lds R2,_RXINTMAX
 019A 0215              cp R16,R2
 019C 98F3              brlo L36
 019E                   .dbline -2
 019E           L35:
 019E                   .dbline 0 ; func end
 019E 0895              ret
 01A0                   .dbsym r i 16 c
 01A0                   .dbend
 01A0                   .dbfunc e RXRCK _RXRCK fV
                        .even
 01A0           _RXRCK::
 01A0 00D0              rcall push_gset2
 01A2                   .dbline -1
 01A2                   .dbline 210
 01A2           ;       RXBUF[i]=0;
 01A2           ; }//void RXBUFCLR(void)
 01A2           ; 
 01A2           ; void RXRCK(void)  //检查收到的数据是否有效
 01A2           ; {
 01A2                   .dbline 211
 01A2           ;  if(RXbufP>RXbufPmax)
 01A2 20900900          lds R2,_RXbufPmax
 01A6 30900800          lds R3,_RXbufP
 01AA 2314              cp R2,R3
 01AC B0F5              brsh L41
 01AE                   .dbline 212
 01AE           ;    {
 01AE                   .dbline 214
 01AE           ;     
 01AE           ;       RXERROR=2;
 01AE 82E0              ldi R24,2
 01B0 80930A00          sts _RXERROR,R24
 01B4                   .dbline 215
 01B4           ;       if(RXBUF[12]==TRFG3 & RXBUF[11]==TRFG2 & RXBUF[1]==TRFG0 & RXBUF[2]==TRFG1)
 01B4 80910C00          lds R24,_RXBUF+12
 01B8 803F              cpi R24,240
 01BA 19F4              brne L49
 01BC 61E0              ldi R22,1
 01BE 70E0              ldi R23,0
 01C0 02C0              rjmp L50
 01C2           L49:
 01C2 6627              clr R22
 01C4 7727              clr R23
 01C6           L50:
 01C6 80910B00          lds R24,_RXBUF+11
 01CA 813F              cpi R24,241
 01CC 19F4              brne L51
 01CE 41E0              ldi R20,1
 01D0 50E0              ldi R21,0
 01D2 02C0              rjmp L52
 01D4           L51:
 01D4 4427              clr R20
 01D6 5527              clr R21
 01D8           L52:
 01D8 80910100          lds R24,_RXBUF+1
 01DC 8E3F              cpi R24,254

⌨️ 快捷键说明

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