📄 usart2.s
字号:
.module usart2.c
.area vector(rom, abs)
.org 44
jmp _uart0_rx_isr
.area text(rom, con, rel)
.dbfile F:\LX\USART\usart2.c
.dbfunc e uart0_rx_isr _uart0_rx_isr fV
; dat -> R20
.even
_uart0_rx_isr::
xcall push_lset
xcall push_gset1
.dbline -1
.dbline 12
.dbline 13
sbis 0xb,7
rjmp L2
.dbline 13
.dbline 14
in R20,0xc
.dbline 15
mov R16,R20
xcall _USART_Transmit
.dbline 16
L2:
.dbline -2
L1:
xcall pop_gset1
xcall pop_lset
.dbline 0 ; func end
reti
.dbsym r dat 20 c
.dbend
.dbfunc e main _main fV
; rec -> <dead>
.even
_main::
.dbline -1
.dbline 20
; #include<iom16v.h>
; #include <macros.h>
; #define key (PIND&0x04) //定义按键PD2
; /*****************函数原型声明************************/
; void USART_Init(unsigned int baud);
; void USART_Transmit(unsigned char dat);
; void delayms(unsigned int t);
; unsigned char USART_Receive(void);
; /******************接收中断函数****************************/
; #pragma interrupt_handler uart0_rx_isr:12
; void uart0_rx_isr(void)
; { unsigned char dat;
; if(UCSRA&(1<<RXC)){ //把要接收的数据全部接收
; dat=UDR;
; USART_Transmit(dat);
; }
; }
; /*****************************************************/
; void main(void)
; { unsigned char rec;
.dbline 21
; PORTB=0xff;
ldi R24,255
out 0x18,R24
.dbline 22
; DDRB=0xff;
out 0x17,R24
.dbline 23
; PORTD=0x07;
ldi R24,7
out 0x12,R24
.dbline 24
; DDRD=0x02;
ldi R24,2
out 0x11,R24
.dbline 25
; UCSRA=0x00;
clr R2
out 0xb,R2
.dbline 26
; USART_Init(71); //波特为9600,外部晶振11.0592
ldi R16,71
ldi R17,0
xcall _USART_Init
.dbline 27
; SEI();
sei
xjmp L6
L5:
.dbline 29
; while(1)
; {
.dbline 30
; if(key==0)
sbic 0x10,2
rjmp L8
.dbline 31
; { //按键按下发送一字节数据
.dbline 32
; delayms(10);
ldi R16,10
ldi R17,0
xcall _delayms
.dbline 33
; if(key==0){
sbic 0x10,2
rjmp L10
.dbline 33
L12:
.dbline 34
L13:
.dbline 34
; while(!key);
sbis 0x10,2
rjmp L12
.dbline 35
; USART_Transmit(0x22);
ldi R16,34
xcall _USART_Transmit
.dbline 36
; }
L10:
.dbline 37
; }
L8:
.dbline 38
L6:
.dbline 28
xjmp L5
X0:
.dbline -2
L4:
.dbline 0 ; func end
ret
.dbsym l rec 1 c
.dbend
.dbfunc e USART_Init _USART_Init fV
; baud -> R16,R17
.even
_USART_Init::
.dbline -1
.dbline 43
; }
; }
;
; /******************USART初始化***********************/
; void USART_Init(unsigned int baud)
; {
.dbline 44
; UBRRH=(unsigned char)(baud>>8);
movw R2,R16
mov R2,R3
clr R3
out 0x20,R2
.dbline 45
; UBRRL=(unsigned char)baud; //设定波特率
out 0x9,R16
.dbline 46
; UCSRB=0x98; //使能接收和发送,开接收中断
ldi R24,152
out 0xa,R24
.dbline 47
; UCSRC=0x8e; //设置帧格式8数据位,2停止位
ldi R24,142
out 0x20,R24
.dbline -2
L15:
.dbline 0 ; func end
ret
.dbsym r baud 16 i
.dbend
.dbfunc e USART_Transmit _USART_Transmit fV
; dat -> R16
.even
_USART_Transmit::
.dbline -1
.dbline 51
; }
; /************发送函数****************************/
; void USART_Transmit(unsigned char dat)
; {
L17:
.dbline 52
L18:
.dbline 52
; while(!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L17
.dbline 53
; UDR=dat;
out 0xc,R16
.dbline -2
L16:
.dbline 0 ; func end
ret
.dbsym r dat 16 c
.dbend
.dbfunc e USART_Receive _USART_Receive fc
.even
_USART_Receive::
.dbline -1
.dbline 57
; }
; /************接收函数*****************************/
; unsigned char USART_Receive(void)
; {
L21:
.dbline 58
L22:
.dbline 58
; while(!(UCSRA&(1<<RXC)));
sbis 0xb,7
rjmp L21
.dbline 59
; return UDR;
in R16,0xc
.dbline -2
L20:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delayms _delayms fV
; i -> R20,R21
; j -> R22,R23
; t -> R16,R17
.even
_delayms::
xcall push_gset2
.dbline -1
.dbline 63
; }
; /**********延时*********************************/
; void delayms(unsigned int t)
; {
.dbline 65
; unsigned int i,j;
; for(i=0;i<t;i++)
clr R20
clr R21
xjmp L28
L25:
.dbline 66
clr R22
clr R23
xjmp L32
L29:
.dbline 66
L30:
.dbline 66
subi R22,255 ; offset = 1
sbci R23,255
L32:
.dbline 66
cpi R22,100
ldi R30,0
cpc R23,R30
brlo L29
L26:
.dbline 65
subi R20,255 ; offset = 1
sbci R21,255
L28:
.dbline 65
cp R20,R16
cpc R21,R17
brlo L25
.dbline -2
L24:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r j 22 i
.dbsym r t 16 i
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -