LabVIEW串口通信程序设计Word文档格式.docx

上传人:b****6 文档编号:16743516 上传时间:2022-11-25 格式:DOCX 页数:39 大小:1.59MB
下载 相关 举报
LabVIEW串口通信程序设计Word文档格式.docx_第1页
第1页 / 共39页
LabVIEW串口通信程序设计Word文档格式.docx_第2页
第2页 / 共39页
LabVIEW串口通信程序设计Word文档格式.docx_第3页
第3页 / 共39页
LabVIEW串口通信程序设计Word文档格式.docx_第4页
第4页 / 共39页
LabVIEW串口通信程序设计Word文档格式.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

LabVIEW串口通信程序设计Word文档格式.docx

《LabVIEW串口通信程序设计Word文档格式.docx》由会员分享,可在线阅读,更多相关《LabVIEW串口通信程序设计Word文档格式.docx(39页珍藏版)》请在冰豆网上搜索。

LabVIEW串口通信程序设计Word文档格式.docx

在计算机通电前,按图13-2所示将两台PC的COM1口用串口线连接起来。

连接串口线时,计算机严禁通电,否则极易烧毁串口。

13.1.2设计任务

利用LabVIEW编写程序实现PC与PC串口通信。

任务要求如下。

两台计算机互发字符并自动接收,如一台计算机输入字符串“收到信息请回字符abc123”,单击“发送字符”命令,另一台计算机若收到,就输入字符串“收到,abc123”,单击“发送字符”命令,信息返回到第一组的计算机。

实际上就是编写一个简单的双机聊天程序。

13.1.3任务实现

1.建立新VI程序

启动NILabVIEW程序,选择新建(New)选项中的VI项,建立一个新VI程序。

2.程序前面板设计

在前面板设计区空白处单击鼠标右键,显示控件选板(Controls)。

(1)添加一个字符串输入控件:

控件(Controls)→新式(Modern)→字符串与路径(String&

Path)→字符串输入控件(StringControl),将标签改为“发送区:

”。

(2)添加一个字符串显示控件:

Path)→字符串显示控件(StringIndicator),将标签改为“接收区:

(3)添加一个串口资源检测控件:

控件(Controls)→新式(Modern)→I/O→VISA资源名称(VISAresourcename);

单击控件箭头,选择串口号,如COM1或ASRL1:

(4)添加一个确定(OK)按钮控件:

控件(Controls)→新式(Modern)→布尔(Boolean)→确定按钮(OKButoon),将标题改为“发送字符”。

(5)添加一个停止(Stop)按钮控件:

控件(Controls)→新式(Modern)→布尔(Boolean)→停止按钮(StopButoon),将标题改为“关闭程序”。

图13-3程序前面板

设计的程序前面板,如图13-3所示。

3.框图程序设计——添加函数

进入框图程序设计界面,在设计区的空白处单击鼠标右键,显示函数选板(Functions)。

添加的所有函数及其布置如图13-4所示。

详细步骤介绍如下。

(1)添加一个配置串口函数:

编程(Programming)→仪器I/O(InstrumentI/O)→串口(Serial)→VISA配置串口(VISAConfigureSerialPort)。

图13-4框图程序函数添加与布置

(2)添加4个数值常量:

编程(Programming)→数值(Numeric)→数值常量(数值常量(NumericConstant),值分别为9600(波特率)、8(数据位)、0(校验位,无)、1(停止位)。

(3)添加两个关闭串口函数:

编程(Programming)→仪器I/O(InstrumentI/O)→串口(Serial)→VISA关闭(VISAClose)。

(4)添加一个循环结构:

编程(Programming)→结构(Structures)→While循环(WhileLoop)。

添加理由:

随时监测串口接收缓冲区的数据。

以下添加的函数或结构放置在While循环结构框架中。

(5)添加一个时钟函数:

编程(Programming)→定时(Timing)→等待下一个整数倍毫秒(WaitUntilNextmsMultiple)。

以一定的周期监测串口接收缓冲区的数据。

(6)添加一个数值常量:

编程(Programming)→数值(Numeric)→数值常量(NumericConstant),将值改为500(时钟频率值)。

(7)添加一个VISA串口字节数函数:

编程(Programming)→仪器I/O(InstrumentI/O)→串口(Serial)→VISA串口字节数(VISABytesatSerialPort),标签为“PropertyNode”。

(8)添加一个数值常量:

编程(Programming)→数值(Numeric)→数值常量(NumericConstant),将值为0(比较值)。

(9)添加一个比较函数:

编程(Programming)→比较(Comparison)→不等于?

(NotEqual?

)。

只有当串口接收缓冲区的数据个数不等于0时,才将数据读入到接收区。

(10)添加一个布尔函数:

编程(Programming)→布尔(Boolean)→非(Not)函数。

当关闭程序时,将关闭按钮真(True)变为假(False),退出循环。

如果将循环结构的条件端子

设置为“真时停止(StopifTrue)”

,则不需要添加非(Not)函数。

(11)添加两个条件结构:

编程(Programming)→结构(Structures)→条件结构(CaseStructure)。

发送字符时,需要单击按钮“发送字符”,因此需要判断是否单击了发送按钮;

接收数据时,需要判断串口接收缓冲区的数据个数是否不为0。

(12)添加一个串口写入函数:

编程(Programming)→仪器I/O(InstrumentI/O)→串口(Serial)→VISA写入(VISAWrite),并拖入条件结构(上)的真(True)选项框架中。

(13)添加一个串口读取函数:

编程(Programming)→仪器I/O(InstrumentI/O)→串口(Serial)→VISA读取(VISARead),并拖入条件结构(下)的真(True)选项框架中。

(14)将字符输入控件图标(标签为“发送区:

”)拖入条件结构(上)的真(True)选项框架中,将字符显示控件图标(标签为“接收区:

”)拖入条件结构(下)的真(True)选项框架中。

(15)分别将确定(OK)按钮控件图标(标签为“确定按钮(OKButton)”)、停止(Stop)按钮控件图标(标签为“停止按钮(StopButton)”)拖入循环结构框架中。

4.框图程序设计——连线

使用连线工具,将所有函数连接起来,如图13-5所示。

图13-5框图程序连线

(1)将VISA资源名称(VISAresourcename)函数的输出端口分别与串口配置(VISAConfigureSerialPort)函数、串口字节数(VISABytesatSerialPort)函数、串口写入(VISAWrite)函数、串口读取(VISARead)函数的输入端口VISA资源名称(VISAresourcename)相连。

(2)将数值常量9600、8、0、1分别与串口配置(VISAConfigureSerialPort)函数的输入端口波特率(baudrate)、数据比特(databits)、奇偶(parity)、停止位(stopbits)相连。

(3)将数值常量(值为500)与等待下一个整数倍毫秒(WaitUntilNextmsMultiple)函数的输入端口毫秒倍数(millisecondmultiple)相连。

(4)将确定按钮图标“OKButton”与条件结构(上)的选择端子?

相连。

(5)将串口字节数(VISABytesatSerialPort)函数的输出端口NumberofbytesatSerialport与不等于?

)函数的输入端口x相连。

将串口字节数(VISABytesatSerialPort)函数的输出端口NumberofbytesatSerialport与串口读取(VISARead)函数的输入端口字节总数(bytecount)相连。

(6)将数值常量(值为0)与不等于?

)函数的输入端口y相连。

(7)将不等于?

)函数的输出端口x!

=y?

与条件结构(下)的选择端子?

(8)在条件结构(上)中将字符输入控件图标(标签为“发送区:

”)与串口写入(VISAWrite)函数的输入端口写入缓冲区(writebuffer)相连。

(9)在条件结构(下)中将串口读取(VISARead)函数的输出端口读取缓冲区(readbuffer)与字符显示控件图标(标签为“接收区:

”)相连。

(10)将停止按钮(StopButton)函数与非(Not)函数的输入端口x相连。

(11)将非(Not)函数的输出端口.not.x?

与循环结构的条件端子

(12)在条件结构(上)中将串口写入(VISAWrite)函数的输出端口VISA资源名称输出(VISAresourcenameout)与串口关闭(VISAClose)函数(上)的输入端口VISA资源名称(VISAresourcename)相连。

(13)在条件结构(下)中将串口读取(VISARead)函数的输出端口VISA资源名称输出与关闭串口函数VISAClose(下)的输入端口VISA资源名称相连。

(14)进入两个条件结构的假(False)选项,将VISA资源名称函数的输出端口分别与串口关闭(VISAClose)函数(上、下)的输入端口VISA资源名称相连,如图13-6所示。

5.运行程序

进入程序前面板,保存设计好的VI程序。

单击快捷工具栏“运行(Run)”按钮,运行程序。

两台计算机同时运行本程序。

在一台计算机程序窗体中发送字符区输入要发送的字符,比如“收到信息请回字符abc123”,单击“发送字符”按钮,发送区的字符串通过COM1口发送出去。

如果联网通信的另一台计算机程序收到字符,则返回字符串,如“收到,abc123”;

如果通信正常该字符串将显示在接收区中。

程序运行界面如图13-7所示。

图13-6框图程序连线图13-7程序运行界面

6.单PC双串口互通信程序

如果只有一台计算机且具有两个串口,那么可以通过串口线将两个串口直接连接起来,如图13-8所示,编写程序实现双串口互通信。

图13-9是单PC双串口互通信程序的前面板。

图13-10是单PC双串口互通信程序的后面板。

(a)(b)

图13-8双串口直接连接

图13-9单PC双串口互通信程序的前面板

图13-10单PC双串口互通信程序的后面板

13.2PC与单片机串口通信程序设计

目前,在许多单片机应用系统中,上、下位机分工明确,作为下位机核心器件的单片机往往只负责数据的采集和通信,而上位机通常以基于图形界面的Windows系统为操作平台。

为便于查询和保存数据,还需要数据库的支持,这种应用的核心是数据通信,它包括单片机和上位机之间、客户端和服务器之间以及客户端和客户端之间的通信,而单片机和上位机之间数据通信则是整个系统的基础。

图13-11单片机实验板

单片机和PC的通信是通过单片机的串口和PC串口之间的硬件连接实现的。

图13-11所示是本设计使用的单片机实验板。

有关单片机实验板的详细信息请查询电子开发网http:

//www.dzkfw.com/。

13.2.1PC与单片机串口通信程序设计硬件线路

PC

图13-12PC与单片机串口通信线路

如图13-12所示,数据通信的硬件上采用3线制,将单片机和PC串口的3个引脚(RXD、TXD、GND)分别连在一起,即将PC和单片机的发送数据线TXD与接收数据RXD交叉连接,两者的地线GND直接相连,而其他信号线,如握手信号线均不用,采用软件握手的方式,这样既可以实现预定的任务又可以简化电路设计。

但由于单片机的TTL逻辑电平和RS-232C的电气特性完全不同,RS-232C的逻辑0电平规定为+3V~+15V之间,逻辑1电平为−3V~−15V之间,因此在将PC和单片机的RXD和TXD交叉连接时必须进行电平转换,这里使用的是MAX232电平转换芯片。

单片机系统有LED显示器模块、继电器输出模块、蜂鸣器模块等。

13.2.2PC与单片机串口通信程序设计任务

利用KeilC51和LabVIEW编写程序实现PC与单片机串口通信。

任务要求有以下几方面。

1.设计任务一

PC通过串行口将数字(00,01,02,03...,FF,十六进制)发送给单片机,单片机收到后回传这个数字,PC接收到回传数据后显示出来,若发送的数据和接收到的数据相等,则串行通信正确,否则有错误。

启始符是数字00,结束符是数字FF。

2.设计任务二

(1)测试通信状态。

先在文本框中输入字符串“Hello”,单击“测试”按钮,将字符串“Hello”发送到单片机,若PC与单片机通信正常,在PC程序的文本框中显示字符串“OK!

”,否则显示字符串“ERROR!

(2)循环计数。

单击“开始”按钮,文本框中数字从0开始累加,0、1、2、3…,并将此数发送到单片机的显示器上显示。

当累加到10时,回到0重新开始累加,依次循环。

任何时候,单击“停止”按钮,PC程序中和单片机显示器都停止累加;

再单击“开始”按钮,接着停下的数继续累加。

(3)控制指示灯。

在单片机继电器接线端子的两个通道上分别接上两个指示灯,在PC程序画面上选择指示灯号,如1号灯,单击画面“打开”按钮,单片机上1号灯亮,同时蜂鸣器响;

单击画面“关闭”按钮,1号灯灭,蜂鸣器停止响,同样控制2号灯的亮灭(蜂鸣器同时动作)。

单片机和PC通信,在程序设计上涉及两个部分的内容。

一是单片机的C51程序,二是PC的串口通信程序和界面的编制。

13.2.3任务实现

13.2.3.1利用KeilC51实现单片机与PC串口通信任务一

KeilC51软件是众多单片机应用开发的优秀软件之一,它集编辑、编译、仿真于一体,支持汇编、PLM语言和C语言的程序设计,界面友好,易学易用。

启动KeilC51,出现编辑界面。

1.建立一个新工程

单击Project菜单,在弹出的下拉菜单中选中NewProject选项,出现CreateNewProject对话框,然后选择要保存的路径、文件夹,输入工程文件的名字,如pc_com(后缀名默认),单击“保存”按钮。

这时会弹出一个“SelectDeviceforTarget‘Target1’”对话框,要求用户选择单片机的型号,可以根据使用的单片机来选择,KeilC51几乎支持所有的51核的单片机。

这里选择Atmel的89C51。

选择89C51之后,右边一栏是对这个单片机的基本的说明,然后单击“确定”按钮。

2.编写程序

单击“File”菜单,再在下拉菜单中单击“New”选项。

此时光标在编辑窗口里闪烁,这时可以键入用户的应用程序了,但建议首先保存该空白的文件。

单击菜单上的“File”项,在下拉菜单中选中“SaveAs”选项,在“文件名”栏右侧的编辑框中键入欲使用的文件名,同时,必须键入正确的扩展名,如pc_com.c,然后单击“保存”按钮。

如果用C语言编写程序,则扩展名为(.c);

如果用汇编语言编写程序,则扩展名必须为(.asm)。

回到编辑界面后,单击“Target1”前面的“+”号,再在“SourceGroup1”上单击鼠标右键,弹出快捷菜单,然后单击“AddFiletoGroup‘SourceGroup1’”。

选中pc_com.c,然后单击“Add 

”按钮,再单击“Close 

”按钮。

此时注意到“SourceGroup1”文件夹中多了一个子项“pc_com.c”。

子项的多少与所增加的源程序的多少相同。

现在,请输入C语言源程序。

在输入程序时,读者可以发现事先保存待编辑的文件的好处,即KeilC51会自动识别关键字,并以不同的颜色提示用户加以注意,这样会使用户少犯错误,有利于提高编程效率。

3.编译程序

单击“Project”菜单,在下拉菜单中选择“OptionsforTarget‘Target1’”选项,出现对话框;

选择Output选项卡,选中“CreateHEXFiles”项,单击“确定”按钮。

再单击“Project”菜单,在下拉菜单中选择“BuiltTarget”选项(或者使用快捷键F7),进行编译。

若有错误会在output窗口提示,可根据此提示,找出错误并修改,直至编译通过,如图13-13所示。

图13-13KeilC51编译界面

至此,用KeilC51上做了一个完整工程,其中,生成一个编程器烧写文件pc_com.hex。

4.烧录程序

将AT89C51芯片安装在编程器插座上,运行编程器程序。

选择单片机芯片类型AT89C51,读入IntelHex文件pc_com.hex,执行自动编程指令,将pc_com.hex文件烧录入AT89C51芯片中。

将烧录好的AT89C51芯片安装到单片机实验板上,就可以用串口调试助手程序对它进行测试了。

以下是完成单片机与PC串口通信任务1的C51参考程序:

#pragmadbcode

#include<

reg51.h>

#defineucharunsignedchar

voidrece(void);

voidinit(void);

ucharre[17];

/*主程序*/

voidmain(void)

{

uchartemp;

init();

do{

while(RI==0);

temp=SBUF;

if(temp==0x00)

{rece();

}

elsebreak;

}while

(1);

/*串口初始化*/

voidinit(void)

{

TMOD=0x20;

//定时器1--方式2

PCON=0x80;

//电源控制

SCON=0x50;

//方式1

TL1=0xF3;

TH1=0xF3;

//22.1184MHz晶振,波特率为48000xf396000xfa192000xfd

TR1=1;

/*接收返回数据*/

voidrece(void)

chari;

i=0;

do{while(RI==0);

re[i]=SBUF;

RI=0;

SBUF=re[i];

while(TI==0);

TI=0;

i++;

}while(re[i-1]!

=255);

13.2.3.2利用LabVIEW实现PC与单片机串口通信任务一

Path)→字符串输入控件(StringControl),将标签改为“发送数据(十六进制)”,在该控件上单击鼠标右键,在弹出的快捷菜单中选择“十六进制显示(HexDisplay)”。

Path)→字符串显示控件(StringIndicator),将标签改为“返回数据(十六进制)”,在该控件上单击鼠标右键,在弹出的快捷菜单中选择“十六进制显示(HexDisplay)”。

(3)添加一个字符显示控件:

Path)→字符串显示控件(StringIndicator),将标签改为“通信状态”。

(4)添加一个串口资源检测控件:

控件(Controls)→新式(Modern)→I/O→VISA资源名称(VISAresourcename);

单击控件箭头,选择串口号,如ASRL1:

或COM1。

图13-14程序前面板

(5)添加一个确定按钮控件:

控件(Controls)→新式(Modern)→布尔(Boolean)→确定按钮(OKButoon),将标题改为“发送”。

(6)添加一个停止按钮控件:

控件(Controls)→新式(Modern)→布尔(Boolean)→停止按钮(StopButoon),将标题改为“关闭”。

设计的程序前面板如图13-14所示。

3.框图程序设计——添加函数与连线

编程(Programming)→仪器I/O(InstrumentI/O)→串口(Serial)→VISA配置串口(VISAConfigureSerialPort)。

编程(Programming)→数值(Numeric)→数值常量(NumericConstant),值分别为4800(波特率)、8(数据位)、0(校验位,无)、1(停止位)。

(3)添加一个While循环结构:

编程(Programming)→结构(Structures)→While循环(WhileLoop)。

(4)添加一个关闭串口函数:

编程(Progra

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1