mega128(串口初始化)
在本篇文章中,我们将深入探讨基于Atmega128微控制器的串口初始化过程,特别是针对USART0(通用同步/异步收发器0)的相关配置。Atmega128这款微控制器内置了两个串口模块:USART0与USART1。本文将以USART0为例,详细介绍其初始化步骤以及涉及的关键寄存器。 ### 一、USART0的基本概念 #### 1.1 传输模式的选择 在初始化阶段,我们需要选择USART0的工作模式:同步还是异步。默认情况下,USART0工作于异步模式。可以通过设置USART控制和状态寄存器UCSR0C中的UMSEL位来选择传输模式。当UMSEL为0时,表示选择异步模式;若UMSEL为1,则进入同步模式。 #### 1.2 波特率的设置 为了确保通信双方能够正确地交换数据,需要设置相同的波特率。波特率可以通过设置波特率发生寄存器UBRR0来确定。UBRR0是一个16位的寄存器,可以分为UBRR0H(高8位)和UBRR0L(低8位)。此外,UCSR0A寄存器中的波特率加倍位UX2也会影响波特率的计算。当UX2为1时,所设置的波特率将翻倍。 #### 1.3 传输帧格式的设置 默认情况下,USART0采用的是8位数据位和1位停止位的数据格式。这可以通过UCSR0C寄存器中的相关位进行设置。 #### 1.4 发送接收的使能与中断 USART0的操作可以通过设置UCSR0B寄存器来实现发送接收的使能以及是否启用中断功能。如果选择了使用中断的方式,那么在初始化之前必须先关闭中断。 ### 二、USART0寄存器详解 #### 2.1 UCSR0A寄存器 - **Bit1-U2X0**:波特率加倍位,当此位置1时,波特率加倍。 - **Bit6-UDRE0**:用于指示UDR0寄存器是否准备好接收新的数据。 #### 2.2 UCSR0B寄存器 - **Bit7-RXCIE0**:接收完成中断使能位。 - **Bit6-TXCIE0**:发送完成中断使能位。 - **Bit4-RXEN0**:接收使能位。 - **Bit3-TXEN0**:发送使能位。 #### 2.3 UCSR0C寄存器 - **Bit6-UMSEL0**:USART0模式选择位,0表示异步模式,1表示同步模式。 - **Bit5-4-UPM01**:校验位设置,00表示无校验,01表示奇校验,10表示偶校验。 - **Bit3-USBS0**:停止位选择,0表示1位停止位,1表示2位停止位。 - **Bit2-1-UCSZ01**:数据位长度设置,00表示5位数据,01表示6位数据,10表示7位数据,11表示8位数据。 #### 2.4 UBRR0寄存器 UBRR0寄存器由UBRR0H和UBRR0L组成,用于设置波特率。具体计算公式如下: - 当U2X0=0时(即异步模式下): \[ UBRR0L=(F_{CPU}/BAUDRATE/16-1)\%256\\ UBRR0H=(F_{CPU}/BAUDRATE/16-1)/256 \] - 当U2X0=1时(即波特率加倍时): \[ UBRR0L=(F_{CPU}/BAUDRATE/8-1)\%256\\ UBRR0H=(F_{CPU}/BAUDRATE/8-1)/256 \] ### 三、USART0初始化示例 接下来,我们来看一个具体的初始化示例,该示例展示了如何配置USART0以9600bps的波特率进行通信,并且开启发送和接收功能。 ```c void uart_init(void) { UCSR0B = 0x00; // 禁用USART0,以防在设置波特率时出现问题 UCSR0A = 0x00; // 设置波特率加倍位U2X为0 UCSR0C = 0x06; // 设置异步模式,无校验位,1位停止位,8位数据位 UBRR0L = 103; // 设置波特率为9600bps (假设F_CPU=16MHz) UBRR0H = 0x00; // 计算得到的高8位值为0 UCSR0B = 0x98; // 启用接收和发送功能,同时使能接收中断 } // 发送单个字符的函数 void putchar(unsigned char c) { while (!(UCSR0A & (1 << UDRE0))); // 等待UDR0寄存器准备好接收新数据 UDR0 = c; } // 发送字符串的函数 void putstr(unsigned char *s) { while (*s) { putchar(*s); s++; } } // 接收单个字符的函数 unsigned char getchar(void) { while (!(UCSR0A & (1 << RXC0))); // 等待接收完成 return UDR0; } ``` ### 四、总结 通过上述介绍,我们可以看到Atmega128微控制器的USART0串口模块提供了丰富的配置选项,以便满足不同的通信需求。初始化过程中,正确配置寄存器是非常关键的一步。希望本文能够帮助读者更好地理解和掌握Atmega128串口的初始化过程及其相关寄存器的作用。
以USART0为例
串口的初始化包括:
传输模式的选择:同步还是异步,默认为异步模式,可通过选择USART控制和状态寄存器UCSR0C中的UMSEL位来选择,UMSEL为0,是异步模式.
波特率的设置:通信的双方都必须有相同的波特率,波特率可以通过设置波特率发生寄存器UBRR0来确定,UBRR0为两字节16位的寄存器,可分为 UBRR0H和UBRR0L.同时起作用的还有UCSR0A中的波特率加倍位UX2,当UX2为1时设置的波特率加倍.
传输帧格式的设置:默认是8位数据位,一位停止位
发送接受的使能与中断:通过设置UCSR0B来根据需要选择接收或发送的使能和是否使用中断,对使用中断的USART操作,初始化前要关闭中断
USART0的控制和状态寄存器有:UCSR0A,UCSR0B,UCSR0C,波特率寄存器有UBRR0,即UBRR0H和UBRR0L,数据寄存器为 UDR0
初始化:
设置波特率前,要关闭USART0的所有使用,包括使能和中断:
UCSR0B=0B00000000; //关闭USART0
设置UCSR0A:
UCSR0A能写的有Bit0,Bit1,Bit6,其他5位为状态位.我们一般使用的有Bit1-U2X0,当这一位为1时,波特率的分频因子从16降到8,能够有效的将异步通信模式的传输速率加倍,但是这一位仅对异步操作有影响,使用同步操作时应将此位清零.
UCSR0A=0B00000000; //不使用倍速发送
设置UCSR0C:
Bit6-UMSEL0:USART0的模式选择,0为异步模式,1为同步模式
Bit5:4-UPM01:0:奇偶校验模式,00禁止,01,保留,10偶校验,11,奇校验
Bit3-USBS0:停止位的选择,0停止位为1bit,1停止位为2-bits
Bit2:1-UCSZ01:0:字符长度,当UCSZ02为0时,00表示5位,01表示6位,10表示7位,11表示8位.当UCSZ02为1 时,11表示9位.(UCSZ02为UCSR0B里的一位寄存器)
UCSR0C=0B00000110 //异步模式,禁止奇偶校验,停止位为1位,数据位为8位
设置UBRR:
UBRR的设置和这些参数有关:U2X0,CPU频率,波特率
当U2X0为0时,即异步正常模式下,UBRR的计算公式:
//U2X=0时的公式计算
UBRR0L= (F_CPU/BAUDRATE/16-1)%256;
UBRR0H= (F_CPU/BAUDRATE/16-1)/256;
//U2X=1时的公式计算
//UBRRL= (F_CPU/BAUDRATE/8-1)%256;
//UBRRH= (F_CPU/BAUDRATE/8-1)/256;
- xiao3728442072014-03-11小白很有用
- 粉丝: 2
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助