基于多单片机的串口扩展设计论文
1 前言
笔者在用单片机开发一款称重仪表时,功能较多,对串口的需求很高。需要的串口数量多,至少要五个串口,包括称重传感器通信串口,电脑上位机通信串口,GIM900A 通信串口,大屏幕数码管显示的通信串口,打印模块的通信串口等。而且对串口要求稳定性高,大部分串口都要求实时双工通信。根据实际情况和产品串口需求,采用不用的方法进行串口扩展,主要用到了模拟串口和多单片机实现串口扩展。
2 串口扩展的一般方法
(1)模拟串口。模拟串口利用其他单片机引脚模拟串口收发时序进行串口扩展。这种串口扩展,缺点比较明显,通信速率慢,可靠性不高,占用CPU 资源较多。高速双工通信时一般不用此方案进行串口扩展,低速情况下可以考虑。笔者的项目中大屏幕数码管显示就用了这种方案,显示的时候只发不收,单向通信,波特率要求低,最高不过9600bps。
(2)利用专门的串口扩展芯片处理。串口扩展芯片进行串口扩展,通信稳定性高,能达到一般的串口要求。市场上的串口扩展芯片,性能不同,价格也不一样,但普遍成本较高,少则二三十元,多则七八十元,不利于产品的成本控制。串口需求较多时,一块串口扩展芯片上串口数量不足,还需要多块串口扩展芯片级联,更增加了成本。
(3)利用多串口单片机。目前市场上有多串口的单片机,很多低成本单片机都自带两个串口,比如stc12 多串口系列。用三串口及其以上的单片机成本更贵。
(4)基于多单片机的串口扩展设计。在一定成本要求下,结合目前单片机产品自身的优势,利用多单片机进行串口扩展,也是一种串口扩展的方案。一般c51 系列单片机自带双串口的只要几元钱,完全可以把单片机用来做串口扩展,而且有的单片机自带spi 通信接口,可以很方便的实现主从单片机之间的级联和通信,同时双单片机工作时,可以利用从单片机处理一定的程序,减轻主单片机的负担,达到“双核”效果。
3 基于多单片机的串口扩展设计
3.1 串口扩展系统框图
整个系统由两块单片机构成主从结构,主机完成产品的大部分功能,从机只是进行了串口扩展,扩展出了两个双工硬件串口,如果有需要,也可以分担部分主机的其他功能。两者之间通过SPI 硬件接口通信,该硬件SPI 总线是一种全双工、高速、同步的通信总线,支持主模式和从模式两种操作模式,主模式中支持高达3Mbps 的速率,完全可以完成主机和从机之间的可靠通信。主机和从机的串口通信,和一块单片机使用时的用法一样,只是先要经过SPI 传输。当需要向从机串口发数据时,先要通过主机的SPI 通信送给从机,再通过从机串口发给外围模块;当需要接收从机串口数据时,先从机接收到串口数据,从机再利用SPI 传输给主机。在进行软件开发时,只要定义好主机和从机的.SPI 通信协议,即可完成可靠的串口数据收发。
3.2 主机和从机之间的SPI 通信
主机和从机串口之间需要SPI 通信做桥梁,因此主从机之间的SPI 通信显得极其重要,必须要求高速、可靠、实时,一次SPI 采用中断完成。主机部分需要用到常用的四个函数,即主机SPI 初始化,SPI 主从机之间的数据交换,向从机发送数据,主机SPI 中断接收等。
1) 主机SPI 初始化:
SPDAT=0;
SPCTL=0xfd;
SPSTAT=0xc0;
IE2=IE2 | 0x2;
2) 主机SPI 数据交换
SPDAT = dat;
while (!(SPSTAT & SPI_SPIF));
SPSTAT = 0xc0;
return SPDAT;
3) 向从机发送字符串数据
SPCTL = 0xfd;
IE2=IE2 & 0x01;
SPISS=0;
4)SPI 接收中断函数
uchar ucRecvSpi;
SPDAT=SPDAT;
SPSTAT = 0xc0;
ucRecvSpi=SPDAT;
??//SPI 接收到的数据处理
?循环SPI 数据交换
发送字符串
SPISS=1;
SPCTL = 0xec;
IE2=IE2 | 0x3;
从机部分也需要用到主机一样的四个函数,即从机SPI 初始化,SPI 主从机之间的数据交换,向主机发送数据,从机SPI中断接收等。程序函数与主机大部分相同,只有细微区别。在从机SPI 初始化时,SPCTL 控制寄存器初值为0xec。
3.3 扩展的串口处理
从机自带的两个双工串口即是扩展出来的串口,要实现收发数据,需要用到基本的3 个函数,即从机串口初始化,从机串口向外围模块发送数据,从机中断接收数据。串口4 和串口5 函数类似,下面只列举串口4 的初始化函数部分。
1) 串口1 初始化
TMOD = 0x20;
SCON = 0x5a;
TH1 =TL1= -3;
TR1 = 1;
ES = 1; EA = 1;
2) 串口接收中断
RI = 0 ;
Buf[i]=SBUF;// 接收串口数据存入数组
if (SBUF==0x0a && Buf[i-2]==0x0d)
接收到结束符,则向主机发送串口数据。
4 结语
本文中的串口扩展方法,实用性强,成本较低,能较好的实现串口扩展,同时利用多出的单片机,可以为主CPU 分担一定的任务,提供一定的硬件资源。
【基于多单片机的串口扩展设计论文】相关文章: