基于单片机的串口通信

2025-01-09

基于单片机的串口通信(精选8篇)

1.基于单片机的串口通信 篇一

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

2.基于单片机的串口通信 篇二

关键词:单片机,数据串口通信

1 并行传输与串行传输

通讯过程当中, 传输方案是通过数据线依次序进行8次传送的, 8位一个字节, 这种传输方式称为串行通信[1];第二种方法是同时使用8条数据线分别传送8位, 叫并行通信。串行通讯虽然传送的速度较慢但是串行口线间干扰小, 在远距离传送过程中速度也较高。

2 单片机的选择

2.1 保证传输可靠性

本文研究的串行通讯通道是传输数据和指令的通道。在单片机的选择上要保证有高可靠性的传输。不同的传输环境采用不同的接口标准。单片机芯片的可靠性可以保证通讯状态测试, 误码校验等实验内容。

2.2 保证通信抗干扰能力

在不超过适用范围的情况下, 通讯抗干扰能力才具有定义。虽然在某些工业测控系统中, 由于通信环境十分恶劣而采用无线通讯的方式, 但是在通信介质的选择、接口标准的选择过程中保障其抗干扰能力强, 同样可以达到保证通讯效果。

2.3 考虑通信的速度、距离

标准串行接口具备一定的电气特性, 电气特性的两个指标是在满足可靠传输的情况通讯最大速度与最大传输距离。两个指标存在线性关系, 最大通讯速度减低、通讯距离减少, 最大通讯速度增高、通讯距离增长。

3 串行通信的同步方式

3.1 异步通信方式

异步通信系统中以独立的字节传输数据, 每个独立字节的开端有一起始信号, 字节后有一个以上的终止信号。起始位到终止位的信号就为一桢数据。传输迁移的开始是从标志位到空白的迁移, 通常来说, 数据的起始位占用一位, 停止位可占用一位到两位。异步通讯用这类方式表达字符, 字符在串行传输一个一个的传送。至于外部设备与PC机的通讯的成功要求字符格式、起始位等相关参数的设定相同;波特率 (串行通信中每秒传送数据的位数) 的设置相同, 数据传送速率由波特率表示。

3.2 同步通信方式

同步通信采用将字符连续接连起来, 通过数据块的形式传输。与异步通信相同, 其数据块起始信号同样是在其前面加特殊的同步字符。而同异步通信方式不同处在于:同步通信方式的传输数据块的后面加上校检字符并不是终止信号, 是能够对通信中的错误进行校检的。而且此种方式的字符之间并无空白间隔, 因此其效率也相对来说要高, 可高达几十甚至是几百千波特。

4 基于单片机数据串口通信研究

4.1 矩阵式键盘接口技术

在按键数量比较多的情况下, 如果要减少端口占用问题, 可通过矩阵式排列加以解决。在矩阵式键盘单重, 垂直、水平线的交叉地方是经由按键连接而不是直接连通的。在键数量比较多的时候采用矩阵法做键盘是更为合理的, 矩阵式结构的键盘相比较直接法来讲也比较复杂, 因此识别要复杂些。列线一般是通过电阻来接正电源的, 然后把行线接的单片机I/O口作输出端, 列线所接口味输入。在按键没有按夏的回收, 所有的输出端就都是高电平。而行线输出的就是低电平, 按键时, 输入线就会被拉低。因此, 通过读输入线的状态就可以知道是不是有按键。

4.2 单片机显示原理

数码管静态显示的一般是其的驱动电平不会改变, 可知该数码管数值是否出现变化。动态显示是基于人眼反应迟钝, 数码管轮流会显示一段的时间, 看起来就像是几个数码管同时亮起来, 但实际上就只有一个是亮的, 其他的则是余晖。静态显示的亮度要打, 但是功耗也比较大。动态显示要弱于静态, 不过显示的位数要多。要注意的是, 动态扫描频率一般要高于50hz, 最佳则为高于60hz, 否则数码管就会闪烁。

结束语

本篇文章基于单片机, 从数据传输方式类型、单片机的特性要求、数据同步方式、矩阵式键盘接口技术与单片机显示原理等多个方面对数据串口通信进行阐述, 希望能为行业发展提供参考。

参考文献

[1]刘远义, 张锐, 刘宏洋.PC机与单片机的串口通信数据采集系统设计[J].邢台学院学报, 2013, 02:174-176.

3.基于单片机的串口通信 篇三

关键词:多路采集;51单片机;串口;协议

中图分类号:TP274.2 文献标识码:A文章编号:1007-9599(2012)01-0000-02

Multi-channel Acquisition System Based on the Serial Communication 51 MCU

Liu Peng

(College of Computer Science,Yangtze University,Jingzhou434023,China)

Abstract:This paper presents a method of the multi-channel acquisition system based on 51 MCU serial port,introduces the multi-channel acquisition system structure,and the design method of serial port circuit,a detailed description of the host and slave working process and design of serial data communication protocol.

Keywords:Multi-channel acquisition;51 MCU;serial port;protocol.

一、多路采集系统结构

多路采集系统是由上位机和各个采集节点组成,都采用RS232串行通信标准。系统采用一台单片机作为主机,各个采集结点作为从机的“一对多”数据传输方式。主机的RXD端和所有从机的TXD端相连,主机的TXD端和所有从机的RXD端相连。主机发出的信号可以被所有从机接收,从机发出的信号只能被主机接收,从机间不能相互通信。主机轮流查询从机采集的数据,通过液晶屏实时显示,并可根据设定实现异常情况报警提示等功能。作为从机的各个采集节点则是由单片机、信号采集部分和串口通讯三部分组成部分。只要选用不同的传感器和相应的信号处理电路,就可以适合不同信号的采集。

二、主、从机通讯接口设计

主、从机中都使用美国ATMEL公司生产的低电压,高性能CMOS 8位单片机AT89C51,片内含4K可反复擦写Flash,128×8bit内部RAM,32个双向I/O口线,3个16位可编程定时/计数器中断,片机自带看门狗、双数据指针,8个中断源,全双工可编程UART串行通道。由于主、从机之间通讯采用RS232串行通信标准,所以它们的通信接口部分都采用相同的硬件设计。通讯接口采用标准的RS232接口,使用MAX232进行电平转换。单片机及串口通讯电路原理图如图1所示。

二、串口通信协议设计

图2 主、从机工作流程 图1 单片机及串口通讯电路

(一)主机工作流程。主机的工作流程如图2所示。在主机初始化阶段需要完成串口设置,串口采用中断工作方式,波特率为9600,建立从机地址表,。主机接收数据采用轮循方式,当正确接收到一个从机数据后,主机再给下一从机发送数据请求帧。数据校验不正确或数据帧中数据不是有效数据,都会向从机发送请求重发帧,并将该从机当作错误节点进行处理。(二)从机工作流程。从机的工作流程如图2所示。从机初始化阶段也将串口设置为中断工作方式,波特率为9600。从机将采集数据存放在发送缓冲区,并一直处于被叫状态,当接收到主机发送的请求数据帧后或请求重发帧,才发送数据帧。只有接收到主机的确认帧后,从机才清除发送缓冲区数据,启动下一次采集。(三)串口数据通信协议。根据数据传输的需要,自行设计了串口数据通信协议,将数据组帧后发送。利用此协议发送数据时,采用请求发送/发送/确认/重发方式。即发送一数据帧,一个确认,在指定时间内没有收到确认信息,则从机重发数据帧。数据帧定义如下:

其中,帧头固定为0xABH;主、从机地址长度为一个字节,主机默认地址为0xFFH ,从机地址从0x00H顺序编码,最多有255个。采用和校验方式,保证数据正确传输。累加发送或接受的数据,当和的值大于0xFF时,将和值置0继续和运算。帧类型定义及相应帧数据格式如下表所示:

从机接收到主机发送的数据帧后判断和发送的部分程序代码如下:

void read_buffer()

{

unsigned char RECEIVE_buffer;/*得到本机编号*/

if(RI)/*清除接收中断*/

{ RI=0;

RECEIVE_buffer=SBUF;/*接收串口数据*/

if(point==0)

{ if(RECEIVE_buffer=0xAB) /*判断是否为帧首*/

{buffer[point++]=RECEIVE_buffer; } /*将接收到的数据放到接收缓冲区中*/

else

point=0;/*不是帧头,等待起始标志*/

}

else if(point==1) /*判断是否为本机地址接收的帧*/

{if(getnum==buffer[1])

{buffer[point++]=RECEIVE_buffer; } /*将接收到的数据放到接收缓冲区中*/

else

point=0; /*不是本机要接收的帧,放弃,等待起始标志*/

}

else if(point==3)/*根据帧的类型来作出相应判断*/

{ buffer[3]=RECEIVE_buffer;

if(buffer[3]==0x00)/*接收到的是请求发送数据帧*/

Com_Send(5,buffer[1]);/*该从机给主机发送数据*/

else if(buffer[3]==0x01)/*接收到的是确认帧*/

Init_Salver();/*收到确认帧,清空缓冲区*/

else if(buffer[3]==0x02) /*接收到是的请求重发数据帧*/

Com_Send(4,buffer[1]); /*重发数据帧*/

else if(buffer[3]==0x03) /*接收到的是重发的数据帧*/

buffer[point++]=RECEIVE_buffer;/*如果接收到的是重发的数据帧,从缓冲区里面读取数据*/

else if(buffer[3]==0x04)/*接收到的是数据帧*/

buffer[point++]=RECEIVE_buffer;/*同接收到重发数据帧一样,从缓冲区里面读取数据*/

}

else if(point==4)

{ buffer[4]=RECEIVE_buffer; } /*读取发送的数据帧的长度*/

else if(point>4 && point

{ buffer[point++]=RECEIVE_buffer;

unsigned char num=Sum_checkdata(RECEIVE_buffer); }

/*对接收到的数据进行校验*/

else if(point==j+4)/*接收到校验位*/

{buffer[point++]=RECEIVE_buffer;

if(buffer[j+4]!=num) /*如果接收到校验值和本机对数据进行校验

Com_send(3,buffer[2]); 的值不相等,发送请求重发数据帧*/

else

Com_send(1,buffer[2]+0x01); /*向下一从机发送请求发送数据帧*/

}

else

point=0;/*等待接收其始标志*/

}

}

三、结束语

本设计利用51单片机的串口连接主机和多个采集节点,使用自行设计的串口数据通信协议,实现了“一对多”的数据传输。整个系统结构简单、可靠性高,可任意扩充采集节点数量,实际运行效果较好,具有一定的实用价值。

参考文献:

[1]戴佳.51单片机C语言应用程序设计实例精讲(第二版)[M].电子工业出版社,2008

[2]穆兰.单片微型计算机原理及接口技术[M].机械工业出版社,1996

[3]刘辉.基于8051单片机的数据采集与通信接口设计[J].软件导刊.2008(12)

4.基于单片机的串口通信 篇四

串口是计算机上非常通用的设备通信协议, 大多数计算机包含两个基于RS232的串口。串口同时也是仪器仪表设备通用的通信协议, 很多GPIB兼容的设备也带有RS-232口。同时, 串口通信协议也可以用于获取远程采集设备的数据。

串口按位 (bit) 发送和接收字节, 采用异步传输方式, 能够实现远距离通信。典型的串口用于ASCII码字符的传输。通信使用3根线完成:地线、发送、接收。串口通信最重要的参数是波特率、数据位、停止位和奇偶校验, 对于两个进行通信的端口, 这些参数必须匹配。一个数据帧以起始位开始, 紧接着是数据字的最低位。数据字最多可以有9个数据位, 以数据的最高位结束。如果使用校验位, 校验位将紧接着数据位, 最后是结束位。当一个完整的数据帧传输后, 可以立即传输下一个新的数据帧, 或使传输线处于空闲状态。

2 基于PC机和单片机的串口通信系统总体设计

PC机与单片机的串口通信系统框图如图1所示, 主要包括单片机、串口通信电路、PC机串口通信软件和单片机的外围电路。其中单片机是电路系统的核心, 负责接收上位机相关指令, 并控制电路的工作状态。PC机串口通信软件用于向下位机发送控制命令, 并接受下位机数据, 进而测试系统性能。串口通信电路是连接下位机与PC机的桥梁, 是二者进行串口通信的基础。外围电路包括了单片机的复位电路、程序下载接口电路等。

3 系统电路设计

所设计的基于PC机与单片机的串口通信系统电路如图2所示, 主要包括单片机、串口通信电路、ISP程序下载接口电路和系统复位电路。

本电路基于RS-232接口标准, 使用DB-9连接器, 采用AVR单片机的通用同步/异步串行接收/发器USART (Universal Synchronous/Asynchronous Receiver/Transmitter) 进行串口通信电路系统的设计。USART是一个高度灵活的串行通讯设备, 具有全双工操作、异步或同步操作、高精度的波特率发生器、数据过速检测、帧错误检测、噪声滤波、多处理器通讯模式、倍速异步通讯模式、三个独立的中断等特点。

由于单片机输出的TTL电平与PC机的RS-232串口电平的电气特性不匹配。为了使单片机能与PC机正常通信, 采用美信公司的MAX232芯片进行电平转换。MAX232是专门为电脑的RS-232标准串口设计的接口芯片, 功能比较强大。MAX232芯片与计算机连接的端口中有三个驱动端和五个接收端, 因此可以同时进行多路通信。另外MAX232芯片的传输速率最高可以达到235kbps。在所设计的串口通信电路系统中, 单片机的数据通过RXD、TXD与MAX3232相连, 经MAX3232完成电平转换后成为RXD1、TXD1信号, 再通过串口线与主机相连。

4 上位机测试软件设计

本文基于Visual C++平台下的MSComm (Microsoft Communications Control) 控件设计串口通信测试软件。MSComm是Microsoft公司提供的简化Windows下串行通信编程的Active X控件, 它为应用程序提供了通过串行接口收发数据的简便方法。

MSComm提供了两种处理通信问题的方法, 事件驱动法和查询法。在使用事件驱动法设计程序时, 每当有新字符到达、端口状态改变或发生错误时, MSComm控件将触发On Comm事件, 而应用程序在捕获该事件后, 通过检查MSComm控件的Comm Event属性可以获知所发生的事件或错误, 从而采取相应的操作, 这种方法的优点是程序响应及时, 可靠性高。查询法适合于较小的应用程序, 每当应用程序执行完某一串行口操作后, 将不断检查MSComm控件的Comm Event属性, 以检查执行结果或某一事件是否发生。

MSComm控件有很多重要的属性: (1) Comm Port属性:设置并返回通信端口号; (2) Settings属性:设置并返回数据传输率、奇偶校验、数据位、停止位。Settings属性的缺省值是:“9600, N, 8, 1”; (3) Port Open属性:设置或返回串口状态, 值为TURE时打开, 值为FALSE时关闭; (4) Input属性:从接收缓冲区读取数据, 类型为VARIANT; (5) Input Mode属性:读取或设置从接收缓冲区读取数据的格式; (6) In Buffer Count属性:读取接收缓冲区中的字节数; (7) In Buffer Size属性:读取或设置接收缓冲区的大小; (8) Output属性:向发送缓冲区写入数据; (9) Out Buffer Count属性:读取发送缓冲区中的字节数; (10) Out Buffer Size属性:读取或设置接收缓冲区的大小; (11) RThreshold属性:设置并返回要接收的字符数; (12) Comm Event属性:读取或设置串口事件。

根据通用串口传输协议, 并结合系统对数据通信速率等参数的要求, 选定串口通信的典型参数:波特率, 9600;数据位, 8;停止位, 1;校验位, 无;流控制, 无。结合MSComm控件的属性特点并采用事件驱动法设计串口通信程序, 程序流程图如图3所示。

串口初始化程序设计如下:

5 系统测试

基于所设计的串口通信电路系统和串口通信测试软件, 搭建实验平台, 进行系统测试。设置串口参数, 并向下位机发送控制命令, 如图4所示;下位机开始工作, 并周期性向上位机发送数据, 在所设计的测试界面上进行显示, 如图5所示。通过测试, 该系统工作稳定, PC机与单片机之间能够进行正常的串口通信, 系统电路在测试软件发出的控制命令作用下可以正常工作, 测试软件能够对系统进行有效控制并能实时显示实验数据。

6 结束语

本文深入研究了串口通信原理, 设计了基于PC机和单片机的串口通信系统, 基于AVR单片机完成了系统硬件电路的设计, 基于Visual C++平台设计了串口通信测试软件, 并对所设计的电路及软件进行联合调试, 经过测试, 该系统工作稳定、可靠, 达到了串口通信系统设计要求, 为PC机与单片机构成的测控系统提供了一套完整的串口通信解决方案。

参考文献

[1]崔寅生.基于多串口通信的实时温度采集系统设计[J].微计算机信息, 2009 (34) .

[2]曾洁, 贾世杰, 陈少华.基于串口通信方式实现对工控微处理器的代码下载与调试[J].化工自动化及仪表, 2009 (1) .

[3]唐姗姗, 曹立军.工程中的串口通信设计[J].信息通信, 2009 (5) .

[4]朱洪波.Visual C++6.0完全自学宝典[M].北京:清华大学出版社, 2008.

[5]李长林, 高洁.Visual C++串口通信技术与典型实例[M].北京:清华大学出版社, 2006.

5.单片机多串口通讯技术及其应用 篇五

【关键词】单片机;多串口;通讯技术;应用

0.引言

单片机多串口通讯技术是一种基于单片机单串口基础之上而进行扩展的一种通讯技术。其以独具的高性能和高性价比优势,得到了几乎所有智能化产品的青睐。在目前的智能化产品的应用中,可以将单片机分为两类,一类是应用在移动通讯等设备中的专用单片机,另一类是能够在各类设备中应用的通用单片机,其中MCS-51就是通用单片机。随着科学技术的日新月异,信息技术的水平也不断提高,传统的单串口单片机已经不能满足计算机信息技术的发展要求,从而限制了它们在计算机信息技术中的应用。本文通过对多串口单片机的深入理解,并对单片机多串口通讯技术和应用进行了深入的探讨。

1.单片机串口扩展设计

1.1单片机串口扩展的硬件总体设计

单片机串口扩展的硬件总体设计单片机串口扩展的硬件总体设计单片机串口扩展的硬件总体设计单片机与PC机或外设的串行通信一般采用RS232/RS422/RS485总线标准接口。为保证通信可靠,在选择接口时必须注意通信的速率、通信距离、抗干扰能力、电平匹配和通信方式。本文为了解决在单片机串行通信时遇到的串口问题,以MCS51系列单片机8751为例,进行串口扩展,包括通过通信接口芯片8251再扩展一个独立串口,通过16×1的多路切换器CD4067实现一点对多点分时串口通信,以及通过电平转换器MAX232,MAX488,MAX485实现单片机与不同类型接口源供电,驱动能力强。MAX232芯片内置两个TTL到RS232和两个RS232到TTL驱动电路,即具有两个发送器和两个接收器,只需外置4个011μF电容以供内部电路产生RS232电压。MAX232的发送器的发送输入为T1IN/T2IN,发送输出为T1OUT/T2OUT;接收器的接收输入为R1IN/R2IN,接收输出为R1OUT/R2OUT。RS232接口也普遍使用9芯插头座,在许多场合下仅将发送端TXD数据和接收端RXD交叉连接,加上信号地GND共使用三根线,只给出了一路TTL电平接口到RS232电平接口的串行通信电路设计。

1.2单片机与不同类型串口的通信扩展

电路的设计单片机与不同类型串口的通信扩展电路的设计单片机与不同类型串口的通信扩展电路的设计单片机与不同类型串口的通信扩展电路的设计单片机CPU8751的串口是TTL电平,要实现8751与不同类型串口进行通信,需要用电平转换器完成不同类型串口的转换,才能成功进行通信。下面对单片机8751与RS232/RS422/RS485的串行通信进行接口扩展。

2.单片机多串口通讯的实现技术

2.1采用多串口单片机

目前只有少数单片机具有两个以上的串行通讯接口,有些单片机与MCS-51系列单片机兼容,新增加的串口与原有的串口在使用上基本相同。

采用多串口单片机实现多串口通讯无需额外的软件硬件支持,因而是最为理想的方案,只是这些单片机不太容易买到,价格也比较高。

扩展串行通讯接口在基本系统上扩展串行通讯接口是另外一种可行的方案。目前对于MCS-51系列单片机只有intel8250和intel8251两种接口芯片可供选择。前者为DIP40封装,后者为DIP28封装。两者在使用上有着很大的区别,不能互换使用。

扩展接口方法的缺点是增加了系统的复杂性,扩展芯片的体积也嫌太大。

2.2采用多路模拟开关

该方法是将串口通过多路模拟开关分别与各路通讯线路连接,适用于多路通讯分时进行,没有交叉的情形。这种方法工作比较可靠,技术上也比较容易实现,只需利用软件控制多路模拟开关的切换即可。

2.3多单片机协同工作

由于单片机的价格低廉,采用多个廉价的单串口单片机实现多路通讯可能比其它的方案成本更低,技术上也比较容易实现。这种方案比较适合协议转换一类的工作,这样每个单片机只需要负责一种协议数据的处理,便于软件编程。

多单片机协同工作必然要涉及到各个单片机之间的数据交换,这需要一些特殊的通讯技术支持。

2.4利用HSI和HSO功能

在现代的单片机应用中,其具备的主要功能就是高速输入以及高速输出。在实际的应用过程中,通常是将这些功能串行通讯。在数据接收的过程中通常会应用到高速输出功能,应用高速输出功能首先是根据单片机的通讯波特频率确定定时时间,然后在对检测接收数据的起始位用高速输出检测。如果检测到起始位时,就对其进行中断,在中断过后对读入的数据进行拼装,在完成此项工作过后必须储存所有接收的数据。

在利用高速输出进行数据处理时,可以通过向寄存器写入相关的命令,然后就可以直接进行数据处理,并且根据波特率对时间间隔进行处理。发送多位数据则对应多条命令,也可以利用高速输出中断实现。

2.5软件模拟

对于不具备高速输入和高速输出功能,又不能进行扩展的单片机,软件模拟是一种增加串口的可行方案。软件模拟是利用软件模拟串行通讯的时序,因此需要占用较多的软件资源。具体实现时可以利用定时器辅助进行,下面将给出实现该方案的技术细节。

3.串行通讯的软件模拟实现

利用软件模拟发送的基本思想是,首先根据通讯速率确定发送每一位的间隔时间,然后根据数据格式和内容进行逐位操作。间隔时间的控制可以用软件延时,也可以使用定时器。例如,对于11.0592MHz的系统时钟和9600波特率,对于MCS-51系列单片机,可以计算出8位定时器的定时时间常数初值。

若使用MCS-51系列单片机定时器0的工作方式2作为定时控制,9600波特率,使用Pl.0作为发送线模拟串行通讯方式1。

软件模拟接收的基本思想是,利用外部中断检测起始位,一旦检测到起始位即进入中断服务程序,在中断服务程序中延时半个数据位时间后再次检测端口状态,以防止干扰的影响。检测无误后关闭外部中断,同时打开定时器中断。在定时器中断服务程序中接收数据位并进行拼装,接收完毕后即可关闭定时器中断。待主程序处理完接收数据后再打开外部中断以便开始下一个数据的接收。

若使用定时器0的工作方式2作为定时控制9600波特率,使用P3.3作为接收线模拟串行通讯方式1。

4.结束语

6.基于单片机的串口通信 篇六

STM32单片机是基于高性能Cortex-M3内核的32位单片机,外设功能强大,最大工作频率72MHz。 本文选用的STM32103VET6芯片,有多达5个USART、3个SPI口和2个I2C口,便于产品与上位机的通信。采用基于库函数的编程方法,能很快地进行产品开发。目前公开的文献没有提及无硬件平台情况下对STM32进行多串口调试的方法,部分文献有介绍用虚拟串口仿真51单片机,但没有提及怎样仿真串口接收通信的情况[1,2,3]。本文采用基于Real View MDK、VSPD( 虚拟串口) 和串口调试软件的联合仿真调试技术,可以在没有硬件平台的情况下, 完成多串口收发通信软件的开发和测试。

1多串口通信的软件设计原理

软件流程图如图1所示。

本文使用的STM32芯片有多达5个USART,使用其中的3个USART(USART1 ~ USART3)。在不进行管脚 重映射的 情况下,USART1 _ Tx管脚为PA9,USART1_Rx管脚为PA10,USART2 _Tx管脚为PA2 ,USART2 _Rx管脚为PA3 ,USART3 _Tx管脚为PB10,USART3_Rx管脚为PB11。软件的设计采用模块化,包括RCC时钟配置模块,NVIC中断向量配置模块,USART1 ~ USART3管脚配置 模块、 USART1 ~ USART3初始化模块,USART1 ~ USART3通信模块等。

1.1RCC时钟设置模块

采用8 MHz外部晶振作为PLL时钟,再倍频到72 MHz。该时钟作为系统时钟,待系统时钟稳定后,再进行各模块时钟的分配[4]。时钟初始化模块部分代码如下:

1.2UASRT通信管脚配置模块

STM32单片机功能管脚由GPIO管脚进行映射,这里仅给出USART1_Tx和USART1_Rx管脚配置的软件代码,USART2和USART3的管脚配 置类似[5]。

1.3NVIC中断向量模块的配置

NVIC是中断向量控制器,用来控制多个中断向量的优先级,在NVIC中设置USART1中断为最高优先级,USART2次之,USART3中断优先级最低。 本文设置发 送为顺序 发送,接收为中 断响应接 收[6]。代码如下:

USART1 ~ USART3的抢占优 先级相同,USART1的从优先级值最小,所以USART1的优先级别最高。

1.4USART的通信配置模块

采用全双工通信,对USART1进行配置,USART1的波特率115 200 bit / s,数据位8位,停止位1位,无校验位,无流量控制,接收、发送使能,采用接收中断方式,USART2和USART3的配置类似。

1.5USART的中断接收模块

在该中断响应函数中,当USART1接收事件完成时,产生中断信号,通知微处理器进行串口通信的接收处理[7,8]。

当USART2和USART3产生接收中断时,进入相应的中断函数进行处理。

2虚拟串口和仿真串口的绑定

传统的USART调试必须有相应的开发板,连接开发板的串口和上位机的串口,开发软件Real View MDK在调试时,有3个串口的仿真输出窗口UART# 1,UART# 2,UART #3,但这3个窗口只能仿真串口输出,不能仿真串口的接收通信。采用虚拟串口软件VSPD(Virtual Serial Port Driver),可以虚拟出多对串口,如图2所示。分别把每一对虚拟串口中的一个与STM32单片机的每个串口进行绑定,就可以进行串口的通信仿真测试。

本文用VSPD软件虚拟了3对串口,分别是COM4和COM5、COM6和COM7、COM8和COM9。 COM4发送数据时,COM5接收数据,反之亦然。为了仿真STM32单片机3个串口的 收发通信,把UART1和COM4绑定在一起,把UART2和COM6绑定在一起,把UART3和COM8绑定在一起。因为虚拟串口COM4和COM5互相通信,所以用COM5发数据,可以模拟串口COM4的中断接收数据。配置文件为COM4_OUT. txt,把后缀名改为. ini。内容如下[9,10]:

文件的作用是配置COM4的波特率为115 200 bit / s,8个数据位,1个停止位,无校验位,把COM4和STM32的第1个串口绑定在一起,配置COM6的波特率与COM4一样,绑定COM6和STM32的第2个串口在一起,依次类推。把COM4_OUT. ini文件放在工程文件 中,编译后,就可以利 用Real View MDK软件和串口调试软件进行串口的通信仿真测试。

3USART通信发送、接收数据测试

3.1发送数据测试

设置3个发送数组,uart1 _ tx[64 ]、uart2 _ tx [64]、uart3_tx[64],因为COM4和COM5相连接, 当COM4发送数据时,COM5接收数据,由图3可知,当COM4发送数组uart1 _ tx[64]的数据时, COM5的接收区正确显示数组uart1_tx[64]的数据。 COM8和COM9相连,由图4可知,COM9的接收区正确显示数组uart3_tx[64]的数据[11]。

3.2接收数据测试

用uart1_rx[64]、uart2_rx[64]和uart3_rx[64] 分别模拟COM4、COM6和COM8中断接收数据,这时COM5、COM7和COM9分别发出数据。该实验用于测试多串口中断接收通信的准确率[12]。

对比图5和图7可知,uart1_rx[64]正确接收到COM5发出的64个数据,表明COM4中断接收通信正确。对比图6和图8可知,uart2_rx[64]正确接收到COM7发送的64个数据,表明COM6中断接收通信正确。

4结束语

7.基于VC++实现串口通信的方法 篇七

关键词:串口通信,VC++,MFC,MSComm控件,通信函数

0 引 言

串行通信具有实现简单、使用灵活方便、数据传输可靠等优点,因而广泛应用于工业控制系统中,是计算机与外部设备进行数据通信时经常使用的方式之一,所以针对计算机与外部设备通信的上位机关于串口通信的开发,在项目开发过程中具有重要地位。本文选用VC++为上位机软件开发环境,因为VC++是一种面向对象的可视化开发工具,提供了良好的界面设计能力,在PC机的串口通信方面有很强的功能[1]。它具有功能强大、简便易用和代码执行速度快等特点,在通信软件的开发中成为越来越多开发人员的首选工具。本文着重介绍三种基于VC++关于串口通信实现的方法。

1 串口通信实现过程

在项目设计过程中,串口通信的实现过程一般为[2]:

1)按协议的设置初始化并打开串行口,即通知Windows本应用程序需要使用此串口,并对其他应用程序禁用此串口。

2)配置串口。

3)在串口上往返传输数据,并在传输过程中进行相关校验。

4)不再需要串口时,关闭使用的串口,即释放串口以供其他应用程序使用。

综上所述,串口编程的实现流程如图1所示,下面介绍基于VC++如何实现该流程。

2 基于VC++实现串口通信的三种方法

目前在串口通信中有很多开发软件提供了不同的开发函数,都能实现串口通信设计,下面三种方法着重介绍上位机串口通信配置的VC++实现。

2.1 运用MFC进行编程实现串口通信

Win32系统把文件的概念进行了扩展,无论是文件、通信设备、命名管道、邮件槽、磁盘还是控制台都被看作文件。因此,可以用MFC中的CFile类来实现对串口的操作,并且Win32中的I/O函数支持重叠式输入输出,提高了系统的时效性。Win32 API 包含了一系列访问通信资源的通信函数。通常,采用MFC进行串口通信编程的主要步骤如下[3]:

(1)在MainFrm.cpp中定义全局变量

HANDLE hCom; //准备打开的串口的句柄

(2)打开串口

Windows通信会话以调用CreateFile()函数打开串口为开始,通信程序在CreateFile( )处指定串口设备及相关的操作属性,并返回一个句柄,该句柄将被用于后续的通信操作。

(3)串口初始化(设置串口参数及进行串口超时设置)

在打开通信设备句柄后,通常要对串口进行初始化(即配置参数如波特率、数据位数、停止位数、奇偶校验以及握手协议和流控协议等),串口配置通过改变数据结构——设备控制块(DCB,Device Control Block)来实现[1]。结构DCB有近30个数据成员,对于采用3线方式的串行通信,只要设置好波特率、数据位、停止位、校验位等几个关键参数即可。

一种简捷的方法可以使得不了解DCB的详细内容也能设置好串行通信参数,即利用BuildCommDCB()函数来设置DCB,然后用函数SetCommState()配置串行通信接口。

(4)读写串口的API函数

串口打开后,可以对它进行读写操作。

(5)关闭串口的API函数

串口是非共享资源,所以打开某个串口后,一定要关闭。CreateFile()返回值非零,则表示调用成功。

2.2 运用MSComm控件进行编程实现串口通信

MSComm(Microsoft Communication Control) 通信控件是微软基于组件对象模型(COM)开发的一个事件驱动的全双工高级通信接口,作为主要用于串行通信编程的Active 控件, 其具有非常好的运行效率和稳定性。

(1)MSComm 控件的功能及原理[1]

MSComm 控件具有完善的串行数据的发送和接收功能, 不但包括了全部Windows API中关于串行通信的函数所具有的功能,还提供了更多的对象属性来满足不同用户的编程需要。该控件屏蔽了通信过程中的底层操作,用户只需通过设置并监视其属性和事件,即可完成串口编程,实现与被控制对象的串行通信、数据交换,并监视或响应在通信过程中可能发生的各种错误和事件。

(2)MSComm 控件的通信方式[5]

MSComm 控件提供两种通信方式:

a)事件驱动通信方式

事件驱动通信是处理串行端口交互作用的一种非常有效的方法。许多情况下,程序在事件发生时需要得到通知(比如在CD(Carrier Detect)或RTS(Request To Send)线上有一个字符到达或一个变化发生),此时,可以利用MSComm 控件的OnComm事件捕获并处理这些通信事件,OnComm 事件还可以检查和处理通信错误。在编程过程中,通过在OnComm 事件处理函数中加入相应处理代码,实现应有的功能。这种方式的优点是实时性强,可靠性高。

b)查询通信方式

查询方式是指通过在用户程序中定时或不定时地查询MSComm 控件的CommEvent 属性是否发生变化,来进行相应的处理。其实质还是事件驱动,只是在某些情况下,这种方式显得更为便捷。例如,在应用程序较小或处理器空闲时间较多时,这种方法就更可取。查询方式的优点是可控性好,且传输稳定,缺点是查询有时间间隔,在数据变化较快的情况下,对所有串口轮流查询,可能会出现数据丢失。虽然时间间隔越小,数据的实时性越高,但占用的系统资源也越多。

2.3 运用VC++运行库函数实现串口通信

利用VC++进行异步通信编程,其实是对UART内部寄存器的读出或写入操作。通过计算机串口进行串行通信之前,必须根据设备的有关通信参数,约定双方的通信方式,包括波特率的设置、奇偶位校验及停止位的设立,确定数据传输帧格式和UART操作方式,逐个对线路控制寄存器、波特率因子寄存器等寄存器写入,利用VC++运行库提供的通信函数_inp( )和_outp( )来实现串口通信[5]。

另外也可以运用第三方的通信类来编写串口通信,第三方编写的类有非常简洁明快的接口,程序更加灵活,再结合到VC++中运行效率更高。

3 结束语

VC++是一个非常优秀的用户开发平台,提供了多种方法对串口进行通信控制,使用户不必了解具体的硬件原理,简化了编程,使程序透明化,并且适应性好,可移植性高。采用MFC串口通信编程是最灵活、最常用并且功能强大的方法,适用于同各种不同的外设进行串行通信,但需要程序员对硬件工作原理有较深的了解;ActiveX控件编程容易实现,不需要处理烦琐的细节,但是灵活性较差;利用VC++运行库的标准通信函数实现串口编程原理简单,不足之处是实用性和灵活性较差。因此,在具体实践中要结合功能需要,综合考虑复杂程度、灵活性等因素,选择合适的方法,实现上位机串口通信。

参考文献

[1]龚建伟,熊光明.Visual C++/Turbo C串口通信编程实践[M].北京:电子工业出版社,2008.

[2]李现勇.Visual C++串口通信技术与工程实践[M].北京:人民邮电出版社,2006.

[3]王华,岳丽全,岳志高.MSComm控件在VC++6.0串口通信中的应用[J].长春工程学院学报:自然科学版,2009,10(1):72-73,91.

[4]李长林,高洁.Visual C++串口通信技术与典型实例[M].北京:清华大学出版社,2006.

[5]求是科技.Visual C++/Visual Basic串并口开发技术工程应用实例导航[M].北京:人民邮电出版社,2006.

[6]乌尼尔,董海军.Visual C++经典例程分析[M].北京:中国电力出版社,2004.

[7]齐舒创作室.Visual C++6.0开发技巧及实例剖析[M].北京:清华大学出版社,2006.

8.基于单片机的串口通信 篇八

温度监控系统在农业、工业和生活中有着广泛的应用,但随着监控的面积扩大,监控点的增加及控制处理趋于智能化等新的应用要求出现,传统的温度控制系统已经逐渐不适用,首先是不便于观察而且不能及时地对异常温度变化做出迅速反应,其次是传统的温度控制系统不能储存大量数据,不能对监控的数据进行分析,不便于对温度情况进行长期的监测和科学的分析,为了解决以上问题,本文设计了一个能实时响应温度并进行控制的温度实时控制系统,并且采用与计算机串口通信结合的方式通过计算机增大了系统储存量,而且在计算机系统中收集和处理温度控制系统的数据,大幅度的增强了该系统的功能,并具备较强的扩展性[1,2]。

随着计算机技术特别是单片机技术的发展,串口通信在诸多领域上得到了广泛的应用,计算机可以通过串口来获取单片机的各种数据,然后利用计算机强大的功能进行处理,再根据处理的结果发送数据到单片机,实现远程控制设备。本设计采用上位机和下位机的互联工作,而计算机的分析处理能力较强,有很好的人机界面和大容量的多种存储方式,所以上位机一般采用计算机,单片机具有价格低,功能强,较好的抗干扰能力和面向控制等特点,所以下位机采用单片机来构成互联工作模式。由于串行通信具有高效可靠、价格便宜,遵循统一的标准等特点,适用于本设计的通信要求[3]。

1 硬件设计

1.1 电路设计

温度实时控制系统的下位机由7个部分组成(详见图1),其中测量环境温度使用DS18B20数字温度传感器,它将温度传感器、A/D传感器、寄存器、接口电路集成在一个芯片中,采用1-Wire总线协议,可实现直接数字化输出。DS18B20数字温度传感器温度测量范围为-55~+125 ℃,测温分辨率可达0.062 5 ℃,被测温度用符号扩展的16位数字量进行串行输出,适配各种单片机或系统机。使用这种传感器不需要A/D转换电路,可以大大简化电路,温度测量精度和速度都大幅提高[4]。

本设计利用MAX232进行电平转换,实现计算机和单片机的互联通信。MAX232是低功耗、单电源双RS 232发送/接收器,适用于各种EIA-232 E和V.28/V.24的通信接口。MAX232芯片内部有一个电源电压变换器,可以把输入的+5 V电源变换成RS 232C输出电平所需±10 V电压,所以采用此芯片接口的串行通信系统只要单一的+5 V电源就可以。在MAX232芯片上,选用其中一路发送/接收,R2OUT接89C52的RXD(P3.0),T2IN接89C52的TXD(P3.1),T2OUT接PC机的RD,R2IN接PC机的TD,这样就能通过P3.0和P3.1I/O口就实现单片机与计算机互联通信[5]。本设计的信号灯部分一共使用6只LED灯,其中Start灯亮表示单片机上电工作,RX2(P3.0)灯亮表示接受从PC机传来的数据,TX2(P3.1)灯亮表示向PC机发送数据。m1,m2,m3三颗灯分别对应的接口为P2.5,P2.6,P2.7,当3个温度传感器探测的温度大于设定值则变亮。

总体电路设计是以单片机为中心,整合和控制各部分。本设计的单片机是STC89C52[6,7,8,9,10],它通过XTAL1,XTAL2引脚外接晶振和电容实现11.059 2 MHz的时钟周期,这能产生准确的波特率,有利于串行通信。它的RESET引脚外接电路实现上电自动复位和按键电平复位,P1.4~P1.7引脚接有4个按键,实现时间和温度的设定。单片机通过P1.0,P1.1,P1.2引脚读出3个温度传感器的温度值,然后通过P0端口和P2.0,P2.1,P2.2控制液晶板,在液晶上显示时间和温度值。同时经过单片机内部程序,控制信号灯的亮灭,发送和接受计算机的数据。

1.2 单片机程序设计

基于上节所述的硬件设计, 编写程序以实现期望的功能,其中主程序不断刷新LCD显示的内容,定时器T0中断程序用于时钟的功能,定时器T1作为波特率发生器,串口中断实现与PC机的通信。

单片机刚启动,首先进行数据的初始化,初始化结束后,开始进入工作状态,若没有到结束时间,就进行温度测量并在液晶板上显示当前温度值,同时按键扫描程序不断监测是否有按键启动,若S1被按,则进入设定状态,定时器T0中断关闭,当前时间停止,液晶板上显示温度设定值和当前时间,可以通过S2,S3按键做修改(如图2)。

在工作的过程中,当单片机接收一个数据会全部储存在BUF变量里面,同时产生一个串口中断,需要软件去清除中断标志。然后取出BUF的值,储存到对应的数组中。由于传送的数据简单,采用了无校验的8位数据直接传送模式(如图3所示)。

2 上位机的程序设计

在串口的几种编程方式中,利用Microsoft公司提供了MSComm控件,可以使开发串口通信程序变得十分简单。VisualBasic是近年来发展最快的一种计算机语言,其简洁和实用性己经受到了众多计算机用户和程序员的欢迎,尤其是6.0版本,功能强大且易于掌握,是一种优秀的可视化开发环境,在VB应用程序中调用MSComm控件也十分容易。采用VB标准控件MSComm来实现通信功能,实际上是调用了API函数,而API函数是由Commdry解释并传给设备驱动程序执行的,对于VB程序开发者只需知道MSComm控件的属性和事件的用法即可以实现串口的操作。本温度实时控制系统的上位机操作界面正是基于VB的MSComm控件为核心,完成接收和保存数据,以及修改单片机上的参数[3]。

系统操作界面启动后,在串口端口和波特率选择2个参数设置正确后,打开串口,这时计算机会接收从单片机发送过来的数据,这些数据是一连串的字符,所以对接收过来的数据的处理,关键是字符串的处理。通过设定参数的位数,准确分离开出每一个参数的值,然后存入对应的数组中,并实时地显示在屏幕上,还可以按需把数据保存到记事本。同时在操作界面上修改的数据也能通过串口传送到单片机,远程控制单片机。在发送的数据也要严格按照一定的格式进行发送,这样单片机才能正确接收,操作界面程序流程如图4所示。

本设计定义的接收和发送数据格式如表1所示。

3 系统实际运行

打开设计好的上位机软件后,首先选择正确的串口,实现与单片机通信,然后通过图5所示的操作界面可以实时观测到这个温度实时控制系统所测量的温度值和对应的时间点,如有需要可以设置时间的起始点和结束点,通过软件绘画出温度值的变化曲线,也可以通过实时曲线观查温度的变化情况,这个设置方便于长时间地观察温度的变化,还可以将数据全部保存到软件里,在需要的时候进行必要的数据分析;而在操作界面上可以很方便对温度实时控制系统中的监控时间段和温度限制值作修改,当测量的温度值超过温度限制值,设置好的报警灯会闪烁,提醒我们注意。

4 结 语

本文设计了基于单片机AT89C52的温度实时监控系统并通过串口通信实现了单片机与计算机互联,实

现了多点温度实时远程控制,计算机的实时数据分析,长期数据的图表式保存,该系统已经在硬件平台和软件平台上成功运行。整个设计具有成本低,测量范围广,实时操作方便快捷,显示和储存的信息量大,可扩展功能强等优点,可以应用在仓库、温室大棚、机房等进行温度实时控制。另外设计方案可以扩展为网络连接,可以突破串口传送的距离限制,广泛用于温度在DS18B20测温范围之内的场合,实现随时随地通过网络进行实时控制,将具有更大的应用价值。

摘要:设计了一种温度实时监控系统。该系统通过单片机实现实时控制,并通过串口连接单片机与上位计算机,在计算机中实现实时监控、大容量的数据存储及数据分析等功能,解决了常规温度测量方法在温度测量实时性差、不能储存数据及缺乏数据分析功能等方面的缺陷。

关键词:串口通信,实时温度监控,MSComm控件,DS18B20

参考文献

[1]陈妙芳,胡晓东.基于AT89S51单片机的温度控制系统设计[J].机械工程师,2009(1):136-137.

[2]方景杰,傅成华,唐建国,等.智能温度检测系统的设计[J].中国西部科技,2009,18(8):29-30.

[3]杨建义.基于VisualBasic与RS232串行通信的温度监测系统[J].电子测试,2007(12):47-50.

[4]张军.智能温度传感器DS18B20及其应用[J].仪表技术,2010(4):68-70.

[5]刘艳玲.采用MAX232实现MCS51单片机与PC机的通信[J].天津理工学院学报,1999,15(2):57-61.

[6]闫慧兰,顾亮,侯朝桢,等.AT89C52单片机与VB串行通信的实现[J].微计算机信息,2003,19(12):65-66.

[7]王丽,雷秀,余建国.基于PC机与单片机AT89C52的串行通信协议设计[J].机电工程技术,2006,35(2):19-21.

[8]刘迪,谭春亮,李建海,等.基于数字PID和89C52单片机的温度控制系统[J].电子设计工程,2010,18(4):28-30.

[9]刘绿山,刘建群,李仕勇,等.基于AT89S52单片机的温度控制系统[J].微计算机信息,2007,23(6):98-100.

上一篇:活力党建工作方案下一篇:严重精神障碍患者健康管理工作计划