📄 uart.lis
字号:
.module uart.c
.area text(rom, con, rel)
0000 .dbfile E:\ICCAVR\project\AVRMEG~3\icc\010-UART-232\uart.c
0000 .dbfunc e uart_init0 _uart_init0 fV
.even
0000 _uart_init0::
0000 .dbline -1
0000 .dbline 4
0000 ; #include "iom128v.h"
0000 ;
0000 ; /*串口初始化函数*/
0000 ; void uart_init0(void) {
0000 .dbline 6
0000 ;
0000 ; UCSR0A = (1 << U2X0); /*倍速*/
0000 82E0 ldi R24,2
0002 8BB9 out 0xb,R24
0004 .dbline 7
0004 ; UCSR0B = (1 << TXEN0) | (1 << RXEN0); /*允许接收和发送*/
0004 88E1 ldi R24,24
0006 8AB9 out 0xa,R24
0008 .dbline 8
0008 ; UCSR0C = (1 << UCSZ01) | (1 << UCSZ00); /*8位数据、1 位停止、异步、无校验*/
0008 86E0 ldi R24,6
000A 80939500 sts 149,R24
000E .dbline 9
000E ; UBRR0H = 0x00;
000E 2224 clr R2
0010 20929000 sts 144,R2
0014 .dbline 10
0014 ; UBRR0L = 12; /*波特率9600*/
0014 8CE0 ldi R24,12
0016 89B9 out 0x9,R24
0018 .dbline -2
0018 L1:
0018 .dbline 0 ; func end
0018 0895 ret
001A .dbend
001A .dbfunc e uart_transmit0 _uart_transmit0 fV
001A ; i -> R16
.even
001A _uart_transmit0::
001A .dbline -1
001A .dbline 14
001A ; }
001A ;
001A ; /*数据发送,查询方式*/
001A ; void uart_transmit0(unsigned char i) {
001A L3:
001A .dbline 16
001A L4:
001A .dbline 16
001A ;
001A ; while (!(UCSR0A & (1<<UDRE0))); /* 等待发送缓冲器为空*/
001A 5D9B sbis 0xb,5
001C FECF rjmp L3
001E .dbline 17
001E ; UDR0 = i; /* 发送数据*/
001E 0CB9 out 0xc,R16
0020 .dbline -2
0020 L2:
0020 .dbline 0 ; func end
0020 0895 ret
0022 .dbsym r i 16 c
0022 .dbend
0022 .dbfunc e uart_receive0 _uart_receive0 fc
.even
0022 _uart_receive0::
0022 .dbline -1
0022 .dbline 21
0022 ; }
0022 ;
0022 ; /*数据接收,等待查询方式*/
0022 ; unsigned char uart_receive0(void) {
0022 L7:
0022 .dbline 23
0022 L8:
0022 .dbline 23
0022 ;
0022 ; while (!(UCSR0A & (1<<RXC0))); /* 等待接收数据*/
0022 5F9B sbis 0xb,7
0024 FECF rjmp L7
0026 .dbline 24
0026 ; return UDR0; /* 获取并返回数据*/
0026 0CB1 in R16,0xc
0028 .dbline -2
0028 L6:
0028 .dbline 0 ; func end
0028 0895 ret
002A .dbend
002A .dbfunc e uart_init1 _uart_init1 fV
.even
002A _uart_init1::
002A .dbline -1
002A .dbline 28
002A ; }
002A ;
002A ; /*串口初始化函数*/
002A ; void uart_init1(void) {
002A .dbline 30
002A ;
002A ; UCSR1A = (1 << U2X1); /*倍速*/
002A 82E0 ldi R24,2
002C 80939B00 sts 155,R24
0030 .dbline 31
0030 ; UCSR1B = (1 << TXEN1) | (1 << RXEN1); /*允许接收和发送*/
0030 88E1 ldi R24,24
0032 80939A00 sts 154,R24
0036 .dbline 32
0036 ; UCSR1C = (1 << UCSZ11) | (1 << UCSZ10); /*8位数据、1 位停止、异步、无校验*/
0036 86E0 ldi R24,6
0038 80939D00 sts 157,R24
003C .dbline 33
003C ; UBRR1H = 0x00;
003C 2224 clr R2
003E 20929800 sts 152,R2
0042 .dbline 34
0042 ; UBRR1L = 12; /*波特率9600*/
0042 8CE0 ldi R24,12
0044 80939900 sts 153,R24
0048 .dbline -2
0048 L10:
0048 .dbline 0 ; func end
0048 0895 ret
004A .dbend
004A .dbfunc e uart_transmit1 _uart_transmit1 fV
004A ; i -> R16
.even
004A _uart_transmit1::
004A .dbline -1
004A .dbline 38
004A ; }
004A ;
004A ; /*数据发送,查询方式*/
004A ; void uart_transmit1(unsigned char i) {
004A L12:
004A .dbline 40
004A L13:
004A .dbline 40
004A ;
004A ; while (!(UCSR1A & (1<<UDRE1))); /* 等待发送缓冲器为空*/
004A 20909B00 lds R2,155
004E 25FE sbrs R2,5
0050 FCCF rjmp L12
0052 .dbline 41
0052 ; UDR1 = i; /* 发送数据*/
0052 00939C00 sts 156,R16
0056 .dbline -2
0056 L11:
0056 .dbline 0 ; func end
0056 0895 ret
0058 .dbsym r i 16 c
0058 .dbend
0058 .dbfunc e uart_receive1 _uart_receive1 fi
.even
0058 _uart_receive1::
0058 .dbline -1
0058 .dbline 45
0058 ; }
0058 ;
0058 ; /*数据接收,周期查询方式*/
0058 ; unsigned int uart_receive1(void) {
0058 .dbline 47
0058 ;
0058 ; if ((UCSR1A & (1<<RXC1)) != 0) { /* 判断接收是否完成*/
0058 20909B00 lds R2,155
005C 27FE sbrs R2,7
005E 05C0 rjmp L16
0060 .dbline 47
0060 .dbline 48
0060 ; return (UDR1 | 0x0100); /* 返回数据和标志*/
0060 00919C00 lds R16,156
0064 1127 clr R17
0066 1160 ori R17,1
0068 02C0 xjmp L15
006A L16:
006A .dbline 50
006A ; }
006A ; else {
006A .dbline 51
006A ; return 0; /*返回无效标志*/
006A 0027 clr R16
006C 1127 clr R17
006E .dbline -2
006E L15:
006E .dbline 0 ; func end
006E 0895 ret
0070 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -