📄 uart.lst
字号:
__text_start:
__start:
002E EFCF LDI R28,0xFF
002F E0D4 LDI R29,4
0030 BFCD OUT 0x3D,R28
0031 BFDE OUT 0x3E,R29
0032 51C0 SUBI R28,0x10
0033 40D0 SBCI R29,0
0034 EA0A LDI R16,0xAA
0035 8308 STD Y+0,R16
0036 2400 CLR R0
0037 E0E0 LDI R30,0
0038 E0F1 LDI R31,1
0039 E011 LDI R17,1
003A 30E0 CPI R30,0
003B 07F1 CPC R31,R17
003C F011 BEQ 0x003F
003D 9201 ST R0,Z+
003E CFFB RJMP 0x003A
003F 8300 STD Z+0,R16
0040 E5EC LDI R30,0x5C
0041 E0F0 LDI R31,0
0042 E0A0 LDI R26,0
0043 E0B1 LDI R27,1
0044 E010 LDI R17,0
0045 35EC CPI R30,0x5C
0046 07F1 CPC R31,R17
0047 F021 BEQ 0x004C
0048 95C8 LPM
0049 9631 ADIW R30,1
004A 920D ST R0,X+
004B CFF9 RJMP 0x0045
004C 940E0072 CALL _main
_exit:
004E CFFF RJMP _exit
FILE: C:\TDdownload\zxy\169demo\169UART\uart.c
(0001) // **************************************************************
(0002) // *** 广 州 天 河 双 龙 电 子 公 司 ***
(0003) // *** http://www.sl.com.cn ***
(0004) // *** 实验: UART ***
(0005) // *** 作者:zxy@sl.com.cn ***
(0006) // *** 2006年3月28日 ***
(0007) // *** 目标MCU:MEGA169 晶振:内部(INT)8MHZ ***
(0008) // **************************************************************
(0009) //本实验需相关软件配合如:comdebug.exe
(0010) #include <iom169v.h>
(0011) #include <macros.h>
(0012) #define fosc 8000000
(0013) #define baud 19200
(0014)
(0015) void port_init()
(0016) {
(0017) PORTE=0xff;
_port_init:
004F EF8F LDI R24,0xFF
0050 B98E OUT 0x0E,R24
(0018) DDRE=0xff;
0051 B98D OUT 0x0D,R24
0052 9508 RET
(0019) }
(0020)
(0021) //URAT的1口
(0022) void uart1_init(void)
(0023) {
(0024) UCSR0B = 0x00; //设置波特率时关闭发送和接收
_uart1_init:
0053 2422 CLR R2
0054 922000C1 STS 0xC1,R2
(0025) UCSR0A = 0x00;
0056 922000C0 STS 0xC0,R2
(0026) UBRRL=(fosc/16/(baud+1))%256;
0058 E18A LDI R24,0x1A
0059 938000C4 STS 0xC4,R24
(0027) UBRRH=(fosc/16/(baud+1))/256;//设置波特率
005B 922000C5 STS 0xC5,R2
(0028) UCSR0C =(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
005D E086 LDI R24,6
005E 938000C2 STS 0xC2,R24
(0029) UCSR0B =(1<<RXEN)|(1<<TXEN);//允许发送和接收
0060 E188 LDI R24,0x18
0061 938000C1 STS 0xC1,R24
0063 9508 RET
(0030) }
(0031) void putchar1(unsigned char c)
(0032) {
(0033) while (!(UCSRA&(1<<UDRE0)));//判断上次发送是否完成
_putchar1:
c --> R16
0064 902000C0 LDS R2,0xC0
0066 FE25 SBRS R2,5
0067 CFFC RJMP _putchar1
(0034) UDR0=c; //发送数据
0068 930000C6 STS 0xC6,R16
006A 9508 RET
(0035) }
(0036) unsigned char getchar1(void)
(0037) {
(0038) while(!(UCSRA&(1<<RXC0)));//判断是否接收到数据
_getchar1:
006B 902000C0 LDS R2,0xC0
006D FE27 SBRS R2,7
006E CFFC RJMP _getchar1
(0039) return UDR0; //接收数据
006F 910000C6 LDS R16,0xC6
0071 9508 RET
(0040) }
(0041) //URAT的1口
(0042)
(0043) void main(void)
(0044) {
(0045) unsigned char i;
(0046) port_init();
_main:
i --> R20
0072 DFDC RCALL _port_init
(0047) uart1_init();
0073 DFDF RCALL _uart1_init
0074 C003 RJMP 0x0078
(0048) while(1)
(0049) {
(0050) i=getchar1();
0075 DFF5 RCALL _getchar1
0076 2F40 MOV R20,R16
(0051) putchar1(i);
FILE: <library>
0077 DFEC RCALL _putchar1
0078 CFFC RJMP 0x0075
0079 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -