📄 usart_icc.lst
字号:
(0007) /*发送采用查询方式,中断采用接收方式*/
(0008) /*当收到的字符达到所定义的长度时,则在LCD上显示收到的字符*/
(0009) /***************************/
(0010) #define BufSize 1
(0011) unsigned char RsBuf[BufSize]; //定义接收缓冲器
(0012) int RsBytes = 0;
(0013) unsigned char flag = 0;
(0014) void main(void)
(0015) {
(0016) unsigned char *msg = "Usart Test!\n";
196 E849 LDI R20,0x89
197 E050 LDI R21,0
(0017) SREG |= (1<<7); //使能全局中断
198 9478 BSET 7
(0018) UsartInit();
199 940E 020A CALL _UsartInit
(0019) Init_LCD();
19B 940E 0119 CALL _Init_LCD
(0020) SendNbyte(msg,12);
19D E02C LDI R18,0xC
19E 018A MOVW R16,R20
19F 940E 0223 CALL _SendNbyte
(0021) PutStr("Test Ok\n");
1A1 E800 LDI R16,0x80
1A2 E010 LDI R17,0
1A3 940E 0234 CALL _PutStr
(0022) LCD_DisplayString(1,1,"Usart Test!");
1A5 E784 LDI R24,0x74
1A6 E090 LDI R25,0
1A7 8399 STD Y+1,R25
1A8 8388 STD Y+0,R24
1A9 E021 LDI R18,1
1AA E001 LDI R16,1
1AB 940E 0149 CALL _LCD_DisplayString
(0023) delay_nms(2000);
1AD ED00 LDI R16,0xD0
1AE E017 LDI R17,7
1AF 940E 0083 CALL _delay_nms
(0024) LCD_Clear();
1B1 940E 0127 CALL _LCD_Clear
(0025) LCD_DisplayString(1,1,"Recive is :");
1B3 E688 LDI R24,0x68
1B4 E090 LDI R25,0
1B5 8399 STD Y+1,R25
1B6 8388 STD Y+0,R24
1B7 E021 LDI R18,1
1B8 E001 LDI R16,1
1B9 940E 0149 CALL _LCD_DisplayString
1BB C016 RJMP 0x01D2
(0026) while(1)
(0027) {
(0028) if(flag)
1BC 9020 0067 LDS R2,flag
1BE 2022 TST R2
1BF F091 BEQ 0x01D2
(0029) {
(0030) PutStr(RsBuf);
1C0 E906 LDI R16,0x96
1C1 E010 LDI R17,0
1C2 940E 0234 CALL _PutStr
(0031) LCD_DisplayString(2,1,RsBuf);
1C4 E986 LDI R24,0x96
1C5 E090 LDI R25,0
1C6 8399 STD Y+1,R25
1C7 8388 STD Y+0,R24
1C8 E021 LDI R18,1
1C9 E002 LDI R16,2
1CA 940E 0149 CALL _LCD_DisplayString
(0032) PutChar('\n');
1CC E00A LDI R16,0xA
1CD 940E 0215 CALL _PutChar
(0033) flag = 0;
1CF 2422 CLR R2
1D0 9220 0067 STS flag,R2
1D2 CFE9 RJMP 0x01BC
1D3 9622 ADIW R28,2
1D4 9508 RET
_uart0_rx_isr:
1D5 922A ST R2,-Y
1D6 923A ST R3,-Y
1D7 938A ST R24,-Y
1D8 939A ST R25,-Y
1D9 93EA ST R30,-Y
1DA 93FA ST R31,-Y
1DB B62F IN R2,0x3F
1DC 922A ST R2,-Y
(0034) }
(0035) }
(0036) }
(0037)
(0038) //接收中断子程序
(0039) #pragma interrupt_handler uart0_rx_isr:iv_USART0_RXC
(0040) void uart0_rx_isr(void)
(0041) //#pragma vector = USART_RXC_vect
(0042) //__interrupt void RXC_isr( void )
(0043) {
(0044) RsBuf[RsBytes] = UDR;
1DD E986 LDI R24,0x96
1DE E090 LDI R25,0
1DF 91E0 0065 LDS R30,RsBytes
1E1 91F0 0066 LDS R31,RsBytes+1
1E3 0FE8 ADD R30,R24
1E4 1FF9 ADC R31,R25
1E5 B02C IN R2,0x0C
1E6 8220 STD Z+0,R2
(0045) RsBytes ++;
1E7 9180 0065 LDS R24,RsBytes
1E9 9190 0066 LDS R25,RsBytes+1
1EB 9601 ADIW R24,1
1EC 9390 0066 STS RsBytes+1,R25
1EE 9380 0065 STS RsBytes,R24
(0046) //PutChar(RsBuf[RsBytes]); //回显
(0047) if(RsBytes > BufSize)
1F0 E081 LDI R24,1
1F1 E090 LDI R25,0
1F2 9020 0065 LDS R2,RsBytes
1F4 9030 0066 LDS R3,RsBytes+1
1F6 1582 CP R24,R2
1F7 0593 CPC R25,R3
1F8 F444 BGE 0x0201
(0048) {
(0049) flag = 1;
1F9 9380 0067 STS flag,R24
(0050) RsBytes = 0;
1FB 2422 CLR R2
1FC 2433 CLR R3
1FD 9230 0066 STS RsBytes+1,R3
1FF 9220 0065 STS RsBytes,R2
(0051) }
201 9029 LD R2,Y+
202 BE2F OUT 0x3F,R2
203 91F9 LD R31,Y+
204 91E9 LD R30,Y+
205 9199 LD R25,Y+
206 9189 LD R24,Y+
207 9039 LD R3,Y+
208 9029 LD R2,Y+
209 9518 RETI
FILE: E:\新建文件夹\usart_icc\cfile\usart.c
(0001) #define USART_C
(0002) #include "includes.h"
(0003) void UsartInit(void)
(0004) {
(0005) // 晶振频率 : 4.0MHz
(0006) // 通信参数: 8 Data, 1 Stop, No Parity
(0007) // 波特率:
(0008) // UBRRL= 0x0C 19200;
(0009) // UBRRL= 0x19 9600;
(0010) // UBRRL= 0x33 4800;
(0011) // UBRRL= 0x67 2400
(0012) UCSRB |= (1<<RXEN)|(1<<TXEN)|(1<<RXCIE); //允许发送和接收,接收中断使能
_UsartInit:
20A B18A IN R24,0x0A
20B 6988 ORI R24,0x98
20C B98A OUT 0x0A,R24
(0013) UCSRC |= (1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //8位数据位+1位停止位
20D B580 IN R24,0x20
20E 6886 ORI R24,0x86
20F BD80 OUT 0x20,R24
(0014) UBRRH = 0x00;
210 2422 CLR R2
211 BC20 OUT 0x20,R2
(0015) UBRRL = 0x19;
212 E189 LDI R24,0x19
213 B989 OUT 0x09,R24
214 9508 RET
_PutChar:
c --> R20
215 934A ST R20,-Y
216 2F40 MOV R20,R16
(0016) //sei();
(0017) }
(0018)
(0019) int PutChar(char c)
(0020) {
(0021) if(c == '\n')
217 304A CPI R20,0xA
218 F411 BNE 0x021B
(0022) {
(0023) PutChar('\r');
219 E00D LDI R16,0xD
21A DFFA RCALL _PutChar
(0024) }
(0025) UDR = c;
21B B94C OUT 0x0C,R20
(0026) while(!(UCSRA &(1<<UDRE)));
21C 9B5D SBIS 0x0B,5
21D CFFE RJMP 0x021C
(0027) UCSRA |= (1<<UDRE);
21E 9A5D SBI 0x0B,5
(0028) return 0;
21F 2700 CLR R16
220 2711 CLR R17
221 9149 LD R20,Y+
222 9508 RET
_SendNbyte:
w --> R10
L --> R12
p --> R14
223 940E 024F CALL push_xgset00FC
225 2EC2 MOV R12,R18
226 0178 MOVW R14,R16
(0029) }
(0030)
(0031)
(0032) void SendNbyte(unsigned char *p,unsigned char L)
(0033) {
(0034) unsigned char w;
(0035) for(w=0;w<L;w++)
227 24AA CLR R10
228 C007 RJMP 0x0230
(0036) {
(0037) // UDR = *(p+w);
(0038) // while(!(UCSRA &(1<<UDRE)));
(0039) //UCSRA |= (1<<UDRE);
(0040) PutChar(*(p+w));
229 2DEA MOV R30,R10
22A 27FF CLR R31
22B 0DEE ADD R30,R14
22C 1DFF ADC R31,R15
22D 8100 LDD R16,Z+0
22E DFE6 RCALL _PutChar
22F 94A3 INC R10
230 14AC CP R10,R12
231 F3B8 BCS 0x0229
232 940C 0244 JMP pop_xgset00FC
_PutStr:
Str --> R20
234 934A ST R20,-Y
235 935A ST R21,-Y
236 01A8 MOVW R20,R16
(0041) }
(0042)
(0043) }
(0044)
(0045) void PutStr(unsigned char *Str)
(0046) {
237 C005 RJMP 0x023D
(0047) while(*Str != '\0')
(0048) {
(0049) PutChar(*Str);
238 01FA MOVW R30,R20
239 8100 LDD R16,Z+0
23A DFDA RCALL _PutChar
(0050) Str++;
FILE: <library>
23B 5F4F SUBI R20,0xFF
23C 4F5F SBCI R21,0xFF
23D 01FA MOVW R30,R20
23E 8020 LDD R2,Z+0
23F 2022 TST R2
240 F7B9 BNE 0x0238
241 9159 LD R21,Y+
242 9149 LD R20,Y+
243 9508 RET
pop_xgset00FC:
244 90A9 LD R10,Y+
245 90B9 LD R11,Y+
246 90C9 LD R12,Y+
247 90D9 LD R13,Y+
248 90E9 LD R14,Y+
249 90F9 LD R15,Y+
24A 9508 RET
push_xgsetF0FC:
24B 937A ST R23,-Y
24C 936A ST R22,-Y
push_xgset30FC:
24D 935A ST R21,-Y
24E 934A ST R20,-Y
push_xgset00FC:
24F 92FA ST R15,-Y
250 92EA ST R14,-Y
push_xgset003C:
251 92DA ST R13,-Y
252 92CA ST R12,-Y
253 92BA ST R11,-Y
254 92AA ST R10,-Y
255 9508 RET
push_xgset300C:
256 935A ST R21,-Y
257 934A ST R20,-Y
258 92BA ST R11,-Y
259 92AA ST R10,-Y
25A 9508 RET
pop_xgset300C:
25B 90A9 LD R10,Y+
25C 90B9 LD R11,Y+
25D 9149 LD R20,Y+
25E 9159 LD R21,Y+
25F 9508 RET
push_xgsetF00C:
260 937A ST R23,-Y
261 936A ST R22,-Y
262 935A ST R21,-Y
263 934A ST R20,-Y
264 92BA ST R11,-Y
265 92AA ST R10,-Y
266 9508 RET
pop_xgsetF00C:
267 90A9 LD R10,Y+
268 90B9 LD R11,Y+
269 9149 LD R20,Y+
26A 9159 LD R21,Y+
26B 9169 LD R22,Y+
26C 9179 LD R23,Y+
26D 9508 RET
push_xgset303C:
26E 935A ST R21,-Y
26F 934A ST R20,-Y
270 92DA ST R13,-Y
271 92CA ST R12,-Y
272 92BA ST R11,-Y
273 92AA ST R10,-Y
274 9508 RET
pop_xgset303C:
275 90A9 LD R10,Y+
276 90B9 LD R11,Y+
277 90C9 LD R12,Y+
278 90D9 LD R13,Y+
279 9149 LD R20,Y+
27A 9159 LD R21,Y+
27B 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -