基于多单片机的串口扩展设计论文

2021-04-20 论文

  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 分担一定的任务,提供一定的硬件资源。

【基于多单片机的串口扩展设计论文】相关文章:

基于单片机温控智能风扇的设计研究论文11-02

基于单片机的倒车雷达设计论文开题报告12-03

基于单片机的液位模糊控制器设计论文11-16

一种基于单片机的可控成像系统设计论文11-08

基于可扩展的网页关键信息抽取研究论文10-30

基于51单片机的盲文助读器系统设计研究论文11-01

基于多流的重传策略论文06-21

基于单片机的多用途定时器的设计分析论文11-14

简析基于单片机的多用途定时器的设计论文11-16