USART结构
USART寄存器
一、UDR寄存器。该寄存器是USART模块的I/O数据寄存器,用于保存接收或待发送的数据。
USART模块的发送数据缓冲器和接收数据缓冲器共享相同的I/O地址,统称为I/O数据寄存器UDR。当我们将数据写入UDR时,数据会写入到发送数据缓冲寄存器中,而当读取UDR时,保存于接收数据缓冲寄存器中的内容将会被读取。
二、UCSRA寄存器。包含了多少USART的控制和状态位。
Bit7 RXC:USART接收结束标志位。当接收缓冲器中有未读出的数据时,RXC位置1,否则清0。当接收器禁止时,接收缓冲器被刷新,RXC位硬件清0。RXC标志位置1时,如果该中断得到允许,单片机将产生接收结束中断并执行相应的中断服务程序。
Bit6 TXC:USART发送结束标志位。当发送移位缓冲器中的数据被送出,而且发送缓冲器UDR同样为空时置1。如果该中断得到允许,单片机将产生发送结束中断并执行相应的中断服务程序。发送结束中断服务程序被执行后,TXC标志位自动清0,也可对TXC位写1的方式将该位清0。
Bit5 UDRE:发送缓冲器为空标志位。当UDRE位置1时,表示发送缓冲器为空,可以写入待发送的数据。如果此中断得到允许,单片机产生数据寄存器空中断并执行相应的中断服务程序。系统复位后UDRE位硬件置1,表示发送器已就绪。
Bit4 FE:帧错误标志位。如果接收缓冲器接收到的下一个字符有帧错误,即接收缓冲器中的下一个字符的第一个停止位为0,那么FE置位1。在接收缓冲器UDR被读取之前,该位持续有效。当再次接收到停止为为1时,EF标志硬件清0。当写入USCRA寄存器时,这一位要写0。
Bit3 DOR:数据溢出标志位。当接收缓冲器已满(包含了两个数据)时,接收移位寄存器又有了新的数据,若此时USART又检测到一个新的起始位,表明又有一个新的数据等待接收,这时会发生数据举出,DOR标志位置1。在接收缓冲器UDR被读取之前,该位会持续有效。写入UCSRA寄存器时,这一位要写0。
Bit2 PE:奇偶校验错误标志位。当奇偶校验使能(UPM1=1),且接收缓冲器中所接收到的下一个字符有奇偶校验错误时UPE位置1。在接收缓冲器UDR被读取之前,该位会持续有效。写入UCSRA寄存器时,该位一定要写0。
Bit1 U2X:倍速发送使能位。在异步模式下,该位置1可将波特率分频因子从16降到8,异步通信模式传输速率加倍。使用同步操作时该位清0。
Bit0 MPCM:多处理器通信模式使能位。该位置1时启动多处理器通信模式。此时USART模块接收到的所有不包含地址信息的帧都将忽略。
三、UCSRB寄存器。该寄存器是USART模块的控制和状态寄存器,包含了多个USART的控制和状态位。
Bit7 RXCIE:接收结束中断使能位。
Bit6 TXCIE:发送结束中断使能位。
Bit5 UDRIE:发送缓冲器空中断使能位。
Bit4 RXEN:接收使能位。该位置1时启动USART接收器功能,RXD引脚的通用I/O端口功能将被USART功能所取代。RXEN位清0时关闭接收器,这会刷新接收缓冲器并使FE/DOR及PE标志失效。
Bit3 TXEN:发送使能位。该位置1时启动USART发送器功能,TXD引脚的通用I/O端口功能将被USART功能所取代。TXEN位清0后,只有等所有的数据发送完成后发送器才能够真正禁止,TXD引脚功能恢复其通用I/O功能。
Bit2 UCSZ2:字符长度设置位。UCSZ2位与UCSRC寄存器的UCSZ1:0位组合在一起,设置数据帧所包含的数据位数,具体见表15-3。
Bit1 RXB8:接收数据第8位。在9位数据模式下,RXB8保存的是接收数据第9位。读取UDR之前要首先读取RXB8,否则RXB8中的数据会丢失。
Bit0 TXB8:发送数据第8位。在9位数据模式下,TXB8保存的是发送数据第9位。写入UDR之前需要将待发送数据第9位首先写入到TXB8中。
四、UCSRC寄存器。
Bit7 URSEL:寄存器选择位。通过该位选择访问UCSRC寄存器或UBRRH寄存器。当URSEL位为0时,写入的是UBRRH寄存器。URSEL位为1时,写入的是UCSRC寄存器。
Bit6 UMSEL:USART模式选择位。该位清0时为USART异步模式,置1时为同步模式。
Bit5:4 UPM1:0:奇偶校验模式选择位。这两位用于设置奇偶校验的模式并使能奇偶校验。如果使能了奇偶校验,在发送数据时,发送器会自动产生并发送奇偶校验位。在接收数据时,对于每一个接收到的数据,接收器都会产生一奇偶值,并与接收数据的校验位进行比较,如果不匹配,那么就将USRA寄存器的PE位置1。奇偶校验模式设见表15-4。
Bit3 USBS: 停止位选择位。在发送数据时,该位清0,停止位为1位。该位置1,停止位为2位,接收数据时该位被忽略。
Bit2:1 UCSZ1:UCSZ0:字符长度选择位。这两位与UCSRB寄存器的UCSZ2结合在一起可以设置数据帧包含的数据位数,具体设置见表15-5。
Bit0 UCPOL:时钟极性选择位。在同步模式时,该位用于设置输出数据的改变和输入数据采样以及同步时钟XCK之间的关系,具体见表15-5。使用异步模式需将此位清0。
五、UBRR寄存器。该寄存器的值决定通信的波特率,下表是当晶体为16M时UBRR值。
波特率计算公式
编程实例:
初始化程序:
void usart_init(void)
{
UBRRH=0;
UBRRL=103; //16M晶体,9600bps;
UCSRA=0X00;
UCSRB=0X18;
UCSRC=0X86; //8位数据,1个停止位
}
评论列表
我要评论