📄 usart.lis
字号:
.module usart.c
.area text(rom, con, rel)
0000 .dbfile F:\开发\C程序开发\AVR\usart\usart.c
0000 .dbfunc e uart_init _uart_init fV
.even
0000 _uart_init::
0000 .dbline -1
0000 .dbline 17
0000 ; //Project : USART
0000 ; //Writer :youhu
0000 ; //ICC-AVR application builder : 2007-4-24 16:45:33
0000 ; // Target : M16
0000 ; // Crystal: 8.0000Mhz
0000 ; // USART initialize
0000 ; // desired baud rate: 115200
0000 ; // actual: baud rate:111111 (3.7%)
0000 ; // char size: 8 bit
0000 ; // parity: Disabled
0000 ;
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ; unsigned char mes;
0000 ;
0000 ; void uart_init(void)
0000 ; {
0000 .dbline 18
0000 ; UCSRB = 0x00;
0000 2224 clr R2
0002 2AB8 out 0xa,R2
0004 .dbline 19
0004 ; UCSRA = 0x03; //异步模式,禁止奇偶校验,8位数据帧
0004 83E0 ldi R24,3
0006 8BB9 out 0xb,R24
0008 .dbline 20
0008 ; UCSRC = BIT(URSEL) | 0x06;
0008 86E8 ldi R24,134
000A 80BD out 0x20,R24
000C .dbline 21
000C ; UBRRL = 0x08; //波特率设置为115200
000C 88E0 ldi R24,8
000E 89B9 out 0x9,R24
0010 .dbline 22
0010 ; UBRRH = 0x00;
0010 20BC out 0x20,R2
0012 .dbline 23
0012 ; UCSRB = 0xF8; //允许串口发送和接收,接收和发送中断使能
0012 88EF ldi R24,248
0014 8AB9 out 0xa,R24
0016 .dbline -2
0016 L1:
0016 .dbline 0 ; func end
0016 0895 ret
0018 .dbend
0018 .dbfunc e USART_Receive _USART_Receive fc
.even
0018 _USART_Receive::
0018 .dbline -1
0018 .dbline 34
0018 ; }
0018 ;
0018 ; /*
0018 ; void USART_Transmit( unsigned char data )
0018 ; {
0018 ; while ( !( UCSRA & (1<<UDRE)) );
0018 ; UDR = data;
0018 ; }
0018 ; */
0018 ; unsigned char USART_Receive( void ) //串口从主机接收数据
0018 ; {
0018 L3:
0018 .dbline 36
0018 L4:
0018 .dbline 36
0018 ;
0018 ; while ( !(UCSRA & (1<<RXC)) ); // 等待接收数据
0018 5F9B sbis 0xb,7
001A FECF rjmp L3
001C .dbline 38
001C ;
001C ; return UDR; // 从缓冲器中获取并返回数据
001C 0CB1 in R16,0xc
001E .dbline -2
001E L2:
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbend
.area vector(rom, abs)
.org 52
0034 0C941000 jmp _uart0_tx_isr
.area text(rom, con, rel)
0020 .dbfile F:\开发\C程序开发\AVR\usart\usart.c
0020 .dbfunc e uart0_tx_isr _uart0_tx_isr fV
.even
0020 _uart0_tx_isr::
0020 0E940000 xcall push_lset
0024 .dbline -1
0024 .dbline 50
0024 ; }
0024 ;
0024 ; /*
0024 ; #pragma interrupt_handler uart0_rx_isr:12 //接收中断函数
0024 ; void uart0_rx_isr(void)
0024 ; {
0024 ; //wait a task;
0024 ; }
0024 ; */
0024 ; #pragma interrupt_handler uart0_tx_isr:14 //发送中断函数
0024 ; void uart0_tx_isr(void)
0024 ; {
0024 .dbline 51
0024 ; mes = USART_Receive();
0024 F9DF xcall _USART_Receive
0026 00930000 sts _mes,R16
002A L7:
002A .dbline 52
002A L8:
002A .dbline 52
002A ; while ( !( UCSRA & (1<<UDRE)) ); // 等待发送缓冲器为空
002A 5D9B sbis 0xb,5
002C FECF rjmp L7
002E .dbline 53
002E ; UDR = mes; // 将数据放入缓冲器,发送数据
002E 20900000 lds R2,_mes
0032 2CB8 out 0xc,R2
0034 .dbline -2
0034 L6:
0034 0E940000 xcall pop_lset
0038 .dbline 0 ; func end
0038 1895 reti
003A .dbend
003A .dbfunc e init_devices _init_devices fV
.even
003A _init_devices::
003A .dbline -1
003A .dbline 57
003A ; }
003A ;
003A ; void init_devices(void) //初始化各中断
003A ; {
003A .dbline 58
003A ; CLI();
003A F894 cli
003C .dbline 59
003C ; uart_init();
003C E1DF xcall _uart_init
003E .dbline 60
003E ; MCUCR = 0x00;
003E 2224 clr R2
0040 25BE out 0x35,R2
0042 .dbline 61
0042 ; GICR = 0x00;
0042 2BBE out 0x3b,R2
0044 .dbline 62
0044 ; TIMSK = 0x00;
0044 29BE out 0x39,R2
0046 .dbline 63
0046 ; SEI();
0046 7894 sei
0048 .dbline -2
0048 L10:
0048 .dbline 0 ; func end
0048 0895 ret
004A .dbend
004A .dbfunc e main _main fV
.even
004A _main::
004A .dbline -1
004A .dbline 68
004A ; }
004A ;
004A ;
004A ; void main(void)
004A ; {
004A .dbline 69
004A ; init_devices();
004A F7DF xcall _init_devices
004C .dbline -2
004C L11:
004C .dbline 0 ; func end
004C 0895 ret
004E .dbend
.area bss(ram, con, rel)
0000 .dbfile F:\开发\C程序开发\AVR\usart\usart.c
0000 _mes::
0000 .blkb 1
0001 .dbsym e mes _mes c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -