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

📄 uart.lis

📁 AVR单片机ATMEGA128实习之—串口通信(附带Proteus仿真例子)
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 007A EAD0              xcall _LED_Display
 007C                   .dbline 134
 007C           ;               
 007C           ;               if (UART0_TX_flag == 0)
 007C 20900C00          lds R2,_UART0_TX_flag
 0080 2220              tst R2
 0082 59F4              brne L13
 0084                   .dbline 135
 0084           ;               {
 0084                   .dbline 136
 0084           ;                       PORTB = Red_LED_on;
 0084 C098              cbi 0x18,0
 0086                   .dbline 138
 0086           ; 
 0086           ;                       for (i=0;i<10 ;i++ )
 0086 6627              clr R22
 0088 02C0              xjmp L18
 008A           L15:
 008A                   .dbline 139
 008A                   .dbline 140
 008A 38D0              xcall _Delay
 008C                   .dbline 141
 008C           L16:
 008C                   .dbline 138
 008C 6395              inc R22
 008E           L18:
 008E                   .dbline 138
 008E 6A30              cpi R22,10
 0090 E0F3              brlo L15
 0092                   .dbline 143
 0092           ;                       {
 0092           ;                               Delay();
 0092           ;                       }
 0092           ; 
 0092           ;                       UART0_TX_flag = 1;
 0092 81E0              ldi R24,1
 0094 80930C00          sts _UART0_TX_flag,R24
 0098                   .dbline 144
 0098           ;               }
 0098 01C0              xjmp L14
 009A           L13:
 009A                   .dbline 146
 009A           ;               else
 009A           ;               {
 009A                   .dbline 147
 009A           ;                       PORTB = Red_LED_off;
 009A C09A              sbi 0x18,0
 009C                   .dbline 148
 009C           ;               }
 009C           L14:
 009C                   .dbline 150
 009C           ;               
 009C           ;               if (UART0_RX_flag == 0)
 009C 20900D00          lds R2,_UART0_RX_flag
 00A0 2220              tst R2
 00A2 59F4              brne L19
 00A4                   .dbline 151
 00A4           ;               {
 00A4                   .dbline 152
 00A4           ;                       PORTB = Green_LED_on;
 00A4 C198              cbi 0x18,1
 00A6                   .dbline 154
 00A6           ; 
 00A6           ;                       for (i=0;i<10 ;i++ )
 00A6 6627              clr R22
 00A8 02C0              xjmp L24
 00AA           L21:
 00AA                   .dbline 155
 00AA                   .dbline 156
 00AA 28D0              xcall _Delay
 00AC                   .dbline 157
 00AC           L22:
 00AC                   .dbline 154
 00AC 6395              inc R22
 00AE           L24:
 00AE                   .dbline 154
 00AE 6A30              cpi R22,10
 00B0 E0F3              brlo L21
 00B2                   .dbline 159
 00B2           ;                       {
 00B2           ;                               Delay();
 00B2           ;                       }
 00B2           ; 
 00B2           ;                       UART0_RX_flag = 1;
 00B2 81E0              ldi R24,1
 00B4 80930D00          sts _UART0_RX_flag,R24
 00B8                   .dbline 160
 00B8           ;               }
 00B8 A6CF              xjmp L2
 00BA           L19:
 00BA                   .dbline 162
 00BA                   .dbline 163
 00BA C19A              sbi 0x18,1
 00BC                   .dbline 164
 00BC                   .dbline 165
 00BC                   .dbline 93
 00BC                   .dbline 93
 00BC A4CF              xjmp L2
 00BE           X2:
 00BE                   .dbline -2
 00BE           L1:
 00BE                   .dbline 0 ; func end
 00BE 0895              ret
 00C0                   .dbsym r i 22 c
 00C0                   .dbend
 00C0                   .dbfunc e Port_initialize _Port_initialize fV
                        .even
 00C0           _Port_initialize::
 00C0                   .dbline -1
 00C0                   .dbline 169
 00C0           ;               else
 00C0           ;               {
 00C0           ;                       PORTB = Green_LED_off;
 00C0           ;               }
 00C0           ;       }
 00C0           ; }
 00C0           ; 
 00C0           ; void Port_initialize(void)
 00C0           ; {
 00C0                   .dbline 170
 00C0           ;       DDRA = 0xFF;
 00C0 8FEF              ldi R24,255
 00C2 8ABB              out 0x1a,R24
 00C4                   .dbline 171
 00C4           ;       DDRB = 0xFF;
 00C4 87BB              out 0x17,R24
 00C6                   .dbline 172
 00C6           ;       DDRD = 0x00;
 00C6 2224              clr R2
 00C8 21BA              out 0x11,R2
 00CA                   .dbline 173
 00CA           ;       PORTB = 0xFF;
 00CA 88BB              out 0x18,R24
 00CC                   .dbline -2
 00CC                   .dbline 174
 00CC           ; }
 00CC           L25:
 00CC                   .dbline 0 ; func end
 00CC 0895              ret
 00CE                   .dbend
 00CE                   .dbfunc e INT_initialize _INT_initialize fV
                        .even
 00CE           _INT_initialize::
 00CE                   .dbline -1
 00CE                   .dbline 176
 00CE           ; void INT_initialize(void)
 00CE           ; {
 00CE                   .dbline 177
 00CE           ;       EICRA = 0xaa;           //fall edge trigger
 00CE 8AEA              ldi R24,170
 00D0 80936A00          sts 106,R24
 00D4                   .dbline 178
 00D4           ;       EICRB = 0x00;           //no influence
 00D4 2224              clr R2
 00D6 2ABE              out 0x3a,R2
 00D8                   .dbline 179
 00D8           ;       EIMSK = 0x0f;
 00D8 8FE0              ldi R24,15
 00DA 89BF              out 0x39,R24
 00DC                   .dbline 181
 00DC           ; 
 00DC           ;       SEI();
 00DC 7894              sei
 00DE                   .dbline -2
 00DE                   .dbline 183
 00DE           ; 
 00DE           ; }
 00DE           L26:
 00DE                   .dbline 0 ; func end
 00DE 0895              ret
 00E0                   .dbend
 00E0                   .dbfunc e UART_initialize _UART_initialize fV
                        .even
 00E0           _UART_initialize::
 00E0                   .dbline -1
 00E0                   .dbline 185
 00E0           ; void UART_initialize(void)
 00E0           ; {
 00E0                   .dbline 186
 00E0           ;       CLI();
 00E0 F894              cli
 00E2                   .dbline 188
 00E2           ;       
 00E2           ;       UBRR0H = 0x00;
 00E2 2224              clr R2
 00E4 20929000          sts 144,R2
 00E8                   .dbline 189
 00E8           ;       UBRR0L = 0x67;          //波特率9600bps
 00E8 87E6              ldi R24,103
 00EA 89B9              out 0x9,R24
 00EC                   .dbline 190
 00EC           ;       UCSR0A = 0x00;
 00EC 2BB8              out 0xb,R2
 00EE                   .dbline 191
 00EE           ;       UCSR0B = 0x98;          //11011000接收与发送使能
 00EE 88E9              ldi R24,152
 00F0 8AB9              out 0xa,R24
 00F2                   .dbline 192
 00F2           ;       UCSR0C = 0x26;          //00100110帧格式: 8bits,1stop bit,P 校验
 00F2 86E2              ldi R24,38
 00F4 80939500          sts 149,R24
 00F8                   .dbline 194
 00F8           ; 
 00F8           ;       SEI();
 00F8 7894              sei
 00FA                   .dbline -2
 00FA                   .dbline 195
 00FA           ; }
 00FA           L27:
 00FA                   .dbline 0 ; func end
 00FA 0895              ret
 00FC                   .dbend
 00FC                   .dbfunc e Delay _Delay fV
 00FC           ;              i -> R16,R17
                        .even
 00FC           _Delay::
 00FC                   .dbline -1
 00FC                   .dbline 197
 00FC           ; void Delay(void)
 00FC           ; {
 00FC                   .dbline 200
 00FC           ;       unsigned int i;
 00FC           ; 
 00FC           ;       for ( i = 0; i < 6000; i++ )
 00FC 0027              clr R16
 00FE 1127              clr R17
 0100 03C0              xjmp L32
 0102           L29:
 0102                   .dbline 201
 0102                   .dbline 202
 0102 0000              nop
 0104                   .dbline 203
 0104           L30:
 0104                   .dbline 200
 0104 0F5F              subi R16,255  ; offset = 1
 0106 1F4F              sbci R17,255
 0108           L32:
 0108                   .dbline 200
 0108 0037              cpi R16,112
 010A E7E1              ldi R30,23
 010C 1E07              cpc R17,R30
 010E C8F3              brlo L29
 0110                   .dbline -2
 0110                   .dbline 204
 0110           ;       {
 0110           ;               NOP();
 0110           ;       }
 0110           ; }
 0110           L28:
 0110                   .dbline 0 ; func end
 0110 0895              ret
 0112                   .dbsym r i 16 i
 0112                   .dbend
 0112                   .dbfunc e UART0_TX_INT _UART0_TX_INT fV
                        .even
 0112           _UART0_TX_INT::
 0112 2A92              st -y,R2
 0114 8A93              st -y,R24
 0116 9A93              st -y,R25
 0118 EA93              st -y,R30
 011A FA93              st -y,R31
 011C 2FB6              in R2,0x3f
 011E 2A92              st -y,R2
 0120                   .dbline -1
 0120                   .dbline 207
 0120           ; 
 0120           ; void UART0_TX_INT(void)
 0120           ; {
 0120                   .dbline 208
 0120           ;       UART0_TX_flag = 0;
 0120 2224              clr R2
 0122 20920C00          sts _UART0_TX_flag,R2
 0126                   .dbline 210
 0126           ;       
 0126           ;       if (Tx_counter<10)
 0126 80910100          lds R24,_Tx_counter
 012A 8A30              cpi R24,10
 012C 20F4              brsh L34
 012E                   .dbline 211
 012E           ;       {
 012E                   .dbline 212
 012E           ;               Tx_counter += 1;
 012E 8F5F              subi R24,255    ; addi 1
 0130 80930100          sts _Tx_counter,R24
 0134                   .dbline 213
 0134           ;       }
 0134 03C0              xjmp L35
 0136           L34:
 0136                   .dbline 215
 0136           ;       else
 0136           ;       {
 0136                   .dbline 216
 0136           ;               Tx_counter = 1;
 0136 81E0              ldi R24,1
 0138 80930100          sts _Tx_counter,R24
 013C                   .dbline 217
 013C           ;       }
 013C           L35:
 013C                   .dbline 219
 013C           ;       
 013C           ;       Tx_data = Tx_data_buf[Tx_counter-1];
 013C 80E0              ldi R24,<_Tx_data_buf-1
 013E 90E0              ldi R25,>_Tx_data_buf-1
 0140 E0910100          lds R30,_Tx_counter
 0144 FF27              clr R31
 0146 E80F              add R30,R24
 0148 F91F              adc R31,R25
 014A 2080              ldd R2,z+0
 014C 20921300          sts _Tx_data,R2
 0150                   .dbline 221
 0150           ;       
 0150           ;       UDR0 = Tx_data;         //data to transmit
 0150 2CB8              out 0xc,R2
 0152                   .dbline 222
 0152           ;       UCSR0B &=0xbf ;         //1011 1111关闭发送中断
 0152 8AB1              in R24,0xa
 0154 8F7B              andi R24,191
 0156 8AB9              out 0xa,R24
 0158           L37:
 0158                   .dbline 225
 0158                   .dbline 226
 0158           L38:
 0158                   .dbline 224
 0158           ; 
 0158           ;       while ( !( UCSR0A & (1<<UDRE0)) )       //等待发送缓冲区空
 0158 5D9B              sbis 0xb,5
 015A FECF              rjmp L37
 015C                   .dbline 228
 015C           ;       {
 015C           ;       }
 015C           ;       
 015C           ;       UCSR0B |= 0x80; 
 015C 579A              sbi 0xa,7
 015E                   .dbline -2
 015E                   .dbline 229
 015E           ; }
 015E           L33:
 015E 2990              ld R2,y+
 0160 2FBE              out 0x3f,R2
 0162 F991              ld R31,y+
 0164 E991              ld R30,y+
 0166 9991              ld R25,y+
 0168 8991              ld R24,y+
 016A 2990              ld R2,y+
 016C                   .dbline 0 ; func end
 016C 1895              reti
 016E                   .dbend
 016E                   .dbfunc e UART0_RX_INT _UART0_RX_INT fV
                        .even
 016E           _UART0_RX_INT::
 016E 2A92              st -y,R2
 0170 8A93              st -y,R24
 0172 9A93              st -y,R25
 0174 EA93              st -y,R30
 0176 FA93              st -y,R31
 0178 2FB6              in R2,0x3f
 017A 2A92              st -y,R2
 017C                   .dbline -1
 017C                   .dbline 232
 017C           ; 
 017C           ; void UART0_RX_INT(void)
 017C           ; {
 017C                   .dbline 233
 017C           ;       Rx_data = UDR0;
 017C 2CB0              in R2,0xc
 017E 20920600          sts _Rx_data,R2
 0182                   .dbline 234
 0182           ;       UART0_RX_flag = 0;
 0182 2224              clr R2
 0184 20920D00          sts _UART0_RX_flag,R2
 0188                   .dbline 236
 0188           ; 
 0188           ;       if (Rx_counter < 10)
 0188 80910000          lds R24,_Rx_counter
 018C 8A30              cpi R24,10
 018E 20F4              brsh L41
 0190                   .dbline 237

⌨️ 快捷键说明

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