⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 uart.s

📁 这是一个串口调试程序
💻 S
字号:
	.module uart.c
	.area text(rom, con, rel)
	.dbfile E:\ICCAVR\project\AVRMEG~3\icc\010-UART-232\uart.c
	.dbfunc e uart_init0 _uart_init0 fV
	.even
_uart_init0::
	.dbline -1
	.dbline 4
; #include "iom128v.h"
; 
; /*串口初始化函数*/
; void uart_init0(void) {
	.dbline 6
; 
; 	UCSR0A = (1 << U2X0);								/*倍速*/
	ldi R24,2
	out 0xb,R24
	.dbline 7
; 	UCSR0B = (1 << TXEN0) | (1 << RXEN0);				/*允许接收和发送*/
	ldi R24,24
	out 0xa,R24
	.dbline 8
; 	UCSR0C = (1 << UCSZ01) | (1 << UCSZ00);				/*8位数据、1 位停止、异步、无校验*/
	ldi R24,6
	sts 149,R24
	.dbline 9
; 	UBRR0H = 0x00;
	clr R2
	sts 144,R2
	.dbline 10
; 	UBRR0L = 12;										/*波特率9600*/
	ldi R24,12
	out 0x9,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart_transmit0 _uart_transmit0 fV
;              i -> R16
	.even
_uart_transmit0::
	.dbline -1
	.dbline 14
; }
; 
; /*数据发送,查询方式*/
; void uart_transmit0(unsigned char i) {
L3:
	.dbline 16
L4:
	.dbline 16
; 
; 	while (!(UCSR0A & (1<<UDRE0)));						/* 等待发送缓冲器为空*/
	sbis 0xb,5
	rjmp L3
	.dbline 17
; 	UDR0 = i;											/* 发送数据*/
	out 0xc,R16
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e uart_receive0 _uart_receive0 fc
	.even
_uart_receive0::
	.dbline -1
	.dbline 21
; }
; 
; /*数据接收,等待查询方式*/
; unsigned char uart_receive0(void) {
L7:
	.dbline 23
L8:
	.dbline 23
; 
; 	while (!(UCSR0A & (1<<RXC0)));						/* 等待接收数据*/
	sbis 0xb,7
	rjmp L7
	.dbline 24
; 	return UDR0;										/* 获取并返回数据*/
	in R16,0xc
	.dbline -2
L6:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart_init1 _uart_init1 fV
	.even
_uart_init1::
	.dbline -1
	.dbline 28
; }
; 
; /*串口初始化函数*/
; void uart_init1(void) {
	.dbline 30
; 
; 	UCSR1A = (1 << U2X1);								/*倍速*/
	ldi R24,2
	sts 155,R24
	.dbline 31
; 	UCSR1B = (1 << TXEN1) | (1 << RXEN1);				/*允许接收和发送*/
	ldi R24,24
	sts 154,R24
	.dbline 32
; 	UCSR1C = (1 << UCSZ11) | (1 << UCSZ10);				/*8位数据、1 位停止、异步、无校验*/
	ldi R24,6
	sts 157,R24
	.dbline 33
; 	UBRR1H = 0x00;
	clr R2
	sts 152,R2
	.dbline 34
; 	UBRR1L = 12;										/*波特率9600*/
	ldi R24,12
	sts 153,R24
	.dbline -2
L10:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e uart_transmit1 _uart_transmit1 fV
;              i -> R16
	.even
_uart_transmit1::
	.dbline -1
	.dbline 38
; }
; 
; /*数据发送,查询方式*/
; void uart_transmit1(unsigned char i) {
L12:
	.dbline 40
L13:
	.dbline 40
; 
; 	while (!(UCSR1A & (1<<UDRE1)));						/* 等待发送缓冲器为空*/
	lds R2,155
	sbrs R2,5
	rjmp L12
	.dbline 41
; 	UDR1 = i;											/* 发送数据*/
	sts 156,R16
	.dbline -2
L11:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e uart_receive1 _uart_receive1 fi
	.even
_uart_receive1::
	.dbline -1
	.dbline 45
; }
; 
; /*数据接收,周期查询方式*/
; unsigned int uart_receive1(void) {
	.dbline 47
; 
; 	if ((UCSR1A & (1<<RXC1)) != 0) {					/* 判断接收是否完成*/
	lds R2,155
	sbrs R2,7
	rjmp L16
	.dbline 47
	.dbline 48
; 		return (UDR1 | 0x0100);							/* 返回数据和标志*/
	lds R16,156
	clr R17
	ori R17,1
	xjmp L15
L16:
	.dbline 50
; 		}
; 	else {
	.dbline 51
; 		return 0;										/*返回无效标志*/
	clr R16
	clr R17
	.dbline -2
L15:
	.dbline 0 ; func end
	ret
	.dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -