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

📄 m8sp01.lis

📁 AVR MEGA8双机串行口通讯程序,单工485方式,用于单片机组网,有PROTEUS仿真电路,可以立刻验证
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 005E 4617              cp R20,R22
 0060 5707              cpc R21,R23
 0062 D0F3              brlo L12
 0064                   .dbline -2
 0064           L11:
 0064 00D0              rcall pop_gset2
 0066                   .dbline 0 ; func end
 0066 0895              ret
 0068                   .dbsym r i 20 i
 0068                   .dbsym r n 22 i
 0068                   .dbend
 0068                   .dbfunc e port_init _port_init fV
                        .even
 0068           _port_init::
 0068                   .dbline -1
 0068                   .dbline 106
 0068           ;            {
 0068           ;                 Delay_1ms();
 0068           ;                 i++;
 0068           ;                }
 0068           ;        }
 0068           ;        
 0068           ;        
 0068           ; void port_init(void)
 0068           ;      {
 0068                   .dbline 109
 0068           ;        
 0068           ;                                        
 0068           ;         PORTB=0xFF;    //PB set to 1
 0068 8FEF              ldi R24,255
 006A 88BB              out 0x18,R24
 006C                   .dbline 110
 006C           ;         DDRB=0xFF;     
 006C 87BB              out 0x17,R24
 006E                   .dbline 112
 006E           ;                                        
 006E           ;         PORTC=0xFF;    //PC set to 1
 006E 85BB              out 0x15,R24
 0070                   .dbline 113
 0070           ;         DDRC=0x00;     //
 0070 2224              clr R2
 0072 24BA              out 0x14,R2
 0074                   .dbline 115
 0074           ;             
 0074           ;         PORTD=0xFF;    //PD set to 1
 0074 82BB              out 0x12,R24
 0076                   .dbline 116
 0076           ;         DDRD=0x12;     //PD0:RXD PD1:TXD PD2:DI0 PD3:DI1
 0076 82E1              ldi R24,18
 0078 81BB              out 0x11,R24
 007A                   .dbline 120
 007A           ;                        //PD4:DI2  PD5:DI3 
 007A           ;         //OUTDEON;
 007A           ;         
 007A           ;       SFIOR&=~(1<<PUD);  //OPEN UP LINK
 007A 80B7              in R24,0x30
 007C 8B7F              andi R24,251
 007E 80BF              out 0x30,R24
 0080                   .dbline 124
 0080           ;       //MCUCR|=(1<<ISC11); //Down edge int1
 0080           ;       //GICR=(1<<INT1); //enable INT1
 0080           ;         
 0080           ;         delayXms(10); //delay 1s
 0080 0AE0              ldi R16,10
 0082 10E0              ldi R17,0
 0084 E4DF              rcall _delayXms
 0086                   .dbline -2
 0086           L15:
 0086                   .dbline 0 ; func end
 0086 0895              ret
 0088                   .dbend
 0088                   .dbfunc e uart_init _uart_init fV
                        .even
 0088           _uart_init::
 0088                   .dbline -1
 0088                   .dbline 128
 0088           ;        }
 0088           ; //////////////////////////UART INIT
 0088           ; void uart_init(void) 
 0088           ;    {
 0088                   .dbline 130
 0088           ;     
 0088           ;     OUTDEOFF;
 0088 9498              cbi 0x12,4
 008A                   .dbline 131
 008A           ;     UCSRB=0x00;
 008A 2224              clr R2
 008C 2AB8              out 0xa,R2
 008E                   .dbline 133
 008E           ;       //UBRRL=0x25;  //19.2kbps
 008E           ;       UBRRL=0x1;  //38.4kbps
 008E 81E0              ldi R24,1
 0090 89B9              out 0x9,R24
 0092                   .dbline 135
 0092           ;       //TX EN ,9Bit ,Adress init
 0092           ;       RXADDRESS
 0092 589A              sbi 0xb,0
 0094                   .dbline 135
 0094 20920000          sts _TRADFG,R2
 0098                   .dbline 136
 0098           ;       UCSRB=((1<<RXCIE)|(1<<TXCIE)|(1<<UCSZ2));
 0098 84EC              ldi R24,196
 009A 8AB9              out 0xa,R24
 009C                   .dbline -2
 009C           L16:
 009C                   .dbline 0 ; func end
 009C 0895              ret
 009E                   .dbend
 009E                   .dbfunc e timer_init _timer_init fV
                        .even
 009E           _timer_init::
 009E                   .dbline -1
 009E                   .dbline 142
 009E           ;       //UCSRB=((1<<TXCIE)|(1<<TXCIE)|(1<<TXEN)|(1<<TXB8));
 009E           ;    }//void uart_init(void) 
 009E           ; 
 009E           ; ///////////////Timer init      
 009E           ; void timer_init(void)
 009E           ;      {
 009E                   .dbline 143
 009E           ;         ;
 009E                   .dbline -2
 009E           L17:
 009E                   .dbline 0 ; func end
 009E 0895              ret
 00A0                   .dbend
                        .area vector(rom, abs)
                        .org 16
 0010 50C0              rjmp _timer1_ovf_isr
                        .area text(rom, con, rel)
 00A0                   .dbfile E:\m8com\M8SP01.c
 00A0                   .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
                        .even
 00A0           _timer1_ovf_isr::
 00A0                   .dbline -1
 00A0                   .dbline 149
 00A0           ;        }               
 00A0           ;       
 00A0           ; 
 00A0           ; #pragma interrupt_handler timer1_ovf_isr:9
 00A0           ; void timer1_ovf_isr(void)
 00A0           ; {     
 00A0                   .dbline 150
 00A0           ;        ;  
 00A0                   .dbline -2
 00A0           L18:
 00A0                   .dbline 0 ; func end
 00A0 1895              reti
 00A2                   .dbend
                        .area vector(rom, abs)
                        .org 26
 001A 51C0              rjmp _uart1_tx_isr
                        .area text(rom, con, rel)
 00A2                   .dbfile E:\m8com\M8SP01.c
 00A2                   .dbfunc e uart1_tx_isr _uart1_tx_isr fV
                        .even
 00A2           _uart1_tx_isr::
 00A2 2A92              st -y,R2
 00A4 8A93              st -y,R24
 00A6 9A93              st -y,R25
 00A8 EA93              st -y,R30
 00AA FA93              st -y,R31
 00AC 2FB6              in R2,0x3f
 00AE 2A92              st -y,R2
 00B0                   .dbline -1
 00B0                   .dbline 157
 00B0           ;        
 00B0           ; }//void timer1_ovf_isr(void)
 00B0           ; 
 00B0           ; //TR to SLAVE
 00B0           ; #pragma interrupt_handler uart1_tx_isr:14
 00B0           ; void uart1_tx_isr(void)
 00B0           ;  {
 00B0                   .dbline 159
 00B0           ;     
 00B0           ;       TXbufP++;
 00B0 80910800          lds R24,_TXbufP
 00B4 8F5F              subi R24,255    ; addi 1
 00B6 80930800          sts _TXbufP,R24
 00BA                   .dbline 161
 00BA           ;       
 00BA           ;          if(TXbufP==TXINTMAX) //发送完成
 00BA 20900300          lds R2,_TXINTMAX
 00BE 8215              cp R24,R2
 00C0 29F4              brne L20
 00C2                   .dbline 162
 00C2           ;           {          
 00C2                   .dbline 163
 00C2           ;                OUTDEOFF; 
 00C2 9498              cbi 0x12,4
 00C4                   .dbline 164
 00C4           ;                SLSTEP=10;
 00C4 8AE0              ldi R24,10
 00C6 80930E00          sts _SLSTEP,R24
 00CA                   .dbline 166
 00CA           ;                
 00CA           ;           }//if(TXbufP>TXINTMAX)
 00CA 09C0              rjmp L21
 00CC           L20:
 00CC                   .dbline 168
 00CC                   .dbline 169
 00CC 80E0              ldi R24,<_TXBUF
 00CE 90E0              ldi R25,>_TXBUF
 00D0 E0910800          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 170
 00DE           L21:
 00DE                   .dbline -2
 00DE           L19:
 00DE 2990              ld R2,y+
 00E0 2FBE              out 0x3f,R2
 00E2 F991              ld R31,y+
 00E4 E991              ld R30,y+
 00E6 9991              ld R25,y+
 00E8 8991              ld R24,y+
 00EA 2990              ld R2,y+
 00EC                   .dbline 0 ; func end
 00EC 1895              reti
 00EE                   .dbend
                        .area vector(rom, abs)
                        .org 22
 0016 77C0              rjmp _uart1_rx_isr
                        .area text(rom, con, rel)
 00EE                   .dbfile E:\m8com\M8SP01.c
 00EE                   .dbfunc e uart1_rx_isr _uart1_rx_isr fV
 00EE           ;           TmpD -> R16
                        .even
 00EE           _uart1_rx_isr::
 00EE 2A92              st -y,R2
 00F0 3A92              st -y,R3
 00F2 0A93              st -y,R16
 00F4 8A93              st -y,R24
 00F6 9A93              st -y,R25
 00F8 EA93              st -y,R30
 00FA FA93              st -y,R31
 00FC 2FB6              in R2,0x3f
 00FE 2A92              st -y,R2
 0100                   .dbline -1
 0100                   .dbline 176
 0100           ;        else
 0100           ;         {
 0100           ;          UDR=TXBUF[TXbufP];  
 0100           ;         }//else
 0100           ;       
 0100           ;  }//void uart1_tx_isr(void)
 0100           ; 
 0100           ; #pragma interrupt_handler uart1_rx_isr:12
 0100           ; void uart1_rx_isr(void)
 0100           ;  {    
 0100                   .dbline 177
 0100           ;     unsigned char TmpD=0;
 0100 0027              clr R16
 0102                   .dbline 179
 0102           ;       
 0102           ;       TmpD=UDR;
 0102 0CB1              in R16,0xc
 0104                   .dbline 181
 0104           ;       
 0104           ;       if(TRADFG==0)
 0104 20900000          lds R2,_TRADFG
 0108 2220              tst R2
 010A 89F4              brne L23
 010C                   .dbline 182
 010C           ;        {
 010C                   .dbline 183
 010C           ;         if((TmpD==SlaveAdress) && (RDHIS==SlaveAdress))
 010C 0530              cpi R16,5
 010E 61F4              brne L25
 0110 80910100          lds R24,_RDHIS
 0114 8530              cpi R24,5
 0116 41F4              brne L25
 0118                   .dbline 184
 0118           ;          {
 0118                   .dbline 185
 0118           ;           OUTLED2ON;
 0118 C198              cbi 0x18,1
 011A                   .dbline 186
 011A           ;           RXDATA         
 011A 5898              cbi 0xb,0
 011C                   .dbline 186
 011C 81E0              ldi R24,1
 011E 80930000          sts _TRADFG,R24
 0122                   .dbline 187
 0122           ;               RXbufP=0;
 0122 2224              clr R2
 0124 20920900          sts _RXbufP,R2
 0128                   .dbline 188
 0128           ;          }//if(TmpD==SlaveAdress && RDHIS==SlaveAdress)
 0128           L25:
 0128                   .dbline 189
 0128           ;         RDHIS=TmpD;
 0128 00930100          sts _RDHIS,R16
 012C                   .dbline 190
 012C           ;        }//if(ADFG==0)
 012C 12C0              rjmp L24
 012E           L23:
 012E                   .dbline 192
 012E           ;       else
 012E           ;         {
 012E                   .dbline 194
 012E           ;          
 012E           ;        if(RXbufP<RXINTMAX)
 012E 20900500          lds R2,_RXINTMAX
 0132 30900900          lds R3,_RXbufP
 0136 3214              cp R3,R2
 0138 20F4              brsh L27
 013A                   .dbline 195
 013A           ;            {
 013A                   .dbline 197
 013A           ;                
 013A           ;            RXbufP++;
 013A 832D              mov R24,R3

⌨️ 快捷键说明

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