📄 uart.lis
字号:
.module uart.c
.area text(rom, con, rel)
0000 .dbfile C:\TDdownload\zxy\169demo\169UART\uart.c
0000 .dbfunc e port_init _port_init fV
.even
0000 _port_init::
0000 .dbline -1
0000 .dbline 16
0000 ; // **************************************************************
0000 ; // *** 广 州 天 河 双 龙 电 子 公 司 ***
0000 ; // *** http://www.sl.com.cn ***
0000 ; // *** 实验: UART ***
0000 ; // *** 作者:zxy@sl.com.cn ***
0000 ; // *** 2006年3月28日 ***
0000 ; // *** 目标MCU:MEGA169 晶振:内部(INT)8MHZ ***
0000 ; // **************************************************************
0000 ; //本实验需相关软件配合如:comdebug.exe
0000 ; #include <iom169v.h>
0000 ; #include <macros.h>
0000 ; #define fosc 8000000
0000 ; #define baud 19200
0000 ;
0000 ; void port_init()
0000 ; {
0000 .dbline 17
0000 ; PORTE=0xff;
0000 8FEF ldi R24,255
0002 8EB9 out 0xe,R24
0004 .dbline 18
0004 ; DDRE=0xff;
0004 8DB9 out 0xd,R24
0006 .dbline -2
0006 L1:
0006 .dbline 0 ; func end
0006 0895 ret
0008 .dbend
0008 .dbfunc e uart1_init _uart1_init fV
.even
0008 _uart1_init::
0008 .dbline -1
0008 .dbline 23
0008 ; }
0008 ;
0008 ; //URAT的1口
0008 ; void uart1_init(void)
0008 ; {
0008 .dbline 24
0008 ; UCSR0B = 0x00; //设置波特率时关闭发送和接收
0008 2224 clr R2
000A 2092C100 sts 193,R2
000E .dbline 25
000E ; UCSR0A = 0x00;
000E 2092C000 sts 192,R2
0012 .dbline 26
0012 ; UBRRL=(fosc/16/(baud+1))%256;
0012 8AE1 ldi R24,26
0014 8093C400 sts 196,R24
0018 .dbline 27
0018 ; UBRRH=(fosc/16/(baud+1))/256;//设置波特率
0018 2092C500 sts 197,R2
001C .dbline 28
001C ; UCSR0C =(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
001C 86E0 ldi R24,6
001E 8093C200 sts 194,R24
0022 .dbline 29
0022 ; UCSR0B =(1<<RXEN)|(1<<TXEN);//允许发送和接收
0022 88E1 ldi R24,24
0024 8093C100 sts 193,R24
0028 .dbline -2
0028 L2:
0028 .dbline 0 ; func end
0028 0895 ret
002A .dbend
002A .dbfunc e putchar1 _putchar1 fV
002A ; c -> R16
.even
002A _putchar1::
002A .dbline -1
002A .dbline 32
002A ; }
002A ; void putchar1(unsigned char c)
002A ; {
002A L4:
002A .dbline 33
002A L5:
002A .dbline 33
002A ; while (!(UCSRA&(1<<UDRE0)));//判断上次发送是否完成
002A 2090C000 lds R2,192
002E 25FE sbrs R2,5
0030 FCCF rjmp L4
0032 .dbline 34
0032 ; UDR0=c; //发送数据
0032 0093C600 sts 198,R16
0036 .dbline -2
0036 L3:
0036 .dbline 0 ; func end
0036 0895 ret
0038 .dbsym r c 16 c
0038 .dbend
0038 .dbfunc e getchar1 _getchar1 fc
.even
0038 _getchar1::
0038 .dbline -1
0038 .dbline 37
0038 ; }
0038 ; unsigned char getchar1(void)
0038 ; {
0038 L8:
0038 .dbline 38
0038 L9:
0038 .dbline 38
0038 ; while(!(UCSRA&(1<<RXC0)));//判断是否接收到数据
0038 2090C000 lds R2,192
003C 27FE sbrs R2,7
003E FCCF rjmp L8
0040 .dbline 39
0040 ; return UDR0; //接收数据
0040 0091C600 lds R16,198
0044 .dbline -2
0044 L7:
0044 .dbline 0 ; func end
0044 0895 ret
0046 .dbend
0046 .dbfunc e main _main fV
0046 ; i -> R20
.even
0046 _main::
0046 .dbline -1
0046 .dbline 44
0046 ; }
0046 ; //URAT的1口
0046 ;
0046 ; void main(void)
0046 ; {
0046 .dbline 46
0046 ; unsigned char i;
0046 ; port_init();
0046 DCDF xcall _port_init
0048 .dbline 47
0048 ; uart1_init();
0048 DFDF xcall _uart1_init
004A 03C0 xjmp L13
004C L12:
004C .dbline 49
004C .dbline 50
004C F5DF xcall _getchar1
004E 402F mov R20,R16
0050 .dbline 51
0050 ECDF xcall _putchar1
0052 .dbline 52
0052 L13:
0052 .dbline 48
0052 FCCF xjmp L12
0054 X0:
0054 .dbline -2
0054 L11:
0054 .dbline 0 ; func end
0054 0895 ret
0056 .dbsym r i 20 c
0056 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -