摘 要: 本文介绍一种新型的
单片机串口扩展
芯片的功能特性以及与单片机
接口的应用。
关键词: 单片机; 多串口通信
在设计由多个单片机组成的数据采集电路时,一般要用多个串口在各个单片机之间进行数据通信。为了解决单片机扩展多个串口的问题,以前大多采用多片AT89C2051来实现多串口通信。每个AT89C2051用并口与上位机连接,再通过AT89C2051的串口与下位机串口连接。这种电路设计,单片机编程比较复杂,整个电路的调试也比较麻烦,可靠性不是很高。一种新开发的SP2328串口扩展芯片很好的解决了上述问题。
SP2328是成都视普科技公司的串行口扩展专用芯片,能将普通单片机(如:AT89C2051、AT89C51等)的一个串口(UART)扩展为三个串口。它主要解决了大多数8位、16位以及32位单片机UART串口太少的问题,扩大了单片机的使用范围。同时,SP2328串行口扩展专用芯片也很好地解决了许多在使用双串口的单片机时,串口复杂的配置问题,能大大缩短开发周期,降低开发成本以及生产成本。
SP2328的功能特性
SP2328有四个UART串口,其中包括一个母串口和三个子串口。母串口和所有子串口都为全双工工作模式,所有串口允许同时接收、发送串行数据。串口0~串口2为子串口,每个子串口的工作速率为75bps~4800bps。串口3为母串口,它的数据传输速率是子串口的4倍。串口3接收到串行数据后,SP2328芯片根据收到的地址信号,把数据通过相应的子串口发送出去。子串口收到串行数据后,把数据通过串口3发送出去,同时给出相应的子串口地址。串口0~串口2的波特率的设置很简单,不需要用软件设置,只要改变输入时钟的频率即可。波特率按以下公式计算:
K=2400*f(osc)/8.0(bps)
其中f(osc)<=16.0MHZ
SP2328的直流工作电压为2.4V~5.5V,典型电流为3.7mA,带有节电模式。
ADRI0、ADRI1 为串口3接收下行数据时的串口地址线,“00”、“01”、“10”分别对应:串口0、串口1、串口2的地址;“11”为串口3的地址。当上位机要向某一个子串口连接的下位机发送数据时,首先要将ADRI0、ADRI1置成响应的地址状态,再将数据发送到串口3即可。
ADRO0、ADRO1 为串口3发送上行数据时的串口地址线,“00”、“01”、“10”分别对应:串口0、串口1、串口2的地址。当上位机的串口接收到串口3送来的数据时,立刻读取地址线ADRO0、ADRO1的状态,根据地址线ADRO0、ADRO1的状态即可判断出接收到的数据是由哪个串口上传的。
SP2328与单片机的接口举例
单片机数据采集电路中SP2328与单片机的接口电路。AT89C51的串口与SP2328的串口3连接,P1.0、P1.1、P1.2、P1.3分别连接ADRI0、ADRI1、ADRO0、ADRO1,作为设置和读取子串口的地址用。三个子串口分别连到三个下位机的串口。串口0、串口1、串口2的波特率为:
K=(2400*16)/8=4800(bps)
串口3的波特率:
K3=4*K=4*4800=19200(bps)
AT89C51串口的波特率也必须设置成19200bps。
由于SP2328通电后自动进入工作状态,不需要用程序设置,所以编写串口程序比较简单方便。
需要注意的问题
在选择
晶振频率时,要严格使单片机串口的波特率与SP2328的波特率相一致,晶振频率要稳定,否则容易使SP2328芯片接收到的数据和发送出去的数据都是错误的。
由于母串口3的速度是其它子串口的4倍,即子串口发送一个字节的时间母串口可以发送4个字节,所以如果串口3向子串口发送一个字节后,串口3没有向其他子串口发送另外的4个字节,而立即再向原子串口发送数据,子串口的数据将溢出。因此,必须在它们之间加上4个以上的字节用于延时(母串口向其他另外的子串口发送数据,相当于延时一个字节)。
上位机收到母串口上行的数据后要及时读取上行数据的地址信息(上行数据的地址信息可以在上行数据的停止位结束后保持6bit的时间长度)。使上位机能准确收到子串口的串行数据。
上位机向母串口发送数据前,先要向SP2328发送子串口的地址信号。
结语
采用SP2328芯片扩展单片机串口,为单片机的多串口通信提供了一个很好的解决方案。它与使用双串口单片机和使用多片AT89C2051扩展串口等方案相比,编程简单、可靠性高、成本低。