(淄博职业学院,山东淄博 255314)
在工业控制与信息采集等领域,经常需要单片机和PC机的共同完成指定工作。PC机运算速度快、容量大,单片机控制能力强。很多工作需要单片机采集数据,PC机处理数据。所以单片机与PC机之间的数据通讯必不可少,多数情况是单片机向PC机传输数据。
本文设计的串口通讯程序包括下位机、上位机以及数据传输通道。软件设计中下位机以Keil uVision4作为开发平台,采用C语言对单片机进行编程,C语言在功能上、可读性、可维护性上优势明显,易学易用。上位机以LabVIEW作为开发平台,在工业和学术中LabVIEW是被应用最广泛的虚拟仪器开发平台。其编程简单,只需要通过交互式图形前面板进行系统控制和结果显示,再通过程序框图进行功能模块的组合和操作来制定各种功能。
1 串行通讯的实现方法
串口是计算机上一种通信协议,大多是计算机包含两个基于RS-232的串口。单片机与上位机一般用RS-232串口通讯,RS-232(ANSI/EIA-232)是IBM-PC及兼容机上的串行连接标准,是PC机与通信工业中应用最广泛的一种串行接口。其接口示意图如图1所示。RS-232九芯接口共有9个接口。本设计只需连接三线:TXD、RXD和地线GND即可。TXD(pin 2):串口数据输出(Transmit Data);RXD(pin 3):串口数据输入(Receive Data);GND(pin 5):地线。

图1 RS-232九芯接口

图2 串口通讯流程图

图3 VISA配置串口函数模块

图4 VISA写入函数模块

图5 VISA读取函数模块

图6 VISA关闭函数模块

图7 数据通讯流程图
波特率是衡量计算机串口通信速度的指标,它表示每秒传送位的个数,其单位是b/s(位/秒),例如500波特率表示每秒发送500个bit;数据位是衡量计算机串口通信中时间数据位的指标。在RS-232通信协议中,实际传送数据顺序是:1位起始位、数据0、...、数据7、1位奇偶校验、1位停止位;停止位用于标志单个信息包的最后一位,停止位不仅仅是表示传输的结束,并且提供了矫正时钟同步的机会;奇偶校验位是在串口通信中一种简单的检错方式。当然没有校验位也是可以的。

图8 VISA连线图

图9 上位机人机界面
2 下位机通讯程序设计
下位机基于ADuC845单片机通过Keil开发平台进行编写,下位机串口通讯程序对应的流程图如图2所示。2.1 串口初始化
串口初始化是数据通信程序中十分重要的一部分,初始化设置正确与否,将直接决定数据发送是否正确。串口初始化主要是对串口波特率的选择。由于串口的触发是由定时器3控制的,即通过定时器3设定波特率,设定好发送频率,当达到定时间隔时,程序就会进入发送状态。两个专用寄存器T3CON和T3FD用于设置定时器3。T3CON是波特率控制寄存器,用于设置UART(通用串口)的波特率和二进制分频器(DIV)的分频数。写入DIV2~DIV0的数可用式(1)计算:


计算得到的T3FD的值需要取最接近他的整数。波特率可由式(3)计算:

2.2 发送数据
当完成串口初始化,并到达定时间隔后,就可以将数据传送给串行数据缓冲器(SBUF)。然后数据就会按照RS-232串口通信协议传递到计算机中,从而被上位机接收处理。由于串口是按位发送的,所以程序在数据发送前要先进行拆分处理,方便串口传输。发送数据是数据通信程序最重要的部分,只有完整有序的将数据发往上位机,才能得到正确的数值。
(1)记录两组手术指标:手术用时、术中出血量和住院时间;(2)观察两组并发症:粘连性肠梗阻、低营养症、腹壁切口裂开与应激性溃疡;(3)检测两组治疗前后的体温、凝血酶原时间(PT)值以及血氧饱和度指标。
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(应用程序接口)。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稍加扩展便可实现计算机对数据的转换、存储等数据处理操作。

最新评论