基于LabVIEW的PC机与单片机串口通信_第1页
基于LabVIEW的PC机与单片机串口通信_第2页
基于LabVIEW的PC机与单片机串口通信_第3页
基于LabVIEW的PC机与单片机串口通信_第4页
基于LabVIEW的PC机与单片机串口通信_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 课程设计任务书学生姓名: 李晓宁 郁金华 彭亚斌 吴冰 专业班级 0882022 0882021 指导教师: 杨谊华 工作单位: 南昌航空大学 题 目: 基于labview的pc机与单片机串口通信 初始条件:要求对单片机课程知识有所了解,同时熟悉labview软件的运用,同时了解基本的串口通信原理。指导教师签名:_ 年 月 日系主任(或责任教师)签名:_ 年 月 日摘 要介绍一种基于labview 70语言的avr at90系列单片机与pc机的串口通信技术,在体温检测中得到应用,并取得良好效果。 关键词: labview 70语言;avr at90系列中一片机;pc机;串口通信技术abstr

2、act:we introduce the application of serial port communication technology based on pc machine with labview 70 language and avr at90 series scm in body temperature examinationand it has good effectkey words:labview 70 language;avr at90 series scm;pc machine;serial port communication technology目 录第一章 绪

3、论1第二章 软件实现221 labview应用软件概述222 labview串口通信模块223 labview通信模块的属性324 串口通信程序结构3第三章 程序设计43.1 单片机通信的设计43.2 pc机通信的设计43.3 输入显示程序设计4 3.3.1 led 显示流程图63.4 单片机收发程序73.5 pc机收发程序83.6 硬件连接9第四章 利用labview实现pc与单片机串口通信任务124.1 建立新vi程序124.2程序前面板设计124.3框图程序设计添加函数与连线124.4运行程序15致 谢16参考文献17第一章 绪论 在计算机分布式测控系统中,经常要利用串行通信方式进行数据

4、通信。它包括单片机和上位机之间、客户端和服务器之间以及客户端和客户端之间的通信,而单片机和上位机之间数据通信则是整个系统的基础。串行通信是一种常用的数据传输方法,虽然它的传输速度慢,但由于它占用的通信线路少、成本低、容易实现等优点,在数据通信方式上仍占有重要地位。目前,串口通信程序的开发,在windows操作系统下一般用vb、vc、vf delphi等等许多高级语言编写。当用vb、vc、vf,开发串行通信程序时,开发人员不得不面对非常烦琐的api函数编程;而delphi没有自带的串口通信控件,在它的帮助文档里也没有提及串口通信,这也给编程人员带来许多不便,其他高级语言也是如此。可见,用文本语言

5、编串口通信程序较为复杂,花费的时间较长。利用labview70开发pc机与单片机的串口通信程序是一种更为简捷的方法。第二章 软件实现21 labview应用软件概述 labview是一个工业标准的图形化开发环境,它结合了图形化编程方式的高性能与灵活性以及专为测试测量与自动化控制应用设计的高端性能与配置功能,能为数据采集、仪器控制、测量分析与数据显示等各种应用提供必要的开发工具。因此,labview通过降低应用系统开发时间与项目筹建成本帮助科学家与工程师们提高工作效率。labview被广泛应用于各种行业中,包括汽车、半导体、航空航天、交通运输、高校实验室、电信、生物医药与电子等无论在哪个行业中,

6、工程师与科学家们都可以使用labview创建功能强大的测试测量与自动化控制系统,在产品开发中进行快速原型创建与仿真工作。在产品生产过程中,工程师们也可以利用labview进行生产测试,监控各个产品生产过程。总之,labview可用于各行各业产品开发的阶段。由于labview能够为用户提供简明、直观、易用的图形编程方式,能够将繁琐复杂的语言编程简化成为以菜中提示方式选择功能,并且用线条将各种功能连接起来,十分省时简便。与传统的编程语言比较,labview图形编程方式能够节省85%以上的程序开发时间,其运行速度却几乎不受影响,体现出了极高的效率。使用虚拟仪器产品,用户可以根据实际生产需要重新构筑新

7、的仪器系统。例如,用户可以将原有的带有rs232接口的仪器、vxi总线仪器以及gpib仪器通过计算机,联接在一起,组成各种各样新的仪器系统,由计算机进行统一管理和操作1,2。22 labview串口通信模块 在labview 70中,对串行口进行控制的方式通常有两种:一是利用labview功能模块的lnstrument 1/0-visa子模块;二是直接利用labview功能模块lnstrument 1/0一>serial子模块,该程序库中包含进行串行通信操作的一些功能模块这正符合本软件开发的需要23 labview通信模块的属性表(1)给出了本系统用到的几个通信模块的基本属性的描述2.4

8、 串口通信程序结构 本程序主要采用顺序结构实现,具体流程描述如下:(1)初始化串口。据实际需要选择并打开com口,打开串口时根据双方协议设置波特率、数据位、奇偶校验位、停止位、缓冲区大小等。如果打开串口无误,指小灯亮;否则提小串口出错,并关闭串口。初始化成功后,退出第一桢,进入第二桢。(2)输入命令字到串口。因双方约定单片机输入的命令字为一六进制的55 (asc 码字符表示为u),故在程序框图中输入的字串若用 asc 码字符表示为u,用hi;x进制表示为55。若写入的命令字有误,或写入串口模块打不开,出现出错提小,重新要求打开串口。(3)延时因涉及在操作系统的几层间传递信息,加之从主机发送命令

9、到单片机,单片机判断为正确命令后返回数据给主机是需要一定的时间的,故这一步进行延时等待。延时时间可视情祝而定,只要大于单片机回送给主机的时间就行。具体执行时间可由labview工具菜中栏下的advanced下的profile来确定程序运行时间。若不加以延时程序会有出错提示。(4)显示部分,主要程序代码如图二所示根据需要进行图形及表格显示。为能准确计算被测信号的频率值,使前面板横轴表示的时间尽可能准确,在显示图形graph iju用bundle进行处理。实践表明:通过这种处理方式,可使被测信号的频率值误差在百分之三以内。在数组显示用一个重构数组函数将单片机送来的数据构建成一个10行8列的数组,后

10、利用两层for循环实现数组的行列显示。第三章 程序设计设计思路:本设计分单片机和pc机两部分进行编程。在单片机方面,使用汇编语言,用中断方式接收和发送数据。单片机有五个终端源,本设计使用串行口中断请求标志ri或ti,当串行口接收完一帧串行数据时置位ri或当发送完一帧串行数据时置位ti,向cpu申请中断;在pc机方面,pc机数据的接收和发送采用visualbasic中的通讯控件msc0mm。设计中使用led数码管显示发送或接收到数据;使用46的矩阵式键盘发送数据。3.1单片机通信的设计单片机完成通信数据的收发功能主要分为2个步骤。 串口波特率的设定通常使用单片机的串口时,选用的晶振比较固定,常用

11、于何微机通信的波特率也相对固定。本设计设定通讯波特率为9600。 串口初始化串口初始化主要是设置产生波特率的定时器1、串行口控制和串口的中断控制。具体步骤如下。l 确定定时器1的工作方式写tmod寄存器。l 计算定时器1的初值装载th1、tl1。l 启动定时器1写tcon中的tr1位。l 确定串口的控制写scon。l 使用串口中断方式时,开cpu和中断源写ie寄存器。本设计设定定时器t1工作在模式2,串行口工作于方式3。3.2 pc机通信的设计msc0mm控件不需要用户对通讯底层进行操作。它有事件驱动通讯和查询通讯两种方式。本设计中采用事件驱动方式,即接收缓冲区每接受规定字符数产生一次msco

12、mmonc0mm事件,发送时设置不产生该事件。3.3 输入显示程序设计设计中使用7段led数码管显示发送或接收到数据;使用46的矩阵式键盘发送数据。程序可分为三个模块。 键输入模块:扫描键盘、读取一次键盘并将键值存入键值缓冲单元。 显示模块:将显示单元的内容在显示器上动态显示。 主程序:调用键输入模块和显示模块。键盘扫描中,向列扫描码地址逐列输出低电平,然后从行码地址读回。如果有键按下,则相应行的地址应为低,如果无键按下,由于上拉的作用,行码为高。这样就可以通过输出的列码和读取的行码来判断按下的是什么键了,由于在建的闭合和断开过程中有一个抖动期,抖动时间长短和开关的机械特性有关,一般为510m

13、s,为了保证cpu对键的闭合做一次且仅一次的处理,在编程时要有一定的延时,本设计设定了30ms的延时来防止按键抖动。程序框图如下: 主程序框图 读键输入子程序框图开始开始初始化地址参数显示缓冲区初始化输出列扫描信号led显示有键输入? 列扫描信号复位 n读入行信号 y 读取键值 该列有键输入?键值转换为显示数据 y n6列扫描完? n y返回按照行列计算键值查表得键码返回等待按键释放led显示流程图开始初始化显示参数关所有位显示取显示数据输出段码数据输出位选通信号 否延时位选通信号移位指向下一个显示数据 是8位完成? 返回3.4 单片机收发程序单片机发送数据流程图 单片机接收数据流程图主程序开

14、始主程序开始串行口初始化串行口初始化led初始化led初始化开中断设定波特率清接收中断标志r1单片机小键盘按下保护现场lcd显示按下的字符接收pc机发来数据向pc机发送字符 否开中断,恢复现场接受正确返回读接收寄存器内容 是在pc机屏幕上显示按下的字符返回3.5 pc机收发程序pc机发送数据流程图 pc机接收数据流程图串口初始化串口初始化等待控制命令等待控制命令打开串口接收数据打开串口发送数据接收数据的事件触发发送数据的事件触发 否 否在文本框中显示数据数据在led数码管上显示显示正确显示正确 是 是3.6 硬件连接 图一:图二:图三:第四章 利用labview实现pc与单片机串口通信任务4.

15、1.建立新vi程序启动ni labview程序,选择新建(new)选项中的vi项,建立一个新vi程序。4.2程序前面板设计8 在前面板设计区空白处单击鼠标右键,显示控件选板(controls)。(1)添加一个字符串输入控件:控件(controls)新式(modern)字符串与路径(string & path) 字符串输入控件(string control),将标签改为“发送数据(十六进制)”,在该控件上单击鼠标右键,在弹出的快捷菜单中选择“十六进制显示(hex display)”。(2)添加一个字符串显示控件:控件(controls)新式(modern)字符串与路径(string &a

16、mp; path)字符串显示控件(string indicator),将标签改为“返回数据(十六进制)”,在该控件上单击鼠标右键,在弹出的快捷菜单中选择“十六进制显示(hex display)”。(3)添加一个字符显示控件:控件(controls)新式(modern)字符串与路径(string & path)字符串显示控件(string indicator),将标签改为“通信状态”。(4)添加一个串口资源检测控件:控件(controls)新式(modern) i/o visa资源名称(visa resource name);单击控件箭头,选择串口号,如asrl1:或com1。图4.2-

17、1 程序前面板(5)添加一个确定按钮控件:控件(controls)新式(modern)布尔(boolean)确定按钮(ok butoon),将标题改为“发送”。(6)添加一个停止按钮控件:控件(controls)新式(modern)布尔(boolean)停止按钮(stop butoon),将标题改为“关闭”。设计的程序前面板如图4.2-1所示。4.3框图程序设计添加函数与连线8 进入框图程序设计界面,在设计区的空白处单击鼠标右键,显示函数选板(functions)。(1)添加一个配置串口函数:编程(programming) 仪器i/o(instrument i/o) 串口(serial) vi

18、sa配置串口(visa configure serial port)。(2)添加4个数值常量:编程(programming) 数值(numeric) 数值常量(numeric constant),值分别为4800(波特率)、8(数据位)、0(校验位,无)、1(停止位)。(3)添加一个while循环结构:编程(programming) 结构(structures) while 循环(while loop)。(4)添加一个关闭串口函数:编程(programming) 仪器i/o(instrument i/o) 串口(serial) visa关闭(visa close)。(5)在while循环结构中

19、添加一个条件结构:编程(programming) 结构(structures) 条件结构(case structure)。(6)在条件结构中添加一个顺序结构:编程(programming) 结构(structures) 层叠式顺序结构(stacked sequence structure)。将其帧(frame)设置为4个(序号0-3)。设置方法:选中stacked sequence structures上边框,单击鼠标右键,执行在后面添加帧(add frame after)选项3次。(7)在顺序结构的frame 0中添加一个串口写入函数:编程(programming) 仪器i/o(instru

20、ment i/o)串口(serial) visa写入(visa write)。(8)将控件“发送数据(十六进制)”的图标拖入顺序结构的frame 0中,分别将确定按钮(ok button)、停止按钮(stop buffon) 的图标拖入循环结构中。(9)将visa资源名称(visa resource name)函数的输出端口分别与串口配置(visa configure serial port)函数、串口写入(visa write)函数(在顺序结构frame 0中)、串口关闭(visa close)函数的输入端口visa资源名称(visa resource name)相连。(10)将数值常量48

21、00、8、0、1分别与visa配置串口(visa configure serial port)函数的输入端口波特率(baud rate)、数据位(data bits)、奇偶(parity)、停止位(stop bits)相连。(11)右键选择循环结构的条件端子,设置为“真时停止(stop if true)”,图标变为。将停止按钮(stop buffon)与循环结构的条件端子相连。(12)将确定按钮(ok button)与条件结构的选择端子?相连。(13)将函数“发送数据(十六进制)”与串口写入(visa write)函数的输入端口写入缓冲区(write buffer)相连。连接好的框图程序如图4

22、.3-1所示。(14)在顺序结构的frame 1中添加一个时钟函数:编程(programming)定时(timing) 等待下一个整数倍毫秒(wait until next ms multiple)。(15)在顺序结构的frame 1中添加一个数值常量:编程(programming)数值(numeric) 数值常量(numeric constant),将值改为200(时钟频率值)。(16)在顺序结构的frame 1中将数值常量(值为200)与等待下一个整数倍毫秒(wait until next ms multiple)函数的输入端口毫秒倍数(millisecond multiple)相连。连接

23、好的框图程序如图4.3-2所示。 图4.3-1 框图程序连线1 图4.3-2 框图程序连线2 (17)在顺序结构的frame 2中,添加一个串口字节数函数:编程(programming) 仪器i/o(instrument i/o)串口(serial) visa串口字节数(visa bytes at serial port),标签为“property node”。(18)在顺序结构的frame 2中,添加一个串口读取函数:编程(programming) 仪器i/o(instrument i/o)串口(serial) visa读取(visa read)。(19)将控件“返回数据(十六进制)”的图标

24、拖入顺序结构的frame 2中。(20)将visa串口字节数(visa bytes at serial port)函数的输出端口visa资源名称(visa resource name)与visa读取(visa read)函数的输入端口visa资源名称(visa resource name)相连。(21)将visa串口字节数(visa bytes at serial port)函数的输出端口number of bytes at serial port与串口读取(visa read)函数的输入端口字节总数(byte count)相连。(22)将visa读取(visa read)函数的输出端口读取缓

25、冲区(read buffer)与控件“返回数据(十六进制)”的输入端口相连。连接好的框图程序如图4.3-3所示。图4.3-3 框图程序连线3(23)在顺序结构的frame 3中,添加两个局部变量:编程(programming) 结构(structures)局部变量(local variable)。选择局部变量,单击鼠标右键,在弹出的快捷菜单的(select item)选项下,为局部变量分别选择对象:“返回数据(十六进制)”和“发送数据(十六进制)”,将其读写属性设置为“转换为读取(change to read)”。(24)在顺序结构的frame 3中,添加一个比较函数:编程(programmi

26、ng)比较(comparison)等于?(equal ?)。(25)在顺序结构的frame 3中,添加一个条件结构:编程(programming) 结构(structures)条件结构(case structure)。(26)将局部变量“返回数据(十六进制)”和“发送数据(十六进制)”分别与比较函数等于?(equal ?)的输入端口x和y相连。(27)将比较函数等于?(equal ?)的输出端口x=y?与条件结构的选择端子?相连。(28)在条件结构的真(true)选项中,添加一个字符串常量:编程(programming) 字符串(string) 字符串常量(string constant),将其值改为“通信正常!”。(29)将控件“通信状态”拖入条件结构中。(30)将字符串常量“通信正常!”与控件“通信状态”的输入端口相连。(31)在条件结构的假(false)选项中,添加一个字符串常量,将其值改为“通信异常!”。(32)在条件结构的假(false)选项中,添加一个局部变量,为局部变量选择对象“通信状态”,属性默认为:“写”。(33)将字符串常量“通信异常!”与局部变量“通

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论