📄 main.lis
字号:
.module main.c
.area text(rom, con, rel)
0000 .dbfile E:\ICCAVR\project\AVRMEG~2\icc\009-UART-LED-A\main.c
0000 .dbfunc e Uart_Init _Uart_Init fV
.even
0000 _Uart_Init::
0000 .dbline -1
0000 .dbline 18
0000 ; /*
0000 ; 实验九:
0000 ;
0000 ; UART接口实险。
0000 ; 1、串口以查询方式接收数据,并分别将数据显示的PB口和返回。
0000 ; 2、内部1 M晶振,程序采用单任务方式,软件延时。
0000 ; 3、进行此实验请插上JP1的所有8个短路块,JP7(LED_EN)短路块。
0000 ; 4、通过此实验,可以对串口通信有个初步认识。
0000 ;
0000 ; AVR mega16学习板
0000 ; www.iccavr.com
0000 ; 11:47 2007-4-8
0000 ; */
0000 ;
0000 ; #include "iom16v.h"
0000 ;
0000 ; /*串口初始化函数*/
0000 ; void Uart_Init(void) {
0000 .dbline 19
0000 ; UCSRA = 0x02; /*倍速*/
0000 82E0 ldi R24,2
0002 8BB9 out 0xb,R24
0004 .dbline 20
0004 ; UCSRB = 0x18; /*允许接收和发送*/
0004 88E1 ldi R24,24
0006 8AB9 out 0xa,R24
0008 .dbline 21
0008 ; UCSRC = 0x06; /*8位数据*/
0008 86E0 ldi R24,6
000A 80BD out 0x20,R24
000C .dbline 22
000C ; UBRRH = 0x00;
000C 2224 clr R2
000E 20BC out 0x20,R2
0010 .dbline 23
0010 ; UBRRL = 12; /*9600*/
0010 8CE0 ldi R24,12
0012 89B9 out 0x9,R24
0014 .dbline -2
0014 L1:
0014 .dbline 0 ; func end
0014 0895 ret
0016 .dbend
0016 .dbfunc e Uart_Transmit _Uart_Transmit fV
0016 ; i -> R16
.even
0016 _Uart_Transmit::
0016 .dbline -1
0016 .dbline 27
0016 ; }
0016 ;
0016 ; /*数据发送,查询方式*/
0016 ; void Uart_Transmit(unsigned char i) {
0016 L3:
0016 .dbline 29
0016 L4:
0016 .dbline 29
0016 ;
0016 ; while (!(UCSRA & (1<<UDRE))); /* 等待发送缓冲器为空*/
0016 5D9B sbis 0xb,5
0018 FECF rjmp L3
001A .dbline 30
001A ; UDR = i; /* 发送数据*/
001A 0CB9 out 0xc,R16
001C .dbline -2
001C L2:
001C .dbline 0 ; func end
001C 0895 ret
001E .dbsym r i 16 c
001E .dbend
001E .dbfunc e Uart_Receive _Uart_Receive fc
.even
001E _Uart_Receive::
001E .dbline -1
001E .dbline 34
001E ; }
001E ;
001E ; /*数据接收,查询方式*/
001E ; unsigned char Uart_Receive( void ) {
001E L7:
001E .dbline 36
001E L8:
001E .dbline 36
001E ;
001E ; while (!(UCSRA & (1<<RXC))); /* 等待接收数据*/
001E 5F9B sbis 0xb,7
0020 FECF rjmp L7
0022 .dbline 37
0022 ; return UDR; /* 获取并返回数据*/
0022 0CB1 in R16,0xc
0024 .dbline -2
0024 L6:
0024 .dbline 0 ; func end
0024 0895 ret
0026 .dbend
0026 .dbfunc e main _main fV
0026 ; temp -> R20
.even
0026 _main::
0026 .dbline -1
0026 .dbline 42
0026 ; }
0026 ;
0026 ;
0026 ; /*主函数*/
0026 ; void main(void) {
0026 .dbline 46
0026 ;
0026 ; unsigned char temp;
0026 ;
0026 ; DDRA = 0x00; /*方向输入*/
0026 2224 clr R2
0028 2ABA out 0x1a,R2
002A .dbline 47
002A ; PORTA = 0xFF; /*打开上拉*/
002A 8FEF ldi R24,255
002C 8BBB out 0x1b,R24
002E .dbline 48
002E ; DDRB = 0xFF; /*方向输出*/
002E 87BB out 0x17,R24
0030 .dbline 49
0030 ; PORTB = 0xFF; /*电平设置*/
0030 88BB out 0x18,R24
0032 .dbline 50
0032 ; DDRC = 0x00;
0032 24BA out 0x14,R2
0034 .dbline 51
0034 ; PORTC = 0xFF;
0034 85BB out 0x15,R24
0036 .dbline 52
0036 ; DDRD = 0x02;
0036 82E0 ldi R24,2
0038 81BB out 0x11,R24
003A .dbline 53
003A ; PORTD = 0xFF;
003A 8FEF ldi R24,255
003C 82BB out 0x12,R24
003E .dbline 54
003E ; Uart_Init();
003E E0DF xcall _Uart_Init
0040 06C0 xjmp L12
0042 L11:
0042 .dbline 56
0042 .dbline 57
0042 EDDF xcall _Uart_Receive
0044 402F mov R20,R16
0046 .dbline 58
0046 242E mov R2,R20
0048 2094 com R2
004A 28BA out 0x18,R2
004C .dbline 59
004C E4DF xcall _Uart_Transmit
004E .dbline 60
004E L12:
004E .dbline 56
004E F9CF xjmp L11
0050 X0:
0050 .dbline -2
0050 L10:
0050 .dbline 0 ; func end
0050 0895 ret
0052 .dbsym r temp 20 c
0052 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -