要:根据学校多年组织大学生参加“全国大学生机器人大赛”的经验,利用LabVIEW软件搭建了一个单片机图形调试平台,该平台修改方便、应用灵活,可以使更多没有参赛经历的学生更好地提高动手能力。
关键词:LabVIEW;单片机;课程改革;串口 
0  引言
我校多年来组织大学生参加了“全国大学生机器人大赛”,绝大部分经过大赛历练的队员都能成为工程实践能力强、创新能力强、团队协作能力强、具有国际竞争力的高素质复合型人才。在设计开发机器人过程中,单片机在机器人控制部分占据了主导地位,我们通过长期的实践探索发现,在设计和调试单片机控制系统时,图像化显示各中间环节调试的数据将给系统开发带来极大的好处。本文以STC系列单片机为例,其通过串口与计算机相连,设计了一款基于LabVIEW软件的图形化数据显示工具。
1  LabVIEW的串口通信
LabVIEW是美国国家仪器(NI)公司研发的一款实用工具软件,其基于图形化的编辑语言和简
单实用的组件使用方式,可以帮助我们快速构建各种应用所需的工具,提高开发效率。单片机与计算机的连接有多种方式,如USB、CAN、JTAG等,但串口通信仍是目前最简单、最实用的连接方式。在LabVIEW软件中,若要使用串口,需先安装VISA驱动。
2  通信协议设计
16进制字符传递信息多,效率较高,但单片机在处理16进制字符串的收发时相对较复杂。字符数据通信时,所有信息以特定字符开头的字符串表示,虽然效率有所降低,但可以直接使用标准格式输入输出函数sprintf(),sscanf()等,使用方便,开发效率高。本设计中采用的通信协议为:起始符$+命令标示符1+参数1+……,命令标示符2+参数2+……+*+校验码。
3  下位机程序设计
3.1  字符发送
单片机在串口设置完成后,可以直接使用printf()函数将变量以字符形式输出到串口,此时串口为查询状态,即字符发送时单片机一直处于查询是否发送完成的状态,无法执行其他指
令,效率太低。为提高效率,建立了一个数组作为发送数据的缓冲区,利用sprintf()函数将待发送的数据按特定格式以字符的形式存储到缓冲区,当打开串口中断时可以逐个传输,还可以通过vsprintf()函数实现自定义printf()函数。
3.2  字符接收
串口处在中断状态,将收到的每个字符存入接收缓冲区。当接收到一个完整的数据包时设置相应标志,在主函数中对数据包进行处理。
3.3  上位机程序设计
3.3.1  串口设置LabVIEW软件的串口设置由VISA Configure Serial Port VI(图1)实现,通过该节点可以设置串口的基本信息,包括波特率、串口号、数据位、校验位、停止位等。
通过VISA读取节点可以实现串口接收,如图2所示。
模拟串口使用printf函数
通过VISA写入节点可以实现串口的发送功能,如图3所示。
3.3.2  串口发送串口发送部分的程序框图如图4所示,当按下确定按钮时即会把字符串中的信息发送入串口。信息发送只需在字符串模块中输入需要发送的字符信息即可。
3.3.3  串口接收LabVIEW的串口通信节点的工作方式为:查询串口的接收缓冲区,如果缓冲区中有数据就读取数据进行处理,若缓冲区内没有数据则在此等待,直到数据到来或超时退出。因此,在使用时需要根据实际数据情况设置数据读取时间间隔和超时时间,才能使系统稳定运行。在发送端数据发送速率基本稳定时,为提高效率,可以将数据读取间隔时间设为下位机发送一组完整数据包的时间。否则,会造成缓冲区溢出或等待时间过长导致程序出错。因数据以字符形式传送,可以通过字符串操作的函数对数据进行处理。在寻数据头时,可采用“搜索/拆分字符串(函数)”(图5)的方式,将特征字符送入搜索字符串处,即可得到以此开头的特定字符串,将“匹配+剩余字符串”作为输出结果送入字符串转数值模块,配合适当的偏移量进行处理,即可得到相应的数值和剩余的字符串。若需要对实际进行计算还可以通过加入函数环节实现。分数/指数字符串至数值转换如图6所示。
为了能把接收到的数据以图形的方式显示出来,采用波形图表作为数据显示控件。若需要显示多组数据,可使用“捆绑(函数)”将各组独立数据组合为簇,共同显示于波型图表上。系统的完整程序框图如图7所示。