一种基于C语言和LabVIEW的串口通讯程序的设计
打开文本图片集
摘要:本文主要通过串口通讯原理,对单片机和计算机之间通讯进行分析和研究,设计了一种基于C语言和LabVIEW实现串口通讯的方法,实现数据由单片机向PC机的传输。此方法已在实际应用中得到证明,设计简单,使用方便可靠。
关键词:串口通讯;单片机;LabVIEW
中图分类号:TP273 文献标识码:A 文章编号:1003-2177(2018)16-0000-00
在工业控制与信息采集等领域,经常需要单片机和PC机的共同完成指定工作。PC机运算速度快、容量大,单片机控制能力强[1]。很多工作需要单片机采集数据,PC机处理数据。所以单片机与PC机之间的数据通讯必不可少,多数情况是单片机向PC机传输数据。
本文设计的串口通讯程序包括下位机、上位机以及数据传输通道。软件设计中下位机以Keil uVision4作为开发平台,采用C语言对单片机进行编程,C语言在功能上、可读性、可维护性上优势明显,易学易用。上位机以LabVIEW作为开发平台,在工业和学术中LabVIEW是被应用最广泛的虚拟仪器开发平台。其编程简单,只需要通过交互式图形前面板进行系统控制和结果显示,再通过程序框图进行功能模块的组合和操作来制定各种功能[2]。
1 串行通讯的实现方法
串口是计算机上一种通信协议,大多是计算机包含两个基于RS-232的串口[3]。单片机与上位机一般用RS-232串口通讯,RS-232(ANSI/EIA-232)是IBM-PC及兼容机上的串行连接标准,是PC机与通信工业中应用最广泛的一种串行接口[4]。其接口示意图如图1所示。
RS-232九芯接口共有9个接口。本设计只需连接三线:TXD、RXD和地线GND即可。TXD(pin 2):串口数据输出(Transmit Data);RXD(pin 3):串口数据输入(Receive Data); GND(pin 5):地线。
串口通信主要参数有:波特率、数据位、停止位和奇偶校验。
波特率是衡量計算机串口通信速度的指标[5],它表示每秒传送位的个数,其单位是b/s(位/秒),例如500波特率表示每秒发送500个bit;数据位是衡量计算机串口通信中时间数据位的指标。在RS-232通信协议中,实际传送数据顺序是:1位起始位、数据0、...、数据7、1位奇偶校验、1位停止位;停止位用于标志单个信息包的最后一位,停止位不仅仅是表示传输的结束,并且提供了矫正时钟同步的机会[6];奇偶校验位是在串口通信中一种简单的检错方式。当然没有校验位也是可以的。
2 下位机通讯程序设计
下位机基于ADuC845单片机通过Keil开发平台进行编写,下位机串口通讯程序对应的流程图如图2所示。
2.1串口初始化
串口初始化是数据通信程序中十分重要的一部分,初始化设置正确与否,将直接决定数据发送是否正确。串口初始化主要是对串口波特率的选择。由于串口的触发是由定时器3控制的,即通过定时器3设定波特率,设定好发送频率,当达到定时间隔时,程序就会进入发送状态。两个专用寄存器T3CON和T3FD用于设置定时器3。
T3CON是波特率控制寄存器[5],用于设置UART(通用串口)的波特率和二进制分频器(DIV)的分频数。写入DIV2~DIV0的数可用式(1)计算
(1)
其中,是由专用寄存器PLLCON所定义的内核频率,计算得到的DIV值需要取整。T3FD是所需波特率的一个分数分频,其值由式(2)计算
(2)
计算得到的T3FD的值需要取最接近他的整数。波特率可由式(3)计算
(3)
2.2发送数据
当完成串口初始化,并到达定时间隔后,就可以将数据传送给串行数据缓冲器(SBUF)。然后数据就会按照RS-232串口通信协议传递到计算机中,从而被上位机接收处理。
由于串口是按位发送的,所以程序在数据发送前要先进行拆分处理,方便串口传输。发送数据是数据通信程序最重要的部分,只有完整有序的将数据发往上位机,才能得到正确的数值。
2.3清除标志位
由于每次发完一次数据,硬件会自动将TI标志位置1,所以需要软件在每次发完后将其清零,否则将无法进行下一次的数据发送。此操作虽然简单,但是在串口程序中很重要,很多时候就是因为对其处理不当,导致数据发送有误。所以,准确及时的清除TI标志位十分重要。
对于以上设置部分程序代码如下:
T3CON=0x85; //初始化设置,串口通讯 9600
T3FD=0X12;
SCON=0X52; //8位UART,波特率可变,接收
SBUF=data; //发送数据
while(TI==0); //清除標志位
TI=0;
通过下位机程序实现了对数据的实时发送,接下来就需要上位机程序对数据进行接收。
3 上位机通讯程序设计
为使下位机采集的信息能上传到上位机,必须设计通讯接口程序。由于计算机和下位机采用的RS-232串口通信协议,所以上位机也要采用串口通信。其大致结构与下位机数据通信程序相同,其不同在于下位机是发送数据,上位机是接收数据。
上位机编程所用的软件是LabVIEW,其采用的是图形化编程,要编制串口通讯程序就需要对串口功能模块VISA进行配置和连接。VISA是虚拟仪器软件结构框架(virtual instrumentation software architecture)的简称,是一个调用底层代码来控制硬件的高层API(应用程序接口)[7]。VISA常用的函数由以下四个:
(1)VISA配置串口,如图3所示。
功能:设定波特率、数据位、停止位、奇偶校验位等参数,将VISA资源名称指定的串口按特定设置初始化。
(2)VISA写入,如图4所示。
功能:将“写入缓冲区”的数据写入VISA资源名称指定的串口。
(3)VISA读取,如图5所示。
功能:从VISA资源名称指定的串口中读取指定字节的数据,并将数据返回至读取缓冲区。
(4)VISA关闭,如图6所示。
功能:关闭VISA资源名称指定的串口会话或事件对象。
上位机通讯接口程序流程图如图7所示。
按照流程图,利用VISA函数模块,将对应的数据线进行连接设置,图8为部分VISA接线图,图9为LabVIEW的前面板,也就是上位机的人机界面。
4 结语
单片机与计算机通讯在工业和日常生活中发挥着巨大作用,本文设计了一种利用C语言和LabVIEW实现单片机与计算机串口通讯方法。软件设计遵循模块化设计方法,提高了程序的执行效率和易读性,运行简单方便。在上位机中只要对LabVIEW稍加扩展便可实现计算机对数据的转换、存储等数据处理操作。
参考文献
[1] 成志东,吕善伟.浅谈单片机与微机串行通讯的多语言编程实现[J].金卡工程,2005,(1):40-42.
[2] 王英红,秦化渤,闫芳,康伟.LabVIEW虚拟仪器开发平台及其应用分析[J].辽宁工学院学报(自然科学版),2004,(5):16-18.
[3] 张婷婷.基于.NET的RS-232高效串口调试程序设计与实现[J].计算机光盘软件与应用,2012,(17):197-198.
[4] 王公仆,王文成.计算机与单片机的串口通讯程序设计[J].轻工机械,2007,(3):103-105.
[5] ADI.MicroConverter® Multichannel 24-/16-Bit ADCs with Embedded 62kB Flash and Single-Cycle MCU ADuC845/ADuC847/ADuC848 Data Sheet[EB/OL],,2004.
[6] 付新华,王健.虚拟仪器软件标准及编程方法概述[J].电测与仪表,2005,(2):4-8.
作者简介:李雪妍(1982—),女,汉族,山东淄博人,电子科技大学硕士,淄博职业学院信息工程系,讲师,研究方向:计算机应用技术