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

📄 uart.lis

📁 avr单片机mega128 的串口通讯的完整程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module uart.c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\AVR_TOOL\test\uart.c
 0000                   .dbfunc e Uart0_Init _Uart0_Init fV
                        .even
 0000           _Uart0_Init::
 0000                   .dbline -1
 0000                   .dbline 19
 0000           ; //-----------------------------------------------------------
 0000           ; //程序由AVR辅助开发工具V2.1.1自动生成     
 0000           ; //MCU系统的处理器为:    ATMega128
 0000           ; //MCU系统的晶振频率:    8.0000 Mhz
 0000           ; //-----------------------------------------------------------
 0000           ; 
 0000           ; #include <iom128v.h>
 0000           ; #include "uart.h"
 0000           ; #include "delay.h"
 0000           ; 
 0000           ; 
 0000           ; //-----------------------------------------------------------
 0000           ; //串口0初始化子程序
 0000           ; //字符长度:8位
 0000           ; //奇偶校验:禁止
 0000           ; //通讯模式:异步
 0000           ; //-----------------------------------------------------------
 0000           ; void Uart0_Init(void)
 0000           ; {
 0000                   .dbline 20
 0000           ;     UCSR0B  =  0x00;     //disable while setting baud rate
 0000 2224              clr R2
 0002 2AB8              out 0xa,R2
 0004                   .dbline 21
 0004           ;     UCSR0A  =  0x00;     //Bit1为1则倍速发送
 0004 2BB8              out 0xb,R2
 0006                   .dbline 22
 0006           ;     UCSR0C  =  0x06;  
 0006 86E0              ldi R24,6
 0008 80939500          sts 149,R24
 000C                   .dbline 23
 000C           ;     UBRR0L  =  0x22;     //波特率:14400 Bps
 000C 82E2              ldi R24,34
 000E 89B9              out 0x9,R24
 0010                   .dbline 24
 0010           ;     UBRR0H  =  0x00;     //误差率:-0.799%
 0010 20929000          sts 144,R2
 0014                   .dbline 25
 0014           ;     UCSR0B  =  0x18;  
 0014 88E1              ldi R24,24
 0016 8AB9              out 0xa,R24
 0018                   .dbline 27
 0018           ; //初始化RS485通讯的流控制引脚
 0018           ;     RS485_RD0_PORT|= RS485_RD0_BIT;
 0018 1A9A              sbi 0x3,2
 001A                   .dbline 28
 001A           ;     RS485_RD0_DDR|= RS485_RD0_BIT;
 001A 129A              sbi 0x2,2
 001C                   .dbline 29
 001C           ;     RS485_RD0_L;
 001C 1A9A              sbi 0x3,2
 001E                   .dbline -2
 001E           L1:
 001E                   .dbline 0 ; func end
 001E 0895              ret
 0020                   .dbend
 0020                   .dbfunc e Getchar0 _Getchar0 fc
                        .even
 0020           _Getchar0::
 0020                   .dbline -1
 0020                   .dbline 36
 0020           ; }
 0020           ; 
 0020           ; //-----------------------------------------------------------
 0020           ; //串口0接收字节子程序
 0020           ; //-----------------------------------------------------------
 0020           ; unsigned char Getchar0(void)
 0020           ; {
 0020           L3:
 0020                   .dbline 37
 0020           L4:
 0020                   .dbline 37
 0020           ;  while(!(UCSR0A& (1<<RXC0)));
 0020 5F9B              sbis 0xb,7
 0022 FECF              rjmp L3
 0024                   .dbline 38
 0024           ;    return UDR0;
 0024 0CB1              in R16,0xc
 0026                   .dbline -2
 0026           L2:
 0026                   .dbline 0 ; func end
 0026 0895              ret
 0028                   .dbend
 0028                   .dbfunc e Putchar0 _Putchar0 fV
 0028           ;              c -> R20
                        .even
 0028           _Putchar0::
 0028 0E940000          xcall push_gset1
 002C 402F              mov R20,R16
 002E                   .dbline -1
 002E                   .dbline 45
 002E           ; }
 002E           ; 
 002E           ; //-----------------------------------------------------------
 002E           ; //串口0发送字节子程序
 002E           ; //-----------------------------------------------------------
 002E           ; void Putchar0(unsigned char c)
 002E           ; {
 002E                   .dbline 46
 002E           ;    RS485_RD0_H;
 002E 1A98              cbi 0x3,2
 0030           L7:
 0030                   .dbline 47
 0030           L8:
 0030                   .dbline 47
 0030           ;    while (!(UCSR0A&(1<<UDRE0)));
 0030 5D9B              sbis 0xb,5
 0032 FECF              rjmp L7
 0034                   .dbline 48
 0034           ;    UDR0=c;
 0034 4CB9              out 0xc,R20
 0036           L10:
 0036                   .dbline 49
 0036           L11:
 0036                   .dbline 49
 0036           ;    while (!(UCSR0A&(1<<UDRE0)));
 0036 5D9B              sbis 0xb,5
 0038 FECF              rjmp L10
 003A                   .dbline 50
 003A           ;    delay_nus(500);
 003A 04EF              ldi R16,500
 003C 11E0              ldi R17,1
 003E 0E940000          xcall _delay_nus
 0042                   .dbline 51
 0042           ;    RS485_RD0_L;
 0042 1A9A              sbi 0x3,2
 0044                   .dbline -2
 0044           L6:
 0044 0E940000          xcall pop_gset1
 0048                   .dbline 0 ; func end
 0048 0895              ret
 004A                   .dbsym r c 20 c
 004A                   .dbend
 004A                   .dbfunc e Putstr0 _Putstr0 fV
 004A           ;              s -> R20,R21
                        .even
 004A           _Putstr0::
 004A 0E940000          xcall push_gset1
 004E A801              movw R20,R16
 0050                   .dbline -1
 0050                   .dbline 58
 0050           ; }
 0050           ; 
 0050           ; //-----------------------------------------------------------
 0050           ; //串口0发送字符串子程序
 0050           ; //-----------------------------------------------------------
 0050           ; void Putstr0(char *s)
 0050           ; {
 0050 05C0              xjmp L15
 0052           L14:
 0052                   .dbline 60
 0052                   .dbline 61
 0052 FA01              movw R30,R20
 0054 0081              ldd R16,z+0
 0056 E8DF              xcall _Putchar0
 0058                   .dbline 62
 0058 4F5F              subi R20,255  ; offset = 1
 005A 5F4F              sbci R21,255
 005C                   .dbline 63
 005C           L15:
 005C                   .dbline 59
 005C           ;    while (*s)
 005C FA01              movw R30,R20
 005E 2080              ldd R2,z+0
 0060 2220              tst R2
 0062 B9F7              brne L14
 0064                   .dbline -2
 0064           L13:
 0064 0E940000          xcall pop_gset1
 0068                   .dbline 0 ; func end
 0068 0895              ret
 006A                   .dbsym r s 20 pc
 006A                   .dbend
 006A                   .dbfunc e Puts0 _Puts0 fV
 006A           ;              s -> R20,R21
                        .even
 006A           _Puts0::
 006A 0E940000          xcall push_gset1
 006E A801              movw R20,R16
 0070                   .dbline -1
 0070                   .dbline 70
 0070           ;    {
 0070           ;       Putchar0(*s);
 0070           ;       s++;
 0070           ;    }
 0070           ; }
 0070           ; 
 0070           ; //-----------------------------------------------------------
 0070           ; //串口0发送字符串子程序(带有换行符)
 0070           ; //-----------------------------------------------------------
 0070           ; void Puts0(char *s)
 0070           ; {
 0070 05C0              xjmp L19
 0072           L18:
 0072                   .dbline 72
 0072                   .dbline 73
 0072 FA01              movw R30,R20
 0074 0081              ldd R16,z+0
 0076 D8DF              xcall _Putchar0
 0078                   .dbline 74
 0078 4F5F              subi R20,255  ; offset = 1
 007A 5F4F              sbci R21,255
 007C                   .dbline 75
 007C           L19:
 007C                   .dbline 71
 007C           ;    while (*s)
 007C FA01              movw R30,R20
 007E 2080              ldd R2,z+0
 0080 2220              tst R2
 0082 B9F7              brne L18
 0084                   .dbline 76
 0084           ;    {
 0084           ;       Putchar0(*s);
 0084           ;       s++;
 0084           ;    }
 0084           ;    Putchar0(0x0d);   //回车换行
 0084 0DE0              ldi R16,13
 0086 D0DF              xcall _Putchar0
 0088                   .dbline 77
 0088           ;    Putchar0(0x0a);
 0088 0AE0              ldi R16,10
 008A CEDF              xcall _Putchar0
 008C                   .dbline -2
 008C           L17:
 008C 0E940000          xcall pop_gset1
 0090                   .dbline 0 ; func end
 0090 0895              ret
 0092                   .dbsym r s 20 pc

⌨️ 快捷键说明

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