⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 usart.lis

📁 MEGA16 开发包3
💻 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 + -