📄 usart.lis
字号:
.module Usart.c
.area text(rom, con, rel)
0000 .dbfile ..\..\..\..\..\DOCUME~1\浪仔\桌面\教学实验板\M16_VS1003_test\Usart.c
0000 .dbfile C:\DOCUME~1\浪仔\桌面\教学实验板\M16_VS1003_test\Usart.c
0000 .dbfunc e Usart_Init _Usart_Init fV
0000 ; temp -> R10,R11
0000 ; baud -> R10,R11
.even
0000 _Usart_Init::
0000 0E940000 xcall push_xgsetF00C
0004 5801 movw R10,R16
0006 .dbline -1
0006 .dbline 22
0006 ;
0006 ; //---------------------------- USART串口驱动程序 ----------------------------
0006 ; //
0006 ; //USART串口驱动程序:发送与接收
0006 ; //整理日期:2009.7.8
0006 ; //
0006 ; //----------------------------------------------------------------------------
0006 ;
0006 ; #include "Usart.h"
0006 ;
0006 ; //定义fosc频率
0006 ; #define fosc 16000000
0006 ;
0006 ;
0006 ; //---------------------------------
0006 ; //
0006 ; // USART初始化函数
0006 ; // baud:波特率
0006 ; //
0006 ; //---------------------------------
0006 ; void Usart_Init(unsigned int baud)
0006 ; {
0006 .dbline 24
0006 ; unsigned int temp;
0006 ; temp = fosc/16/baud-1;
0006 1501 movw R2,R10
0008 4424 clr R4
000A 5524 clr R5
000C 40E4 ldi R20,64
000E 52E4 ldi R21,66
0010 6FE0 ldi R22,15
0012 70E0 ldi R23,0
0014 5A92 st -y,R5
0016 4A92 st -y,R4
0018 3A92 st -y,R3
001A 2A92 st -y,R2
001C 8A01 movw R16,R20
001E 9B01 movw R18,R22
0020 0E940000 xcall div32s
0024 41E0 ldi R20,1
0026 50E0 ldi R21,0
0028 60E0 ldi R22,0
002A 70E0 ldi R23,0
002C 1801 movw R2,R16
002E 2901 movw R4,R18
0030 241A sub R2,R20
0032 350A sbc R3,R21
0034 460A sbc R4,R22
0036 570A sbc R5,R23
0038 5101 movw R10,R2
003A .dbline 25
003A ; UBRRH=(unsigned char )(temp>>8);
003A 232C mov R2,R3
003C 3324 clr R3
003E 20BC out 0x20,R2
0040 .dbline 26
0040 ; UBRRL=(unsigned char) (temp);
0040 A9B8 out 0x9,R10
0042 .dbline 27
0042 ; UCSRB=(1<<RXEN)|(1<<TXEN);
0042 88E1 ldi R24,24
0044 8AB9 out 0xa,R24
0046 .dbline 28
0046 ; UCSRC=(1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
0046 8EE8 ldi R24,142
0048 80BD out 0x20,R24
004A .dbline -2
004A L1:
004A .dbline 0 ; func end
004A 0C940000 xjmp pop_xgsetF00C
004E .dbsym r temp 10 i
004E .dbsym r baud 10 i
004E .dbend
004E .dbfunc e Usart_Transmit _Usart_Transmit fV
004E ; data -> R16
.even
004E _Usart_Transmit::
004E .dbline -1
004E .dbline 39
004E ; }
004E ;
004E ;
004E ; //-----------------------------------
004E ; //
004E ; // USART发送函数
004E ; // data:要发送的数据
004E ; //
004E ; //-----------------------------------
004E ; void Usart_Transmit(unsigned char data)
004E ; {
004E L3:
004E .dbline 40
004E ; while(!(UCSRA&(1<<UDRE)));
004E L4:
004E .dbline 40
004E 5D9B sbis 0xb,5
0050 FECF rjmp L3
0052 X0:
0052 .dbline 41
0052 ; UDR=data;
0052 0CB9 out 0xc,R16
0054 .dbline -2
0054 L2:
0054 .dbline 0 ; func end
0054 0895 ret
0056 .dbsym r data 16 c
0056 .dbend
0056 .dbfunc e Usart_Receive _Usart_Receive fc
.even
0056 _Usart_Receive::
0056 .dbline -1
0056 .dbline 52
0056 ; }
0056 ;
0056 ;
0056 ; //-----------------------------------
0056 ; //
0056 ; // USART接收函数
0056 ; // UDR:返回的数据
0056 ; //
0056 ; //-----------------------------------
0056 ; unsigned char Usart_Receive(void)
0056 ; {
0056 L7:
0056 .dbline 53
0056 ; while(!(UCSRA&(1<<RXC)));
0056 L8:
0056 .dbline 53
0056 5F9B sbis 0xb,7
0058 FECF rjmp L7
005A X1:
005A .dbline 54
005A ; return UDR;
005A 0CB1 in R16,0xc
005C .dbline -2
005C L6:
005C .dbline 0 ; func end
005C 0895 ret
005E .dbend
005E ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -