当前位置:博文吧 > 实用文 > 实用范文 > 论文 > 基于多单片机的串口扩展设计论文
手机版

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

来源:博文吧 阅读:2.81W 次

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

本文链接:https://www.bowenba.com/shiyongfanwen/lunwen/6ep22n.html

Copyright © 2024. 博文吧 All right reserved. 苏ICP备20210251号-2

文字美图素材,版权属于原作者。部分文章内容由网友提供推送时因种种原因未能与原作者联系上,若涉及版权问题,敬请原作者联系我们,立即处理。