📄 uart.lis
字号:
.module uart.c
.area text(rom, con, rel)
0000 .dbfile C:\TDdownload\zxy\169demo\169RTC\uart.c
0000 .dbfunc e putchar _putchar fV
0000 ; c -> R16
.even
0000 _putchar::
0000 .dbline -1
0000 .dbline 7
0000 ; #include <iom169v.h>
0000 ; #include <macros.h>
0000 ; #define fosc 1000000 //晶振1MHZ
0000 ; #define baud 19200 //波特率
0000 ; /* 字符输出函数 */
0000 ; void putchar(unsigned char c)
0000 ; {
0000 L2:
0000 .dbline 8
0000 ; while (!(UCSRA&(1<<UDRE)));
0000 L3:
0000 .dbline 8
0000 2090C000 lds R2,192
0004 25FE sbrs R2,5
0006 FCCF rjmp L2
0008 X0:
0008 .dbline 9
0008 ; UDR=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 13
000E ; }
000E ; /* 字符输入函数 */
000E ; unsigned char getchar(void)
000E ; {
000E L6:
000E .dbline 14
000E ; while(!(UCSRA&(1<<RXC)));
000E L7:
000E .dbline 14
000E 2090C000 lds R2,192
0012 27FE sbrs R2,7
0014 FCCF rjmp L6
0016 X1:
0016 .dbline 15
0016 ; return UDR;
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 4A93 st -y,R20
001E 5A93 st -y,R21
0020 A801 movw R20,R16
0022 .dbline -1
0022 .dbline 19
0022 ; }
0022 ; /* 字符串输出函数 */
0022 ; void puts(char *s)
0022 ; {
0022 05C0 xjmp L11
0024 L10:
0024 .dbline 21
0024 ; while (*s)
0024 ; {
0024 .dbline 22
0024 ; putchar(*s);
0024 FA01 movw R30,R20
0026 0081 ldd R16,z+0
0028 EBDF xcall _putchar
002A .dbline 23
002A ; s++;
002A 4F5F subi R20,255 ; offset = 1
002C 5F4F sbci R21,255
002E .dbline 24
002E ; }
002E L11:
002E .dbline 20
002E FA01 movw R30,R20
0030 2080 ldd R2,z+0
0032 2220 tst R2
0034 B9F7 brne L10
0036 X2:
0036 .dbline 25
0036 ; putchar(0x0a);//回车换行
0036 0AE0 ldi R16,10
0038 E3DF xcall _putchar
003A .dbline 26
003A ; putchar(0x0d);
003A 0DE0 ldi R16,13
003C E1DF xcall _putchar
003E .dbline -2
003E L9:
003E .dbline 0 ; func end
003E 5991 ld R21,y+
0040 4991 ld R20,y+
0042 0895 ret
0044 .dbsym r s 20 pc
0044 .dbend
0044 .dbfunc e uart_init _uart_init fV
.even
0044 _uart_init::
0044 .dbline -1
0044 .dbline 30
0044 ; }
0044 ; /* UART初始化 */
0044 ; void uart_init(void)
0044 ; {
0044 .dbline 31
0044 ; UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);//允许发送和接收
0044 88E9 ldi R24,152
0046 8093C100 sts 193,R24
004A .dbline 32
004A ; UBRRL=(fosc/16/(baud+1))%256;
004A 83E0 ldi R24,3
004C 8093C400 sts 196,R24
0050 .dbline 33
0050 ; UBRRH=(fosc/16/(baud+1))/256;
0050 2224 clr R2
0052 2092C500 sts 197,R2
0056 .dbline 34
0056 ; UCSRC=(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
0056 86E0 ldi R24,6
0058 8093C200 sts 194,R24
005C .dbline -2
005C L13:
005C .dbline 0 ; func end
005C 0895 ret
005E .dbend
005E ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -