📄 uart.lis
字号:
.module uart.c
.area text(rom, con, rel)
0000 .dbfile C:\调试程序\mega48\DAC\uart.c
0000 .dbfunc e putchar _putchar fV
0000 ; c -> R16
.even
0000 _putchar::
0000 .dbline -1
0000 .dbline 10
0000 ; // 1、使用ICCAVR的终端调试窗口(Terminal),进行通信调试。
0000 ; // 2、对ICCAVR的终端调试窗口进行设置,设置串口为com1或com2,
0000 ; // 通信波特率为19200(Tools->Environment Options...)。
0000 ; // 3、将PC屏幕光标定位于调试窗口中。
0000 ; #include <iom48v.h>
0000 ; #define fosc 8000000 //晶振8MHZ
0000 ; #define baud 19200 //波特率
0000 ; /* 字符输出函数 */
0000 ; void putchar(unsigned char c)
0000 ; {
0000 L2:
0000 .dbline 11
0000 L3:
0000 .dbline 11
0000 ; while (!(UCSR0A&(1<<UDRE0)));
0000 2090C000 lds R2,192
0004 25FE sbrs R2,5
0006 FCCF rjmp L2
0008 .dbline 12
0008 ; UDR0=c;
0008 0093C600 sts 198,R16
000C .dbline -2
000C L1:
000C .dbline 0 ; func end
000C 0895 ret
000E .dbsym r c 16 c
000E .dbend
000E .dbfunc e getchar _getchar fc
.even
000E _getchar::
000E .dbline -1
000E .dbline 16
000E ; }
000E ; /* 字符输入函数 */
000E ; unsigned char getchar(void)
000E ; {
000E L6:
000E .dbline 17
000E L7:
000E .dbline 17
000E ; while(!(UCSR0A& (1<<RXC0)));
000E 2090C000 lds R2,192
0012 27FE sbrs R2,7
0014 FCCF rjmp L6
0016 .dbline 18
0016 ; return UDR0;
0016 0091C600 lds R16,198
001A .dbline -2
001A L5:
001A .dbline 0 ; func end
001A 0895 ret
001C .dbend
001C .dbfunc e puts _puts fV
001C ; s -> R20,R21
.even
001C _puts::
001C 00D0 rcall push_gset1
001E A801 movw R20,R16
0020 .dbline -1
0020 .dbline 22
0020 ; }
0020 ; /* 字符串输出函数 */
0020 ; void puts(char *s)
0020 ; {
0020 05C0 rjmp L11
0022 L10:
0022 .dbline 24
0022 .dbline 25
0022 FA01 movw R30,R20
0024 0081 ldd R16,z+0
0026 ECDF rcall _putchar
0028 .dbline 26
0028 4F5F subi R20,255 ; offset = 1
002A 5F4F sbci R21,255
002C .dbline 27
002C L11:
002C .dbline 23
002C ; while (*s)
002C FA01 movw R30,R20
002E 2080 ldd R2,z+0
0030 2220 tst R2
0032 B9F7 brne L10
0034 .dbline 28
0034 ; {
0034 ; putchar(*s);
0034 ; s++;
0034 ; }
0034 ; putchar(0x0a);//回车换行
0034 0AE0 ldi R16,10
0036 E4DF rcall _putchar
0038 .dbline 29
0038 ; putchar(0x0d);
0038 0DE0 ldi R16,13
003A E2DF rcall _putchar
003C .dbline -2
003C L9:
003C 00D0 rcall pop_gset1
003E .dbline 0 ; func end
003E 0895 ret
0040 .dbsym r s 20 pc
0040 .dbend
0040 .dbfunc e uart_init _uart_init fV
.even
0040 _uart_init::
0040 .dbline -1
0040 .dbline 33
0040 ; }
0040 ; /* UART初始化 */
0040 ; void uart_init(void)
0040 ; {
0040 .dbline 34
0040 ; UCSR0B=(1<<RXEN0)|(1<<TXEN0);//允许发送和接收
0040 88E1 ldi R24,24
0042 8093C100 sts 193,R24
0046 .dbline 35
0046 ; UBRR0L=(fosc/16/(baud+1))%256;
0046 8AE1 ldi R24,26
0048 8093C400 sts 196,R24
004C .dbline 36
004C ; UBRR0H=(fosc/16/(baud+1))/256;
004C 2224 clr R2
004E 2092C500 sts 197,R2
0052 .dbline 37
0052 ; UCSR0C=(0<<UMSEL01)|(0<<UMSEL00)|(1<<UCSZ01)|(1<<UCSZ00);//8位数据+1位STOP位
0052 86E0 ldi R24,6
0054 8093C200 sts 194,R24
0058 .dbline -2
0058 L13:
0058 .dbline 0 ; func end
0058 0895 ret
005A .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -