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

📄 串口通信.lis

📁 AVR之ATMega16
💻 LIS
字号:
                        .module _串口通信.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\串口通信/delay.h
 0000                   .dbfunc e DelayUS _DelayUS fV
 0000           ;           time -> R16,R17
                        .even
 0000           _DelayUS::
 0000                   .dbline -1
 0000                   .dbline 9
 0000           ; //内部晶振 8M
 0000           ; #include <ioM16v.h>
 0000           ; #include <macros.h>
 0000           ; #include"delay.h"
 0000           ; 
 0000           ; 
 0000           ; 
 0000           ; /*------宏定义------*/
 0000           ; #define uchar unsigned char
 0000 02C0              xjmp L3
 0002           L2:
 0002                   .dbline 11
 0002 0150              subi R16,1
 0004 1040              sbci R17,0
 0006           L3:
 0006                   .dbline 10
 0006           ; #define uint  unsigned int
 0006 81E0              ldi R24,1
 0008 90E0              ldi R25,0
 000A 8017              cp R24,R16
 000C 9107              cpc R25,R17
 000E C8F3              brlo L2
 0010                   .dbline -2
 0010           L1:
 0010                   .dbline 0 ; func end
 0010 0895              ret
 0012                   .dbsym r time 16 i
 0012                   .dbend
 0012                   .dbfunc e DelayMS _DelayMS fV
 0012           ;              i -> R20,R21
 0012           ;           time -> R16,R17
                        .even
 0012           _DelayMS::
 0012 0E940000          xcall push_gset1
 0016                   .dbline -1
 0016                   .dbline 20
 0016           ; 
 0016           ; 
 0016           ; 
 0016           ; //端口初始化
 0016           ; void port_init(void)
 0016           ; {
 0016           ;  PORTA = 0x00;//设置端口方向、数据
 0016           ;  DDRA  = 0x00;
 0016           ;  PORTB = 0x00;
 0016           ;  DDRB  = 0x00;
 0016 09C0              xjmp L7
 0018           L6:
 0018                   .dbline 23
 0018           ;  PORTC = 0x00;
 0018           ;  DDRC  = 0x00;
 0018           ;  PORTD = 0x00;
 0018                   .dbline 24
 0018           ;  DDRD  = 0x03;
 0018 41E0              ldi R20,1
 001A 50E0              ldi R21,0
 001C 02C0              xjmp L12
 001E           L9:
 001E                   .dbline 25
 001E           L10:
 001E                   .dbline 24
 001E 4F5F              subi R20,255  ; offset = 1
 0020 5F4F              sbci R21,255
 0022           L12:
 0022                   .dbline 24
 0022 4637              cpi R20,118
 0024 E4E0              ldi R30,4
 0026 5E07              cpc R21,R30
 0028 D0F3              brlo L9
 002A                   .dbline 26
 002A           L7:
 002A                   .dbline 22
 002A 1801              movw R2,R16
 002C 0150              subi R16,1
 002E 1040              sbci R17,0
 0030 2220              tst R2
 0032 91F7              brne L6
 0034 3320              tst R3
 0036 81F7              brne L6
 0038           X0:
 0038                   .dbline -2
 0038           L5:
 0038 0E940000          xcall pop_gset1
 003C                   .dbline 0 ; func end
 003C 0895              ret
 003E                   .dbsym r i 20 i
 003E                   .dbsym r time 16 i
 003E                   .dbend
 003E                   .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\串口通信\串口通信.c
 003E                   .dbfunc e port_init _port_init fV
                        .even
 003E           _port_init::
 003E                   .dbline -1
 003E                   .dbline 16
 003E                   .dbline 17
 003E 2224              clr R2
 0040 2BBA              out 0x1b,R2
 0042                   .dbline 18
 0042 2ABA              out 0x1a,R2
 0044                   .dbline 19
 0044 28BA              out 0x18,R2
 0046                   .dbline 20
 0046 27BA              out 0x17,R2
 0048                   .dbline 21
 0048 25BA              out 0x15,R2
 004A                   .dbline 22
 004A 24BA              out 0x14,R2
 004C                   .dbline 23
 004C 22BA              out 0x12,R2
 004E                   .dbline 24
 004E 83E0              ldi R24,3
 0050 81BB              out 0x11,R24
 0052                   .dbline -2
 0052           L13:
 0052                   .dbline 0 ; func end
 0052 0895              ret
 0054                   .dbend
 0054                   .dbfunc e usart_init _usart_init fV
                        .even
 0054           _usart_init::
 0054                   .dbline -1
 0054                   .dbline 30
 0054           ; }
 0054           ; 
 0054           ; 
 0054           ; //串口通信初始化
 0054           ; void usart_init(void)
 0054           ; {
 0054                   .dbline 31
 0054           ;  UCSRB = 0x00;//禁止中断
 0054 2224              clr R2
 0056 2AB8              out 0xa,R2
 0058                   .dbline 32
 0058           ;  UCSRA = 0x00;//数据发送、接受位、数据帧错误、奇偶校验、溢出、多机模式
 0058 2BB8              out 0xb,R2
 005A                   .dbline 33
 005A           ;  UCSRC = BIT(URSEL) | 0x06;//使用UBRRH寄存器、数据位数8位
 005A 86E8              ldi R24,134
 005C 80BD              out 0x20,R24
 005E                   .dbline 34
 005E           ;  UBRRL = 0x19;//设置波特率
 005E 89E1              ldi R24,25
 0060 89B9              out 0x9,R24
 0062                   .dbline 35
 0062           ;  UBRRH = 0x00;
 0062 20BC              out 0x20,R2
 0064                   .dbline 36
 0064           ;  UCSRB = 0x98;//接受中断使能、接受、发送使能、不使用第9数据位
 0064 88E9              ldi R24,152
 0066 8AB9              out 0xa,R24
 0068                   .dbline -2
 0068           L14:
 0068                   .dbline 0 ; func end
 0068 0895              ret
 006A                   .dbend
 006A                   .dbfunc e uart_putchar _uart_putchar fV
 006A           ;              x -> R16
                        .even
 006A           _uart_putchar::
 006A                   .dbline -1
 006A                   .dbline 39
 006A           ; }
 006A           ; void uart_putchar(char x)
 006A           ; {
 006A           L16:
 006A                   .dbline 41
 006A           L17:
 006A                   .dbline 40
 006A           ;        while (!(UCSRA&0x20))//查询发送区是否为空
 006A 5D9B              sbis 0xb,5
 006C FECF              rjmp L16
 006E                   .dbline 42
 006E           ;        ;
 006E           ;        UDR=x; //发送数据 
 006E 0CB9              out 0xc,R16
 0070                   .dbline -2
 0070           L15:
 0070                   .dbline 0 ; func end
 0070 0895              ret
 0072                   .dbsym r x 16 c
 0072                   .dbend
                        .area vector(rom, abs)
                        .org 44
 002C 0C943900          jmp _usart_rx_isr
                        .area text(rom, con, rel)
 0072                   .dbfile C:\DOCUME~1\Administrator\桌面\精雅系列单片机实验开发板演示程序\串口通信\串口通信.c
 0072                   .dbfunc e usart_rx_isr _usart_rx_isr fV
 0072           ;              y -> R20
                        .even
 0072           _usart_rx_isr::
 0072 0E940000          xcall push_lset
 0076 0E940000          xcall push_gset1
 007A                   .dbline -1
 007A                   .dbline 48
 007A           ; }
 007A           ; 
 007A           ; //串行接收结束中断服务程序
 007A           ; #pragma interrupt_handler usart_rx_isr:12
 007A           ; void usart_rx_isr(void)
 007A           ; {
 007A                   .dbline 50
 007A           ;        char y;
 007A           ;        y=UDR;
 007A 4CB1              in R20,0xc
 007C                   .dbline 51
 007C           ;        uart_putchar(y);//把接收到的数据返回给上位机
 007C 042F              mov R16,R20
 007E F5DF              xcall _uart_putchar
 0080                   .dbline -2
 0080           L19:
 0080 0E940000          xcall pop_gset1
 0084 0E940000          xcall pop_lset
 0088                   .dbline 0 ; func end
 0088 1895              reti
 008A                   .dbsym r y 20 c
 008A                   .dbend
 008A                   .dbfunc e init_devices _init_devices fV
                        .even
 008A           _init_devices::
 008A                   .dbline -1
 008A                   .dbline 56
 008A           ; }
 008A           ; 
 008A           ; 
 008A           ; void init_devices(void)
 008A           ; {
 008A                   .dbline 57
 008A           ;  CLI(); //禁止所有中断
 008A F894              cli
 008C                   .dbline 58
 008C           ;  MCUCR  = 0x00;//INT0、INT1中断触发方式
 008C 2224              clr R2
 008E 25BE              out 0x35,R2
 0090                   .dbline 59
 0090           ;  MCUCSR = 0x80;//禁止JTAG
 0090 80E8              ldi R24,128
 0092 84BF              out 0x34,R24
 0094                   .dbline 60
 0094           ;  GICR   = 0x00;//外部中断使能
 0094 2BBE              out 0x3b,R2
 0096                   .dbline 61
 0096           ;  port_init();
 0096 D3DF              xcall _port_init
 0098                   .dbline 62
 0098           ;  usart_init();
 0098 DDDF              xcall _usart_init
 009A                   .dbline 63
 009A           ;  SEI();//开全局中断
 009A 7894              sei
 009C                   .dbline -2
 009C           L20:
 009C                   .dbline 0 ; func end
 009C 0895              ret
 009E                   .dbend
 009E                   .dbfunc e main _main fV
                        .even
 009E           _main::
 009E                   .dbline -1
 009E                   .dbline 67
 009E           ; }
 009E           ; //主函数
 009E           ; void main(void)
 009E           ; {
 009E                   .dbline 68
 009E           ;  init_devices();
 009E F5DF              xcall _init_devices
 00A0 01C0              xjmp L23
 00A2           L22:
 00A2                   .dbline 71
 00A2                   .dbline 72
 00A2 0000              nop
 00A4                   .dbline 73
 00A4           L23:
 00A4                   .dbline 70
 00A4 FECF              xjmp L22
 00A6           X1:
 00A6                   .dbline -2
 00A6           L21:
 00A6                   .dbline 0 ; func end
 00A6 0895              ret
 00A8                   .dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -