📄 usart1.lis
字号:
.module usart1.c
.area data(ram, con, rel)
0000 _strings::
0000 .blkb 19
.area idata
0000 B4F3D1A7C9FAB5E7D7D3B4B4D0C2D0AD .byte 180,243,209,167,201,250,181,231,215,211,180,180,208,194,208,173
0010 BBE100 .byte 187,225,0
.area data(ram, con, rel)
0013 .dbfile F:\LX\USART\usart1.c
0013 .dbsym e strings _strings A[19:19]c
.area text(rom, con, rel)
0000 .dbfile F:\LX\USART\usart1.c
0000 .dbfunc e main _main fV
0000 ; rec -> <dead>
0000 ; i -> R20
.even
0000 _main::
0000 .dbline -1
0000 .dbline 11
0000 ; #include<iom16v.h>
0000 ; #define key (PIND&0x04) //定义按键PD2
0000 ; /*****************函数原型声明************************/
0000 ; void USART_Init(unsigned int baud);
0000 ; void USART_Transmit(unsigned char dat);
0000 ; void delayms(unsigned int t);
0000 ; unsigned char USART_Receive(void);
0000 ; unsigned char strings[]="大学生电子创新协会";
0000 ; /******************主函数****************************/
0000 ; void main(void)
0000 ; { unsigned char rec,i;
0000 .dbline 12
0000 ; PORTB=0xff;
0000 8FEF ldi R24,255
0002 88BB out 0x18,R24
0004 .dbline 13
0004 ; DDRB=0xff;
0004 87BB out 0x17,R24
0006 .dbline 14
0006 ; PORTD=0x07;
0006 87E0 ldi R24,7
0008 82BB out 0x12,R24
000A .dbline 15
000A ; DDRD=0x02;
000A 82E0 ldi R24,2
000C 81BB out 0x11,R24
000E .dbline 16
000E ; USART_Init(71);//波特为9600,外部晶振11.0592
000E 07E4 ldi R16,71
0010 10E0 ldi R17,0
0012 0FD0 xcall _USART_Init
0014 .dbline 17
0014 ; for(i=0;i<18;i++)
0014 4427 clr R20
0016 09C0 xjmp L5
0018 L2:
0018 .dbline 18
0018 80E0 ldi R24,<_strings
001A 90E0 ldi R25,>_strings
001C E42F mov R30,R20
001E FF27 clr R31
0020 E80F add R30,R24
0022 F91F adc R31,R25
0024 0081 ldd R16,z+0
0026 0BD0 xcall _USART_Transmit
0028 L3:
0028 .dbline 17
0028 4395 inc R20
002A L5:
002A .dbline 17
002A 4231 cpi R20,18
002C A8F3 brlo L2
002E L6:
002E .dbline 20
002E .dbline 34
002E L7:
002E .dbline 19
002E FFCF xjmp L6
0030 X0:
0030 .dbline -2
0030 L1:
0030 .dbline 0 ; func end
0030 0895 ret
0032 .dbsym l rec 1 c
0032 .dbsym r i 20 c
0032 .dbend
0032 .dbfunc e USART_Init _USART_Init fV
0032 ; baud -> R16,R17
.even
0032 _USART_Init::
0032 .dbline -1
0032 .dbline 38
0032 ; USART_Transmit(strings[i]);
0032 ; while(1)
0032 ; { /*
0032 ; if(key==0){ //按键按下发送一字节数据
0032 ; delayms(10);
0032 ; if(key==0){
0032 ; while(!key);
0032 ; for(i=0;i<18;i++)
0032 ; USART_Transmit(strings[i]);
0032 ; }
0032 ; }
0032 ; if(UCSRA&(1<<RXC)) //如果接收缓存区有数据*********
0032 ; {
0032 ; rec=USART_Receive();
0032 ; USART_Transmit(rec);
0032 ; }*/
0032 ; }
0032 ; }
0032 ; /******************USART初始化***********************/
0032 ; void USART_Init(unsigned int baud)
0032 ; {
0032 .dbline 40
0032 ; //UBRRH=(unsigned char)(baud/256);
0032 ; UBRRL=(unsigned char)baud; //设定波特率
0032 09B9 out 0x9,R16
0034 .dbline 41
0034 ; UCSRB=0x18; //使能接收和发送
0034 88E1 ldi R24,24
0036 8AB9 out 0xa,R24
0038 .dbline 42
0038 ; UCSRC=0x8e; //设置帧格式8数据位,2停止位
0038 8EE8 ldi R24,142
003A 80BD out 0x20,R24
003C .dbline -2
003C L9:
003C .dbline 0 ; func end
003C 0895 ret
003E .dbsym r baud 16 i
003E .dbend
003E .dbfunc e USART_Transmit _USART_Transmit fV
003E ; dat -> R16
.even
003E _USART_Transmit::
003E .dbline -1
003E .dbline 46
003E ; }
003E ; /************发送函数****************************/
003E ; void USART_Transmit(unsigned char dat)
003E ; {
003E L11:
003E .dbline 47
003E L12:
003E .dbline 47
003E ; while(!(UCSRA&(1<<UDRE)));
003E 5D9B sbis 0xb,5
0040 FECF rjmp L11
0042 .dbline 48
0042 ; UDR=dat;
0042 0CB9 out 0xc,R16
0044 .dbline -2
0044 L10:
0044 .dbline 0 ; func end
0044 0895 ret
0046 .dbsym r dat 16 c
0046 .dbend
0046 .dbfunc e USART_Receive _USART_Receive fc
.even
0046 _USART_Receive::
0046 .dbline -1
0046 .dbline 52
0046 ; }
0046 ; /************接收函数*****************************/
0046 ; unsigned char USART_Receive(void)
0046 ; {
0046 L15:
0046 .dbline 53
0046 L16:
0046 .dbline 53
0046 ; while(!(UCSRA&(1<<RXC)));
0046 5F9B sbis 0xb,7
0048 FECF rjmp L15
004A .dbline 54
004A ; return UDR;
004A 0CB1 in R16,0xc
004C .dbline -2
004C L14:
004C .dbline 0 ; func end
004C 0895 ret
004E .dbend
004E .dbfunc e delayms _delayms fV
004E ; i -> R20,R21
004E ; j -> R22,R23
004E ; t -> R16,R17
.even
004E _delayms::
004E 0E940000 xcall push_gset2
0052 .dbline -1
0052 .dbline 58
0052 ; }
0052 ; /**********延时*********************************/
0052 ; void delayms(unsigned int t)
0052 ; {
0052 .dbline 60
0052 ; unsigned int i,j;
0052 ; for(i=0;i<t;i++)
0052 4427 clr R20
0054 5527 clr R21
0056 0BC0 xjmp L22
0058 L19:
0058 .dbline 61
0058 6627 clr R22
005A 7727 clr R23
005C 02C0 xjmp L26
005E L23:
005E .dbline 61
005E L24:
005E .dbline 61
005E 6F5F subi R22,255 ; offset = 1
0060 7F4F sbci R23,255
0062 L26:
0062 .dbline 61
0062 6436 cpi R22,100
0064 E0E0 ldi R30,0
0066 7E07 cpc R23,R30
0068 D0F3 brlo L23
006A L20:
006A .dbline 60
006A 4F5F subi R20,255 ; offset = 1
006C 5F4F sbci R21,255
006E L22:
006E .dbline 60
006E 4017 cp R20,R16
0070 5107 cpc R21,R17
0072 90F3 brlo L19
0074 .dbline -2
0074 L18:
0074 0E940000 xcall pop_gset2
0078 .dbline 0 ; func end
0078 0895 ret
007A .dbsym r i 20 i
007A .dbsym r j 22 i
007A .dbsym r t 16 i
007A .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -