对于USART,下面从寄存器和相关电路两方面来进行说明。
ATmega88V里只有一个USART,其主要特点为:全双工操作,异步或同步操作,有高精度的波特率发生器及3个独立中断等。USART的方框图如图4.1所示。从图4.1中可以看出它包含4部分,分别是时钟发生器、发送器、接收器和控制及状态寄存器。时钟发生器主要用于对USART的时钟进行设置,与其相关的寄存器是波特率寄存器。发送器与接收器共同使用同一个数据寄存器UDRn,但它们都有各自的移位寄存器,用来处理发送或接收的数据。而控制及状态部分主要是采用3个状态和控制寄存器对整个USART进行设置的。
由上述表述可知,USART包含6个寄存器,分别是USART数据寄存器(UDRn)、USART状态和控制寄存器A/B/C(UCSRnA/B/C)和USART波特率寄存器(UBRRL/H)。
(1) USART数据寄存器(UDRn):UDRn为发送/接收数据缓冲寄存器。当设置为接收模式时,从UDRn读取接收到的数据;而设置为发送模式时,将要发送的数据赋予UDRn即可。
(2) USART状态和控制寄存器A/B/C(UCSRnA/B/C):这3个寄存器用于对USART工作在哪种模式下进行设置并提供状态的读取。
(3) USART波特率寄存器(UBRRL/H,也即UBRRn):UBRRL/H用于对USART的波特率进行设置,在ATmega88V手册中也提供了一些参考值。在指定晶振下,对应波特率,该寄存器有对应的参考值。选择晶体时,一般情况下应使用推荐的晶体。
虽然这几个寄存器很简单,但它们的每个位都需要按照需求来设置,一般使用的是7.3728MHz的晶体,其波特率设置为9600bps。
图4.1 USART的方框图
如果要将USART输出的数据显示在计算机上,需要增加一个RS-232及一些相关器件。这是因为USART输出的是TTL电平,而计算机需要的CMOS电平,需要一个转换器件——RS-232对电平进行转换,如图4.2所示。该连接图在很多单片机中都是可以使用的,只是需要将USART的输出/输入端口对应好。
图4.2 RS-232外围电路图
需要注意的是:运用该电路时,应先下载一个RS-232的手册看一下,以对其外围电路有一定的了解。
使用USART传输数据时,需要设置具体的传输速率或通信速率。如果收/发两设备设置的通信速率不一致,则它们不能正常通信。如表4.1所示是在通用振荡器频率下设置UBRRn的例子。
表4.1 在通用振荡器频率下设置UBRRn的例子
注:[1]当波特率最大时,UBRRn=0,误差=0.0%。
RS-232和RS-485的比较如下。
MCU的数据传输到PC时使用的是RS-232,传输到其他MCU时使用的是RS-485或直接连接(如果在同一个板上,MCU的供电电压一致,则可以直接连接);RS-485是一个半双工器件,即同一时间只能发送或接收,两者不可同时进行,而RS-232是一个全双工器件。
RS-485在很多工业设备中被广泛应用。RS-485芯片如图4.3所示,其中RO/DI接单片机,A/B线上挂载多个设备。每次只有一个设备向A/B总线发送数据,其他设备都在接收,若数据格式正确,则对应的设备就进行相应的操作。
图4.3 RS-485芯片
多设备挂接485总线的示意图如图4.4所示。
图4.4 多设备挂接485总线的示意图