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

📄 uart.lis

📁 avr基础程序大全
💻 LIS
字号:
                        .module UART.c
                        .area text(rom, con, rel)
 0000                   .dbfile UART.c
                        .area vector(rom, abs)
                        .org 44
 002C 0C944900          jmp _uart_rx
                        .area text(rom, con, rel)
 0000                   .dbfile UART.c
                        .area data(ram, con, rel)
 0000                   .dbfile UART.c
 0000           _flag::
 0000                   .blkb 1
                        .area idata
 0000 00                .byte 0
                        .area data(ram, con, rel)
 0001                   .dbfile UART.c
 0001                   .dbfile E:\AVR自编程序\11实验板\16串口通信\UART.c
 0001                   .dbsym e flag _flag c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\AVR自编程序\11实验板\16串口通信\UART.c
 0000                   .dbfunc e delay _delay fV
 0000           ;              i -> R20,R21
 0000           ;              j -> R22,R23
 0000           ;             ms -> R16,R17
                        .even
 0000           _delay::
 0000 0E940000          xcall push_xgsetF000
 0004                   .dbline -1
 0004                   .dbline 10
 0004           ; #include <iom16v.h>
 0004           ; #include <macros.h>
 0004           ; #define  uchar unsigned char
 0004           ; #define  uint  unsigned int
 0004           ; 
 0004           ; #define  mclk   8000000
 0004           ; #pragma interrupt_handler uart_rx:12
 0004           ; uchar rdata,flag=0;
 0004           ; void delay(uint ms)
 0004           ; {
 0004                   .dbline 12
 0004           ;         uint i,j;
 0004           ;       for(i=0;i<ms;i++)
 0004 4427              clr R20
 0006 5527              clr R21
 0008 0BC0              xjmp L5
 000A           L2:
 000A                   .dbline 13
 000A           ;          {
 000A                   .dbline 14
 000A           ;          for(j=0;j<1141;j++);
 000A 6627              clr R22
 000C 7727              clr R23
 000E 02C0              xjmp L9
 0010           L6:
 0010                   .dbline 14
 0010           L7:
 0010                   .dbline 14
 0010 6F5F              subi R22,255  ; offset = 1
 0012 7F4F              sbci R23,255
 0014           L9:
 0014                   .dbline 14
 0014 6537              cpi R22,117
 0016 E4E0              ldi R30,4
 0018 7E07              cpc R23,R30
 001A D0F3              brlo L6
 001C           X0:
 001C                   .dbline 15
 001C           ;        }
 001C           L3:
 001C                   .dbline 12
 001C 4F5F              subi R20,255  ; offset = 1
 001E 5F4F              sbci R21,255
 0020           L5:
 0020                   .dbline 12
 0020 4017              cp R20,R16
 0022 5107              cpc R21,R17
 0024 90F3              brlo L2
 0026           X1:
 0026                   .dbline -2
 0026           L1:
 0026                   .dbline 0 ; func end
 0026 0C940000          xjmp pop_xgsetF000
 002A                   .dbsym r i 20 i
 002A                   .dbsym r j 22 i
 002A                   .dbsym r ms 16 i
 002A                   .dbend
 002A                   .dbfunc e uart_init _uart_init fV
 002A           ;           baud -> R10,R11
                        .even
 002A           _uart_init::
 002A 0E940000          xcall push_xgsetF00C
 002E 5801              movw R10,R16
 0030                   .dbline -1
 0030                   .dbline 19
 0030           ; }
 0030           ; 
 0030           ; void uart_init(uint baud)
 0030           ; {
 0030                   .dbline 20
 0030           ;     UCSRB=0x00; 
 0030 2224              clr R2
 0032 2AB8              out 0xa,R2
 0034                   .dbline 21
 0034           ;    UCSRA=0x00;                    //控制寄存器清零
 0034 2BB8              out 0xb,R2
 0036                   .dbline 22
 0036           ;    UCSRC=(1<<URSEL)|(0<<UPM0)|(3<<UCSZ0);   
 0036 86E8              ldi R24,134
 0038 80BD              out 0x20,R24
 003A                   .dbline 25
 003A           ;                                                         //选择UCSRC,异步模式,禁止                        
 003A           ;                                                      //   校验,1位停止位,8位数据位
 003A           ;    baud=mclk/16/baud-1        ;   //波特率最大为65K
 003A 1501              movw R2,R10
 003C 4424              clr R4
 003E 5524              clr R5
 0040 40E2              ldi R20,32
 0042 51EA              ldi R21,161
 0044 67E0              ldi R22,7
 0046 70E0              ldi R23,0
 0048 5A92              st -y,R5
 004A 4A92              st -y,R4
 004C 3A92              st -y,R3
 004E 2A92              st -y,R2
 0050 8A01              movw R16,R20
 0052 9B01              movw R18,R22
 0054 0E940000          xcall div32s
 0058 41E0              ldi R20,1
 005A 50E0              ldi R21,0
 005C 60E0              ldi R22,0
 005E 70E0              ldi R23,0
 0060 1801              movw R2,R16
 0062 2901              movw R4,R18
 0064 241A              sub R2,R20
 0066 350A              sbc R3,R21
 0068 460A              sbc R4,R22
 006A 570A              sbc R5,R23
 006C 5101              movw R10,R2
 006E                   .dbline 26
 006E           ;    UBRRL=baud;                                                  
 006E 29B8              out 0x9,R2
 0070                   .dbline 27
 0070           ;    UBRRH=baud>>8;                //设置波特率
 0070 232C              mov R2,R3
 0072 3324              clr R3
 0074 20BC              out 0x20,R2
 0076                   .dbline 28
 0076           ;    UCSRB=(1<<TXEN)|(1<<RXEN)|(1<<RXCIE); 
 0076 88E9              ldi R24,152
 0078 8AB9              out 0xa,R24
 007A                   .dbline 30
 007A           ;                                                        //接收、发送使能,接收中断使能
 007A           ;    SREG=BIT(7);                       //全局中断开放
 007A 80E8              ldi R24,128
 007C 8FBF              out 0x3f,R24
 007E                   .dbline 31
 007E           ;    DDRD|=0X02;                        //配置TX为输出(很重要)
 007E 899A              sbi 0x11,1
 0080                   .dbline -2
 0080           L10:
 0080                   .dbline 0 ; func end
 0080 0C940000          xjmp pop_xgsetF00C
 0084                   .dbsym r baud 10 i
 0084                   .dbend
 0084                   .dbfunc e uart_sendB _uart_sendB fV
 0084           ;           data -> R16
                        .even
 0084           _uart_sendB::
 0084                   .dbline -1
 0084                   .dbline 35
 0084           ; 
 0084           ; }
 0084           ; void uart_sendB(uchar data)
 0084           ; {
 0084           L12:
 0084                   .dbline 36
 0084           ;    while(!(UCSRA&(BIT(UDRE)))) ;
 0084           L13:
 0084                   .dbline 36
 0084 5D9B              sbis 0xb,5
 0086 FECF              rjmp L12
 0088           X2:
 0088                   .dbline 37
 0088           ;    UDR=data;
 0088 0CB9              out 0xc,R16
 008A           L15:
 008A                   .dbline 38
 008A           ;    while(!(UCSRA&(BIT(TXC))));
 008A           L16:
 008A                   .dbline 38
 008A 5E9B              sbis 0xb,6
 008C FECF              rjmp L15
 008E           X3:
 008E                   .dbline 39
 008E           ;    UCSRA|=BIT(TXC);
 008E 5E9A              sbi 0xb,6
 0090                   .dbline -2
 0090           L11:
 0090                   .dbline 0 ; func end
 0090 0895              ret
 0092                   .dbsym r data 16 c
 0092                   .dbend
 0092                   .dbfunc e uart_rx _uart_rx fV
                        .even
 0092           _uart_rx::
 0092 2A92              st -y,R2
 0094 8A93              st -y,R24
 0096 2FB6              IN R2,63
 0098 2A92              st -y,R2
 009A                   .dbline -1
 009A                   .dbline 42
 009A           ; }
 009A           ; void uart_rx()
 009A           ; {
 009A                   .dbline 43
 009A           ;     UCSRB&=~BIT(RXCIE);
 009A 5798              cbi 0xa,7
 009C                   .dbline 44
 009C           ;       rdata=UDR;
 009C 2CB0              in R2,0xc
 009E 20920000          sts _rdata,R2
 00A2                   .dbline 45
 00A2           ;       flag=1;
 00A2 81E0              ldi R24,1
 00A4 80930000          sts _flag,R24
 00A8                   .dbline 46
 00A8           ;       UCSRB|=BIT(RXCIE);
 00A8 579A              sbi 0xa,7
 00AA                   .dbline -2
 00AA           L18:
 00AA                   .dbline 0 ; func end
 00AA 2990              ld R2,y+
 00AC 2FBE              OUT 63,R2
 00AE 8991              ld R24,y+
 00B0 2990              ld R2,y+
 00B2 1895              reti
 00B4                   .dbend
 00B4                   .dbfunc e main _main fV
                        .even
 00B4           _main::
 00B4                   .dbline -1
 00B4                   .dbline 49
 00B4           ; }
 00B4           ; void main()
 00B4           ; {
 00B4                   .dbline 52
 00B4           ;     //uchar i=4;
 00B4           ;       //uchar j='a';
 00B4           ;     uart_init(19200);
 00B4 00E0              ldi R16,19200
 00B6 1BE4              ldi R17,75
 00B8 B8DF              xcall _uart_init
 00BA 0AC0              xjmp L21
 00BC           L20:
 00BC                   .dbline 54
 00BC           ;       while(1)
 00BC           ;       {
 00BC                   .dbline 55
 00BC           ;          if(flag)
 00BC 20900000          lds R2,_flag
 00C0 2220              tst R2
 00C2 31F0              breq L23
 00C4           X4:
 00C4                   .dbline 56
 00C4           ;          {
 00C4                   .dbline 57
 00C4           ;             uart_sendB(rdata);
 00C4 00910000          lds R16,_rdata
 00C8 DDDF              xcall _uart_sendB
 00CA                   .dbline 58
 00CA           ;                 flag=0;
 00CA 2224              clr R2
 00CC 20920000          sts _flag,R2
 00D0                   .dbline 59
 00D0           ;          }
 00D0           L23:
 00D0                   .dbline 60
 00D0           ;       }
 00D0           L21:
 00D0                   .dbline 53
 00D0 F5CF              xjmp L20
 00D2           X5:
 00D2                   .dbline -2
 00D2           L19:
 00D2                   .dbline 0 ; func end
 00D2 0895              ret
 00D4                   .dbend
                        .area bss(ram, con, rel)
 0000                   .dbfile E:\AVR自编程序\11实验板\16串口通信\UART.c
 0000           _rdata::
 0000                   .blkb 1
 0001                   .dbsym e rdata _rdata c
 0001           ;       
 0001           ; }

⌨️ 快捷键说明

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