📄 uart.lis
字号:
.module uart.c
.area text(rom, con, rel)
0000 .dbfile C:\mega8\DAC\uart.c
0000 .dbfunc e putchar _putchar fV
0000 ; c -> R16
.even
0000 _putchar::
0000 .dbline -1
0000 .dbline 18
0000 ; /******************************************/
0000 ; /* 广州天河双龙电子公司 */
0000 ; /* http://www.sl.com.cn */
0000 ; /* RS232通信驱动程序 */
0000 ; /* 作者:ntzwq@wx88.net */
0000 ; /* 2002年5月11日 */
0000 ; /* 目标MCU:MEGA8 晶振:外部(EXT) 8MHZ */
0000 ; /******************************************/
0000 ; // 1、使用ICCAVR的终端调试窗口(Terminal),进行通信调试。
0000 ; // 2、对ICCAVR的终端调试窗口进行设置,设置串口为com1或com2,
0000 ; // 通信波特率为19200(Tools->Environment Options...)。
0000 ; // 3、将PC屏幕光标定位于调试窗口中。
0000 ; #include <iom8v.h>
0000 ; #define fosc 8000000 //晶振8MHZ
0000 ; #define baud 19200 //波特率
0000 ; /* 字符输出函数 */
0000 ; void putchar(unsigned char c)
0000 ; {
0000 L2:
0000 .dbline 19
0000 L3:
0000 .dbline 19
0000 ; while (!(UCSRA&(1<<UDRE)));
0000 5D9B sbis 0xb,5
0002 FECF rjmp L2
0004 .dbline 20
0004 ; UDR=c;
0004 0CB9 out 0xc,R16
0006 .dbline -2
0006 .dbline 21
0006 ; }
0006 L1:
0006 .dbline 0 ; func end
0006 0895 ret
0008 .dbsym r c 16 c
0008 .dbend
0008 .dbfunc e getchar _getchar fc
.even
0008 _getchar::
0008 .dbline -1
0008 .dbline 24
0008 ; /* 字符输入函数 */
0008 ; unsigned char getchar(void)
0008 ; {
0008 L6:
0008 .dbline 25
0008 L7:
0008 .dbline 25
0008 ; while(!(UCSRA& (1<<RXC)));
0008 5F9B sbis 0xb,7
000A FECF rjmp L6
000C .dbline 26
000C ; return UDR;
000C 0CB1 in R16,0xc
000E .dbline -2
000E L5:
000E .dbline 0 ; func end
000E 0895 ret
0010 .dbend
0010 .dbfunc e puts _puts fV
0010 ; s -> R20,R21
.even
0010 _puts::
0010 00D0 rcall push_gset1
0012 A801 movw R20,R16
0014 .dbline -1
0014 .dbline 30
0014 ; }
0014 ; /* 字符串输出函数 */
0014 ; void puts(char *s)
0014 ; {
0014 05C0 rjmp L11
0016 L10:
0016 .dbline 32
0016 .dbline 33
0016 FA01 movw R30,R20
0018 0081 ldd R16,z+0
001A F2DF rcall _putchar
001C .dbline 34
001C 4F5F subi R20,255 ; offset = 1
001E 5F4F sbci R21,255
0020 .dbline 35
0020 L11:
0020 .dbline 31
0020 ; while (*s)
0020 FA01 movw R30,R20
0022 2080 ldd R2,z+0
0024 2220 tst R2
0026 B9F7 brne L10
0028 .dbline 36
0028 ; {
0028 ; putchar(*s);
0028 ; s++;
0028 ; }
0028 ; putchar(0x0a);//回车换行
0028 0AE0 ldi R16,10
002A EADF rcall _putchar
002C .dbline 37
002C ; putchar(0x0d);
002C 0DE0 ldi R16,13
002E E8DF rcall _putchar
0030 .dbline -2
0030 .dbline 38
0030 ; }
0030 L9:
0030 00D0 rcall pop_gset1
0032 .dbline 0 ; func end
0032 0895 ret
0034 .dbsym r s 20 pc
0034 .dbend
0034 .dbfunc e uart_init _uart_init fV
.even
0034 _uart_init::
0034 .dbline -1
0034 .dbline 41
0034 ; /* UART初始化 */
0034 ; void uart_init(void)
0034 ; {
0034 .dbline 42
0034 ; UCSRB=(1<<RXEN)|(1<<TXEN);//允许发送和接收
0034 88E1 ldi R24,24
0036 8AB9 out 0xa,R24
0038 .dbline 43
0038 ; UBRRL=(fosc/16/(baud+1))%256;
0038 8AE1 ldi R24,26
003A 89B9 out 0x9,R24
003C .dbline 44
003C ; UBRRH=(fosc/16/(baud+1))/256;
003C 2224 clr R2
003E 20BC out 0x20,R2
0040 .dbline 45
0040 ; UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
0040 86E8 ldi R24,134
0042 80BD out 0x20,R24
0044 .dbline -2
0044 .dbline 46
0044 ; }
0044 L13:
0044 .dbline 0 ; func end
0044 0895 ret
0046 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -