📄 usart1.s
字号:
.module usart1.c
.area data(ram, con, rel)
_strings::
.blkb 19
.area idata
.byte 180,243,209,167,201,250,181,231,215,211,180,180,208,194,208,173
.byte 187,225,0
.area data(ram, con, rel)
.dbfile F:\LX\USART\usart1.c
.dbsym e strings _strings A[19:19]c
.area text(rom, con, rel)
.dbfile F:\LX\USART\usart1.c
.dbfunc e main _main fV
; rec -> <dead>
; i -> R20
.even
_main::
.dbline -1
.dbline 11
; #include<iom16v.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);
; unsigned char strings[]="大学生电子创新协会";
; /******************主函数****************************/
; void main(void)
; { unsigned char rec,i;
.dbline 12
; PORTB=0xff;
ldi R24,255
out 0x18,R24
.dbline 13
; DDRB=0xff;
out 0x17,R24
.dbline 14
; PORTD=0x07;
ldi R24,7
out 0x12,R24
.dbline 15
; DDRD=0x02;
ldi R24,2
out 0x11,R24
.dbline 16
; USART_Init(71);//波特为9600,外部晶振11.0592
ldi R16,71
ldi R17,0
xcall _USART_Init
.dbline 17
; for(i=0;i<18;i++)
clr R20
xjmp L5
L2:
.dbline 18
ldi R24,<_strings
ldi R25,>_strings
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
xcall _USART_Transmit
L3:
.dbline 17
inc R20
L5:
.dbline 17
cpi R20,18
brlo L2
L6:
.dbline 20
.dbline 34
L7:
.dbline 19
xjmp L6
X0:
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbsym l rec 1 c
.dbsym r i 20 c
.dbend
.dbfunc e USART_Init _USART_Init fV
; baud -> R16,R17
.even
_USART_Init::
.dbline -1
.dbline 38
; USART_Transmit(strings[i]);
; while(1)
; { /*
; if(key==0){ //按键按下发送一字节数据
; delayms(10);
; if(key==0){
; while(!key);
; for(i=0;i<18;i++)
; USART_Transmit(strings[i]);
; }
; }
; if(UCSRA&(1<<RXC)) //如果接收缓存区有数据*********
; {
; rec=USART_Receive();
; USART_Transmit(rec);
; }*/
; }
; }
; /******************USART初始化***********************/
; void USART_Init(unsigned int baud)
; {
.dbline 40
; //UBRRH=(unsigned char)(baud/256);
; UBRRL=(unsigned char)baud; //设定波特率
out 0x9,R16
.dbline 41
; UCSRB=0x18; //使能接收和发送
ldi R24,24
out 0xa,R24
.dbline 42
; UCSRC=0x8e; //设置帧格式8数据位,2停止位
ldi R24,142
out 0x20,R24
.dbline -2
L9:
.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 46
; }
; /************发送函数****************************/
; void USART_Transmit(unsigned char dat)
; {
L11:
.dbline 47
L12:
.dbline 47
; while(!(UCSRA&(1<<UDRE)));
sbis 0xb,5
rjmp L11
.dbline 48
; UDR=dat;
out 0xc,R16
.dbline -2
L10:
.dbline 0 ; func end
ret
.dbsym r dat 16 c
.dbend
.dbfunc e USART_Receive _USART_Receive fc
.even
_USART_Receive::
.dbline -1
.dbline 52
; }
; /************接收函数*****************************/
; unsigned char USART_Receive(void)
; {
L15:
.dbline 53
L16:
.dbline 53
; while(!(UCSRA&(1<<RXC)));
sbis 0xb,7
rjmp L15
.dbline 54
; return UDR;
in R16,0xc
.dbline -2
L14:
.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 58
; }
; /**********延时*********************************/
; void delayms(unsigned int t)
; {
.dbline 60
; unsigned int i,j;
; for(i=0;i<t;i++)
clr R20
clr R21
xjmp L22
L19:
.dbline 61
clr R22
clr R23
xjmp L26
L23:
.dbline 61
L24:
.dbline 61
subi R22,255 ; offset = 1
sbci R23,255
L26:
.dbline 61
cpi R22,100
ldi R30,0
cpc R23,R30
brlo L23
L20:
.dbline 60
subi R20,255 ; offset = 1
sbci R21,255
L22:
.dbline 60
cp R20,R16
cpc R21,R17
brlo L19
.dbline -2
L18:
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 + -