通用同步 / 异步收发器 (Universal Synchronous/Asynchronous Receiver/Transmitter, USART) 模块是两个串行 I/O 模块之一 ( 另一个是 Synchronous Serial,SSP 模块 )。 USART也称为串行通讯接口(Serial Communication Interface,SCI)。 USART 可以配置为全双工异步系统,可与 CRT 终端和个人计算机等外设进行通信(RC6=TX, RC7=RX);也可配置为半双工同步系统,可与 A/D 或 D/A 集成电路,以及串行 EEPROM等外设器件进行通信。USART 可配置为以下几种工作模式:全双工异步模式;半双工同步主控模式;半双工同步从动模式为将 RC6= TX/CK 和 RC7=RX/DT 引脚配置为用于 USART,必须把 SPEN 位 (RCSTA<7>) 和相应的 TRIS位置 1。
2.1 TXSTA:发送状态和控制寄存器
bit 7 CSRC=时钟源选择位:异步模式,同步模式;1 = 主控模式 ( 由内部波特率发生器产生时钟 );0 = 从动模式 ( 由外部时钟源提供时钟信号 )。
bit 6 TX9=9 位发送使能位:1 = 选择 9 位数据发送;0 = 选择 8 位数据发送;
bit 5 TXEN= 发送使能位:1 = 允许发送;0 = 禁止发送;注 : 在 SYNC 模式下,SREN/CREN 位比 TXEN 位优先级高。
bit 4 SYNC=USART 模式选择位:1 = 同步模式;0 = 异步模式;
bit 3 未用位: 读为 ‘ 0’ 。
bit 2 BRGH=高速波特率使能位:异步模式1 = 高速,0 = 低速;同步模式,此位未用;
bit 1 TRMT=发送移位寄存器状态位:1 = TSR 空,0 = TSR 满;
bit 0 TX9D=发送数据的第 9 位:可作为奇偶校验位。
2.2 RXSTA:接受状态和控制寄存器
bit 7 SPEN=串口使能位:1=允许串口工作 ( 把 RX/DT 和 TX/CK 引脚配置为串口引脚 );0=禁止串口工作;
bit 6 RX9=9 位接收使能位:1 = 选择 9 位接收;0 = 选择 8 位接收;
bit 5 SREN= 单字节接收使能位:异步模式,同步主控模式;1 = 允许接收单字节,0 = 禁止接收单字节;在接收完成后该位被清零。同步从动模式此位未用;
bit 4 CREN=连续接收使能位:异步模式1 = 允许连续接收,0 = 禁止连续接收;同步模式1 = 允许连续接收直到 CREN 位被清零 (CREN 位比 SREN 位优先级高 ),0 = 禁止连续接收。
bit 3 未用位= 读为 ‘ 0’;
bit 2 FERR= 帧出错标志位:1=帧出错;0 = 无帧错误。 bit 1 OERR=溢出错误位:1 = 有溢出错误 ;0 = 无溢出错误。
bit 0 RX9D=接收数据的第 9 位,可作为奇偶校验位。
2.3 USART波特率发生器(Baud rate generator,BRG)
USART 有一个专用的 8 位波特率发生器 ,它支持 USART 的同步模式和异步模式。 SPBRG 寄存器控制着独立的 8 位定时器的周期。 在异步方式下, BRGH(TXSTA<2>) 位也用来控制波特率。在同步模式下不使用 BRGH(高速波特率发生器)。
讨论1:主控模式下(内部时钟),不同USART工作模式波特率计算。
异步低速9600波特率下,我们来研究一下波特率的偏差:
这个例子,告诉我们一个事实:即使对于低波特率时钟,使用高波特率公式 ( BRGH = 1)也是有利的,因为公式 FOSC / (16(X +1)) 在某些情况下可以减小波特率误差。2.4 与波特率发生器BRG相关的寄存器
异步模式下的波特率计算结果参考如下:
当然,这只是PIC官方提供给我们的参考;实际应用中,我更主张自己根据实际情况计算波特率。这并不复杂!