📄 usart.s
字号:
.module usart.c
.area text(rom, con, rel)
.dbfile usart.c
.dbfunc e usart_init _usart_init fV
.even
_usart_init::
.dbline -1
.dbline 5
; /*上位机发送一个数据,下位返回相同的数据,在中断中接收数据,并发送数据*/
; #include <iom16v.h>
; #include <macros.h>
; void usart_init(void)
; {
.dbline 6
; UBRR=0X33;//fosc=8mhz,波特率9600
ldi R24,51
out 0x9,R24
.dbline 7
; UCSRA=0X20;
ldi R24,32
out 0xb,R24
.dbline 8
; UCSRC=0X86;
ldi R24,134
out 0x20,R24
.dbline 9
; UCSRB=0X98;
ldi R24,152
out 0xa,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 44
jmp _usart_receive
.area text(rom, con, rel)
.dbfile usart.c
.dbfunc e usart_receive _usart_receive fV
; d -> R16
.even
_usart_receive::
st -y,R16
st -y,R24
in R16,0x3f
st -y,R16
.dbline -1
.dbline 13
; }
; #pragma interrupt_handler usart_receive:12
; void usart_receive(void)
; {
.dbline 15
; unsigned char d;
; d=UDR;
in R16,0xc
.dbline 16
; UDR=0xff;
ldi R24,255
out 0xc,R24
L3:
.dbline 18
L4:
.dbline 17
; while(!(UCSRA&(1<<TXC)))
sbis 0xb,6
rjmp L3
.dbline -2
L2:
ld R16,y+
out 0x3f,R16
ld R24,y+
ld R16,y+
.dbline 0 ; func end
reti
.dbsym r d 16 c
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 22
; ;
;
; }
; void main(void)
; {
.dbline 23
; CLI();
cli
.dbline 24
; usart_init();
xcall _usart_init
.dbline 25
; SEI();
sei
L7:
.dbline 26
L8:
.dbline 26
xjmp L7
X0:
.dbline -2
L6:
.dbline 0 ; func end
ret
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -