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

📄 uart_main.lis

📁 使用Atmel88芯片实现RS485通讯,Modbus通讯协议.在IVR_AVR环境中编译,文件完整.
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .area text(rom, con, rel)
 012C                   .dbfile D:\ICCTES~1\1128\uart_main.c
 012C                   .dbfunc e uart0_udre_isr _uart0_udre_isr fV
                        .even
 012C           _uart0_udre_isr::
 012C 2A92              st -y,R2
 012E 3A92              st -y,R3
 0130 8A93              st -y,R24
 0132 9A93              st -y,R25
 0134 EA93              st -y,R30
 0136 FA93              st -y,R31
 0138 2FB6              in R2,0x3f
 013A 2A92              st -y,R2
 013C                   .dbline -1
 013C                   .dbline 92
 013C           ; }     //void uart0_rx_isr(void)                                  
 013C           ; 
 013C           ; 
 013C           ; #pragma interrupt_handler uart0_udre_isr:21
 013C           ; void uart0_udre_isr(void)
 013C           ; {
 013C                   .dbline 95
 013C           ; //character transferred to shift register so UDR is now empty
 013C           ; //     UDR0 = 0x01;
 013C           ;         if(sendPosi<sendCount)  
 013C 20900000          lds R2,_sendCount
 0140 30900000          lds R3,_sendPosi
 0144 3214              cp R3,R2
 0146 80F4              brsh L20
 0148                   .dbline 96
 0148           ;         {     
 0148                   .dbline 97
 0148           ;                 sendPosi++;   
 0148 80910000          lds R24,_sendPosi
 014C 8F5F              subi R24,255    ; addi 1
 014E 80930000          sts _sendPosi,R24
 0152                   .dbline 99
 0152           ;               //      TX9D = ParityBit(sendBuf[sendPosi]);  
 0152           ;                       UDR0 = sendBuf[sendPosi];  
 0152 80E0              ldi R24,<_sendBuf
 0154 90E0              ldi R25,>_sendBuf
 0156 E0910000          lds R30,_sendPosi
 015A FF27              clr R31
 015C E80F              add R30,R24
 015E F91F              adc R31,R25
 0160 2080              ldd R2,z+0
 0162 2092C600          sts 198,R2
 0166                   .dbline 100
 0166           ;          }     
 0166 15C0              rjmp L21
 0168           L20:
 0168                   .dbline 102
 0168           ;          else 
 0168           ;          {    
 0168                   .dbline 104
 0168           ; //    receEnable();                   //485芯片
 0168           ;                   if(UCSR0A&BIT(TXC0) != 0)                //if(TRMT)
 0168 2090C000          lds R2,192
 016C 20FE              sbrs R2,0
 016E 11C0              rjmp L22
 0170                   .dbline 105
 0170           ;                       {
 0170                   .dbline 106
 0170           ;                               receCount = 0;  
 0170 2224              clr R2
 0172 20920000          sts _receCount,R2
 0176                   .dbline 107
 0176           ;                               checkoutError = 0;      
 0176 20920000          sts _checkoutError,R2
 017A                   .dbline 110
 017A           ; //--------------------------
 017A           ;                               //UCSR0B &= ~BIT(UDRIE0);   //RXCIE0 清零. TXIE = 0;//在一组数据发送完成后关闭
 017A           ;                                 UCSR0B &= ~BIT(TXCIE0);         
 017A 8091C100          lds R24,193
 017E 8F7B              andi R24,191
 0180 8093C100          sts 193,R24
 0184                   .dbline 112
 0184           ;                           //TXEN = 0;           
 0184           ;                               UCSR0B &= ~BIT(TXEN0);                    
 0184 8091C100          lds R24,193
 0188 877F              andi R24,247
 018A 8093C100          sts 193,R24
 018E                   .dbline 113
 018E           ;                               sendCount = 0;          
 018E 20920000          sts _sendCount,R2
 0192                   .dbline 116
 0192           ; //--------------------------
 0192           ;                               //  flag_bit = 0;        //&&&&&&&&
 0192           ;                       }       
 0192           L22:
 0192                   .dbline 117
 0192           L21:
 0192                   .dbline -2
 0192           L19:
 0192 2990              ld R2,y+
 0194 2FBE              out 0x3f,R2
 0196 F991              ld R31,y+
 0198 E991              ld R30,y+
 019A 9991              ld R25,y+
 019C 8991              ld R24,y+
 019E 3990              ld R3,y+
 01A0 2990              ld R2,y+
 01A2                   .dbline 0 ; func end
 01A2 1895              reti
 01A4                   .dbend
 01A4                   .dbfunc e test_pin _test_pin fV
                        .even
 01A4           _test_pin::
 01A4                   .dbline -1
 01A4                   .dbline 121
 01A4           ;           }           
 01A4           ; }                   
 01A4           ; 
 01A4           ; void test_pin(void)
 01A4           ; {
 01A4                   .dbline 122
 01A4           ;  DDRC |= 0x02;
 01A4 399A              sbi 0x7,1
 01A6                   .dbline 123
 01A6           ;  PORTC |= 0x02;       
 01A6 419A              sbi 0x8,1
 01A8                   .dbline -2
 01A8           L24:
 01A8                   .dbline 0 ; func end
 01A8 0895              ret
 01AA                   .dbend
 01AA                   .dbfunc e init_devices _init_devices fV
                        .even
 01AA           _init_devices::
 01AA                   .dbline -1
 01AA                   .dbline 128
 01AA           ; }
 01AA           ; 
 01AA           ; //call this routine to initialize all peripherals
 01AA           ; void init_devices(void)
 01AA           ; {
 01AA                   .dbline 130
 01AA           ;  //stop errant interrupts until set up
 01AA           ;  CLI(); //disable all interrupts
 01AA F894              cli
 01AC                   .dbline 131
 01AC           ;  port_init();
 01AC 4ADF              rcall _port_init
 01AE                   .dbline 132
 01AE           ;  uart0_init();
 01AE 00D0              rcall _uart0_init
 01B0                   .dbline 133
 01B0           ;  timer2_init();
 01B0 00D0              rcall _timer2_init
 01B2                   .dbline 134
 01B2           ;  led_init();
 01B2 00D0              rcall _led_init
 01B4                   .dbline 136
 01B4           ;  
 01B4           ;  test_pin();
 01B4 F7DF              rcall _test_pin
 01B6                   .dbline 138
 01B6           ;  
 01B6           ;  MCUCR = 0x00;
 01B6 2224              clr R2
 01B8 25BE              out 0x35,R2
 01BA                   .dbline 139
 01BA           ;  EICRA = 0x00; //extended ext ints
 01BA 20926900          sts 105,R2
 01BE                   .dbline 140
 01BE           ;  EIMSK = 0x00;
 01BE 2DBA              out 0x1d,R2
 01C0                   .dbline 142
 01C0           ;  
 01C0           ;  TIMSK0 = 0x00; //timer 0 interrupt sources
 01C0 20926E00          sts 110,R2
 01C4                   .dbline 143
 01C4           ;  TIMSK1 = 0x00; //timer 1 interrupt sources
 01C4 20926F00          sts 111,R2
 01C8                   .dbline 144
 01C8           ;  TIMSK2 = 0x01; //timer 2 interrupt sources
 01C8 81E0              ldi R24,1
 01CA 80937000          sts 112,R24
 01CE                   .dbline 146
 01CE           ;  
 01CE           ;  PCMSK0 = 0x00; //pin change mask 0 
 01CE 20926B00          sts 107,R2
 01D2                   .dbline 147
 01D2           ;  PCMSK1 = 0x00; //pin change mask 1 
 01D2 20926C00          sts 108,R2
 01D6                   .dbline 148
 01D6           ;  PCMSK2 = 0x00; //pin change mask 2
 01D6 20926D00          sts 109,R2
 01DA                   .dbline 149
 01DA           ;  PCICR = 0x00; //pin change enable 
 01DA 20926800          sts 104,R2
 01DE                   .dbline 150
 01DE           ;  PRR = 0x84; //power controller
 01DE 84E8              ldi R24,132
 01E0 80936400          sts 100,R24
 01E4                   .dbline 151
 01E4           ;  SEI(); //re-enable interrupts
 01E4 7894              sei
 01E6                   .dbline -2
 01E6           L25:
 01E6                   .dbline 0 ; func end
 01E6 0895              ret
 01E8                   .dbend
 01E8                   .dbfunc e main _main fV
                        .even
 01E8           _main::
 01E8                   .dbline -1
 01E8                   .dbline 157
 01E8           ;  //all peripherals are now initialized
 01E8           ; }
 01E8           ; 
 01E8           ; //
 01E8           ; void main(void)
 01E8           ; {
 01E8                   .dbline 158
 01E8           ;       NOP();
 01E8 0000              nop
 01EA                   .dbline 159
 01EA           ;        init_devices();
 01EA DFDF              rcall _init_devices
 01EC                   .dbline 160
 01EC           ;       NOP(); 
 01EC 0000              nop
 01EE                   .dbline 161
 01EE           ;        singleKeyTranmit();
 01EE 00D0              rcall _singleKeyTranmit
 01F0                   .dbline 162
 01F0           ;       delay(50000);
 01F0 00E5              ldi R16,50000
 01F2 13EC              ldi R17,195
 01F4 1EDF              rcall _delay
 01F6                   .dbline 163
 01F6           ;      singleKeyTranmit();       
 01F6 00D0              rcall _singleKeyTranmit
 01F8                   .dbline 164
 01F8           ;       test();  
 01F8 03DF              rcall _test
 01FA 1CC0              rjmp L28
 01FC           L27:
 01FC                   .dbline 168
 01FC           ;       
 01FC           ;       
 01FC           ;        while(1)
 01FC           ;        {     
 01FC                   .dbline 170
 01FC           ;        
 01FC           ;               ReceiveFrameDisFun();            
 01FC 00D0              rcall _ReceiveFrameDisFun
 01FE                   .dbline 173
 01FE           ;        
 01FE           ;           //UDR0 = 0x01;
 01FE           ;               if(timeBase.bits.bt1ms) 
 01FE 80910000          lds R24,_timeBase
 0202 8695              lsr R24
 0204 8170              andi R24,1
 0206 09F0              breq L30
 0208                   .dbline 174
 0208           ;                         time_mission();
 0208 00D0              rcall _time_mission
 020A           L30:
 020A                   .dbline 175
 020A           ;           if(ledControl.bits.once128ms) // if(var_a == 1)                         // 
 020A 80910000          lds R24,_ledControl
 020E 8170              andi R24,1
 0210 31F0              breq L32
 0212                   .dbline 176
 0212           ;               {
 0212                   .dbline 178
 0212           ;               //PORTC ^= 0x02;                                
 0212           ;                       ledControl.bits.once128ms=0;    //var_a = 0;                            //                                               
 0212 80910000          lds R24,_ledControl
 0216 8E7F              andi R24,254
 0218 80930000          sts _ledControl,R24
 021C                   .dbline 179
 021C           ;                  sub2();              
 021C 00D0              rcall _sub2
 021E                   .dbline 180
 021E           ;           } 
 021E           L32:
 021E                   .dbline 181
 021E           ;               if(ledControl.bits.refurbish)  //if(var_b == 1)                         //
 021E 80910000          lds R24,_ledControl
 0222 8695              lsr R24
 0224 8170              andi R24,1
 0226 31F0              breq L34
 0228                   .dbline 182
 0228           ;               {
 0228                   .dbline 184
 0228           ;               //PORTC ^= 0x02;                                
 0228           ;                       ledControl.bits.refurbish=0;//var_b = 0;                        //              
 0228 80910000          lds R24,_ledControl
 022C 8D7F              andi R24,253
 022E 80930000          sts _ledControl,R24
 0232                   .dbline 185
 0232           ;                        subled();       
 0232 00D0              rcall _subled
 0234                   .dbline 186
 0234           ;               }
 0234           L34:
 0234                   .dbline 188
 0234           L28:
 0234                   .dbline 167
 0234 E3CF              rjmp L27
 0236           X1:
 0236                   .dbline -2
 0236           L26:
 0236                   .dbline 0 ; func end
 0236 0895              ret
 0238                   .dbend

⌨️ 快捷键说明

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