📄 uart.lis
字号:
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 + -