




已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
基于组态的PC机串口通信程序设计东北农业大学学士学位论文 学号:A07070340 学生姓名:常明伟指导教师:董守田所在院系:工程学院电气工程系所在专业:农业电气化与自动化研究方向:东 北 农 业 大 学中国哈尔滨 Dissertation for Bachelor Degree of Northeast Agriculture University No.:A07070340 Name:Chang Mingwei Supervisor:Dong ShoutianTutor:Engineering Electrical engineering Major :Production Automation Direction :Northeast Agricultural UniversityHarbinChina 摘 要LabVIEW7.0是NI公司开发的图形化编程开发平台,具备强大的实时数据处理功能与显示功能。通常情况下,在LabVIEW开发环境中进行串口通信使用VISA和ActiveX控件两种方式均可以进行,通过结合实例比较,发现VISA方式只能提供查询缓冲区方式接收数据,这需要占用大量的CPU时间,且实时性不佳。相对而言,使用微软提供的MSCOMM32控件的中断函数处理功能,可以实现中断方式的接收数据。同时,MSCOMM32控件可以单独设置串口的每一个引脚,便于实现高级的用户自定义功能。本次设计是介绍一种基于LabVIEW 70语言的AVR AT90系列PC机与单片机的串口通信技术,在体温检测中得到应用,并取得良好效果。关键词:LabVIEW;串口;通信;VISA;ActiveXAbstractLabVIEW is the NI company s graphic programming language that is able to fulfill ability on handling real-time data and showing. Generally, either VISA or ActiveX control could realize the communication with serial ports under LabVIEW language environment,but the ways that they received data are different.The way based on VISA receive data only through query buffer of serial ports, so it impropriate a lot of time of CPU and not have good real time capability. In relative terms, the MSCOMM32 control could offer query interrupt function that achieve receive data through querying interrupt. At the same time, the latter could define every pin of a serial port,so the senior users realize the user-defined functions conveniently. 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 effectKeywords:LabVIEW; serial port; Communication; VISA; ActiveX1目 录摘 要1目 录21 前言3 1.1目的与意义 1.2LabVIEW的概念 1.3LabVIEW在串口通信中的成就与发展 1.4要解决的问题2 硬件电路设计 2.1串口扩展2.2串口功能的确认 2.3串口线检查 2.4串口参数的设置 2.5在LabVIEW中使用串口 2.5.1仪器控制类型 2.5.2被动接收类型 2.6串口数据类型的转换 2.6.1 LabVIEW从串口接受数据 2.6.2使用LabVIEW发送数据3 软件实现53.1 LabVIEW应用软件概述53.2 LabVIEW串口通信模块53.3 LabVIEW通信模块的属性63.4 串口通信程序结构63.5 串口通信技术在体温检测中的应用74 程序设计84.1单片机通信的设计84.2 PC机通信的设计84.3 输入显示程序设计94.3.1 LED 显示流程图103.4 单片机收发程序113.5 PC机收发程序123.6 硬件连接13致 谢27参考文献272前言1.1目的与意义在计算机分布式测控系统中,经常要利用串行通信方式进行数据通信。它包括单片机和上位机之间、客户端和服务器之间以及客户端和客户端之间的通信,而单片机和上位机之间数据通信则是整个系统的基础。串行通信是一种常用的数据传输方法,虽然它的传输速度慢,但由于它占用的通信线路少、成本低、容易实现等优点,在数据通信方式上仍占有重要地位。目前,串口通信程序的开发,在Windows操作系统下一般用VB、VC、VF Delphi等等许多高级语言编写。当用VB、VC、VF,开发串行通信程序时,开发人员不得不面对非常烦琐的API函数编程;而Delphi没有自带的串口通信控件,在它的帮助文档里也没有提及串口通信,这也给编程人员带来许多不便,其他高级语言也是如此。可见,用文本语言编串口通信程序较为复杂,花费的时间较长。利用LabVIEW70开发PC机与单片机的串口通信程序是一种更为简捷的方法。1.2LabVIEW的概念与 C 和 BASIC 一样,LabVIEW也是通用的编程系统,有一个完成任何编程任务的庞大函数库。LabVIEW 的函数库包括数据采集、GPIB、串口控制、数据分析、数据 、显示及数据存储,等等。LabVIEW 也有传统的程序调试工具,如设置断点、以动画方式显示数据及其子程序(子VI)的结果、单步执行等等,便于程序的调试。 LabVIEW(Laboratory Virtual Instrument Engineering Workbench)是一种用图标代替文本行创建应用程序的图形化编程语言。传统文本编程语言根据语句和指令的先后顺序决定程序执行顺序,而 LabVIEW 则采用数据流编程方式,程序框图中节点之间的数据流向决定了VI及函数的执行顺序。VI指虚拟仪器,是 LabVIEW的程序模块。 LabVIEW提供很多外观与传统仪器(如示波器、万用表)类似的控件,可用来方便地创建用户界面。用户界面在 LabVIEW中被称为前面板。使用图标和连线,可通过编程对前面板上的对象进行控制。这就是图形化源代码,又称G代码。LabVIEW的图形化源代码在某种程度上类似于流程图,因此又被称作程序框图码。LabVIEW是一个具有革命性的图形化开发环境,它内置信号采集、测量分析与数据显示能,摒弃了传统开发工具的复杂性,为您提供强大功能的同时还保证了系统灵活性。LabVIEW将广泛的数据采集、分析与显示功能集中在了同一个环境中,让您可以在自己的平台上无缝地集成一套完整的应用方案。1.3LabVIEW在串口通信中的成就与发展虚拟仪器研究的另一个问题是各种标准仪器的互连及与计算机的连接。目前使用较多的是 IEEE 488 或 GPIB协议。未来的仪器也应当是网络化的。LabVIEW(Laboratory Virtual instrument Engineering Workbench)是一种图形化的编程语言的开发环境,它广泛地被工业界、学术界和研究实验室所接受,视为一个标准的数据采集和仪器控制软件。LabVIEW 集成了与满足 GPIB、VXI、RS-232 和 RS-485 协议的硬件及数据采集卡通讯的全部功能。它还内置了便于应用TCP/IP、ActiveX 等软件标准的库函数。这是一个功能强大且灵活的软件。利用它可以方便地建立自己的虚拟仪器,其图形化的界面使得编程及使用过程都生动有趣。图形化的程序语言,又称为 “” 语言。使用这种语言编程时,基本上不写程序代码,取而代之的是流程图或框图。它尽可能利用了技术人员、科学家、工程师所熟悉的术语、图标和概念,因此,LabVIEW 是一个面向最终用户的工具。它可以增强你构建自己的科学和工程系统的能力,提供了实现仪器编程和数据采集系统的便捷途径。使用它进行原理研究、设计、测试并实现仪器系统时,可以大大提高工作效率。利用 LabVIEW,可产生独立运行的可执行文件,它是一个真正的32位/64位编译器。像许多重要的软件一样,LabVIEW提供了Windows、UNIX、Linux、Macintosh的多种版本。它主要的方便就是,一个硬件的情况下,可以通过改变软件,就可以实现不同的仪器仪表的功能,非常方便,是相当于软件即硬件!现在的图形化主要是上层的系统,国内现在已经开发出图形化的单片机编程系统(支持32位的嵌入式系统,并且可以扩展的),不断完善中(大家可以搜索 CPUVIEW 会有更详细信息;)。1.4要解决的问题2硬件电路设计2.1串口扩展串口的扩展,一般的台式机或工控机上都至少有二个串口,一般都是够用的,但是现在市场上已经很难找到带串口的笔记本了,而有时候在外出调试时需要在笔记本中使用到串口的,这时一般是使用USB-RS232的转接线,价格从十几到一百多都有,很多朋友反应在使用价格低的转接线时会出现乱七八糟的问题,而贵一点的线就很少听说有其它问题的,所以大家在使用便宜的USB-RS232转接线时要特别注意线的质量,遇到一些奇怪的问题时先考虑换一根好一点的线。PCI-RS232扩展卡也同理,便宜的卡也容易出问题,尽量买好一点的,以免因小失大。PCI-RS232一般至少能扩展2个串口,有些BT一点的可以扩展到8-16个,一堆线和接头。转接线和扩展卡一般是要装驱动的。2.2串口功能的确认在使用串口之前,最好先确认一下串口是否正常,特别是使用转换接或扩展卡的。检查的方法很简单,就是将串口的2、3脚短接起来,3脚是发送数据,2脚接收数据,就是这个串口自发自收。电脑上的串口软件一般是用串口调试助手,很出名的,也好用。如下图所示:图1 串口调试助手打开软件,选择已经短接好的串口号,点击“手动发送”,如果串口是好的,2、3脚又短接起来了,马上就可以在上面的接收框里看到接收的数据就是发送的数据。稍微要注意一下的是有些电脑的COM1和COM2的位置是反过来的,所以要确定好串口调试助手左上角的串口上择的是已经短接的那一个,如果COM1没接收到,可以再先COM2再发一次看一下。2.3串口线的检查检查好串口后,一般也要注意一下使用的串口线,标准的串口线是9根线都是用上的,但有一些是只使用了三根线的:2、3、5。第3个脚管是发送,第2个管脚接收,另一个5是地线,这里叫它简化的串口线,简化的串口线能用上的地方,标准的串口线也肯定能用上,因为标准线的9根线已经包括了简化串口线中的3根线,但标准串口线能用上的地方,简化串口线就不一定能用上,所以在使用串口线之间一定要确定好串口线的类型,一般买的串口线都是标准线,但自制的串口线因为应用场合不同就要先确定一下。G串口线还有一个地方需要注意一下的,就是2、3脚的接法,标准接法中是2、3脚交叉的,即这边的2接另一边的3,这边的3接另一边的2,扭了一下,所以叫交叉线,因为正常使用时,这边第二脚是发送数据,另一边第三脚是接收数据,所以要将这二个管脚连接起来,这样才能正常使用。但是有些情况下,2、3是直连的,即这边的第2脚连接另一边的第2脚,第3脚连接第3脚,这种叫直连线,这种线一般是用于延长串口的,比如需要将工控机的串口接头引到机柜表面上时,就使用这种线,这样机柜表面的串口线的定义还是跟电脑接出来的一样,外面的那一根串口线再使用交叉线。从电脑主板上将串口引到主机后面板上的线就是这样的直连线。购买串口线的时候一般也会问你买直连的还是交叉的,要区别对待。串口线还有一个要稍微注意一下的就是DB头,因为电脑上接出来的一般是公头(针),要跟电脑接的话要母头(孔),一般仪器的串口也是公头,所以二边都是母头的串口线比较常见。串口的接头一般是DB9的,也有DB25的,但比较少用,有些比较BT的仪器厂家居然用RJ11(水晶头那种)作为串口头,让人不爽! 总之,使用串口前一定要先确定好硬件没问题,不然很浪费时间2.4串口参数的设置在LabVIEW中使用串口时,有几个参数比较重要,需要先说明一下的。一个是串口初始化这个节点的“终止符”和“禁用终止符?”这二个输入端,这二个输入端是相互作用的,“终止符”默认值为10,它的十六进制是“0x0A”,这是一个ASCII码,是一个换行符,可以从LabVIEW中的字符串的不同显示形式看出来,如下图:图2 串口消息终止符左边是字符串的正常显示,中间是十六进制显示,右边是“代码显示”,这三个字符串的值都是一样的。终止符是10,表示在接收数据时,遇到ASCII码为10的字符(即换行符)时就停止接收数据,后面会有例子进行说明。而“禁用终止符?”的默认值是FALSE,即启用终止符,启用终止符会有什么效果呢?终止符的意思就是当程序接收到这个字符时,就认为已经到了所有数据的未端了,从而停止接收,不管后面还有没有数据。终止符是10,表示在接收数据时,遇到ASCII码为10的字符(即换行符)时就停止接收数据。可以做一个很简单的试验,先短接串口2、3脚,然后将终止符设置为“0x33”,0x33是字符“3”的ASCII码,然后发送字符串可以看到接收回来的数据中只有“12”,即“3”被认为是字符串的未端了,它后面的数据就不再接收了。很多朋友就是因为这里设置错误,导致接收数据时有时候只收到一半就没有了,特别是在连续接收数据时,但又不是每次都只能收到一半,有时候也能接收齐全的,就是因为发送的数据中可能包含了终止符而使串口认为到了最后一个字符了。一般是将这个终止符禁用掉,即将“启用终止符?(Enable terminator?)”这一端输入为False即可。另外还有一个比较重要的设置,就是VISA READ的“读取字节数”这个输入,由于在串口通信中,如果指定读取100个串口缓冲区的字节数,如果当前缓冲区的数据量不足100个时,程序会一直停在VISA READ这个节点上,如果在超时的时间(默认是10秒)内还没有凑足100个数据的话,程序就会报“Time out”的错误,如果超时时间设置得太长,有可能导致程序很长时间停止在VISA READ这个节点上。解决的办法是使用“Bytes at Port”这个串口的属性节点,在VISASerialadvance下,也可以在VISA资源线上右键创建属性节点串口设置Bytes at Port,如下图: 图 3 Bytes at Port这个属性节点读取当前串口缓冲区有字节数,然后将它的输出连接到VISA READ的“读取字节数”这个输入端上即可,这样当前缓冲区中有多少个字节就读回多少个,不会有任何等待。图 4 使用Bytes at Port2.5在LabVIEW中使用串口目前串口的应用一般有二种类型的(以我接触到的来分类,不严格),一种是仪器控制类型的,一般是上位机发送一个指令,然后下位机作出响应,返回数据给上位机,上位机再读取出来,完成一次通信,即一问一答;另一类是被动接收形的,即下位机会一直发送数据上来。这二种类型的串口通信在处理上会不太一样。2.5.1仪器控制类型由于在仪器控制时一般都是这种一问一答的方式,所以叫它仪器控制类型。以仪器控制为例来说一下需要注意的事项。 首先是要确认仪器选择的通信模式是串口通信模式。现在的仪器一般都至少有二种通信模式,一种是RS232,一种是GPIB,如果仪器是设置为GPIB通信的话,RS232是不可能通信上的,所以要先确认一下,方法一般是在仪器面板上选择设置远程控制的某些参数是固定的,比如校验方法固定为奇校验,不能修改,只能在电脑上跟仪器设置为一样的。波特率一般是可以修改的。这些参数的配置一定要根据仪器手册上的来设置。如果参数设置不正确,也能收到一些数据,但一般是乱码,如果收到的数据都是乱码的话,就要先检查一下串口参数设置是否正确了。只有电脑和仪器边的串口参数完全一致时才能收到正确的数据。接着是要注意发送指令和读回数据之间要有一定的延时,即VISA WRITE和VISA READ之间要有一定的延时,一般200毫秒即可,因为串口是底层硬件,数据从软件到串口上要一点点时间,然后仪器对指令作出响应也要一点点时间,这些时间加起来肯定比软件运行二个节点的时间要短,所以延时是一定要加的。在调试时如果发现正常运行时不能收到数据,但高亮运行就能收到数据,就很有可能是没有加延时的原因!或者是发一个查询指令,但返回的是上一条查询指令的结果,也可能是因为没有延时或延时不够。2.5.2被动接受类型被动接收形的串口通信稍微麻烦一点,由于上位机是被动接收的,上位机不知道什么时候开始下位机就已经有数据上来了,很有可能下位机发送到一半时,上位机刚好开始接收数据,这时只能接收到后面一半的数据了,所以对于这种通信,一般是采用数据帧的方式进行通信。这种数据帧的通信方式至少由三部分数据组成:帧头、数据、帧尾(如果数据是固定长度的话,似乎帧尾也可以省掉)。帧头是为了告诉上位机:从这以后的数据就是有用的数据了,相当于约定好的暗号,一般帧头至少会用二个以上字节,如果只用一个字节的话,万一数据中的数据跟这个帧头一样了就会误以为这个数据是帧头从而导致解析数据出错,帧尾的作用也差不多,告诉上位机从这之前的数据才是有用的数据。但实际上一般的数据帧远不止这几个部分,还会加上一些校验字节、时间信息、帧计数器之类的东东在上面。其中校验字节是为了检查数据在传输过程中有没有出错的,跟串口的校验位要区分清楚,校验位也是检查数据传输时有没有出错的,但由底层硬件来实现,校验方法由标准规定好,但有几种可以选择,只有一个位(Bit,只能是0或1)。校验字节是由软件层来实现的,至少有一个字节(Byte,有8个位),而且校验方式由用户定义,非常灵活。 由于被动方式中串口的缓冲区中一直会有数据在,为了保持数据的连续性,在读取数据时跟第一种仪器控制类型不一样。而是采取将读取的所有的串口数据都保存在移位寄存器中,在软件上处理完这些数据后再将它们从移位寄存器中删除。由于VISA READ的输出是字符串,所以一般使用“连接字符串”这个函数将它们连接起来,然后接到循环结构中的移位寄存器中进行保存,当移位寄存器中的数据量达到一定时或满足数据处理的条件时,才停止这个循环输出读取到的数据。一般如下图所示:图 5 被动接收类型中的数据接收在接收下位机发送的帧数据时,一定要先了解帧格式,这样才能正确解析出帧里面的数据来。下面以例子来说明数据帧格式的通信。设定通信数据帧每7个字节为一帧数据,其中以0xAC、0x96二个字节作为数据帧头,第三、四个帧头为帧计数器,最大值为0xFFFF,到达最大值后重新从0开始计数,第4、5、6三个字节是数据信息,分别代表数据的高中低位,第7位为状态标志字节,它的第一位为1时表示下位机出错,为0时表示功能正常。由于LabVIEW中接收到的数据都是以字符串的形式显示出来的,所以需要将字符串转换为ASCII码,一般可以直接使用“转换为U8数组”这个函数,如下图所示:图 5 字符串转换为U8字节转换为U8字节后,得到的是所传输字符的ASCII码,我们就很容易进行数据帧的判断了,现收到以下的字符串数据:, 图 6 实际接收到的字符串上图中下半部分显示的数组是使用“字符串转换为U8数组”的函数转换之后得到的数组,一个是十六进制显示,另一个为十进制显示。对照定义的数据帧格式,就很容易得到我们需要的数据了。首先是要看从哪里开始才是完整的第一帧,从上面十六进制显示的数组中我们可以看到,并不是第一个字节就是我们需要的帧头,因为下位机是一直处于发送数据的状态,很可能在串口发送一帧数据的过程中串口就被初始化或者被清空了一次缓冲区,那么这一帧数据的前面部分数据可能就会丢失,只留下后面一部分数据。以上图为例子,第一二个字节为0x32、0x22,显示不是我们要的帧头,我们要的帧头是在第6、7个字节,以程序来实现的话就是先查找第一个帧头,使用“搜索字符串”,如果找到则判断它下一个字节是否是第二个帧头,如果是,表明已经找到帧头,输出帧头的位置;如果它下一个字节不是第二个帧头,说明这里不是真正的帧头,继续查找下一个帧头,直到找到帧头或搜索完整个字符串都找不到帧头。这是一个程序的算法问题,具体实现的程序如下图所示:图 7 帧头查找程序帧头查找到以后,再找数据就容易了,根据之前的定义,第4、5、6个字节是才是我们要的数据,所以直接使用索引号进行索引输出即可。图 8 获取实际数据一般情况下,如果是用三个字节表示一个数据的话,那么这三个字节分别表示为一个数据的高中低字节,即高字节要乘以25536再加上中字节乘以256再加上低字节的,这样定义后可表示的数据的范围就会扩大很多,但这里为了说明问题,直接认为三个字节的数据相加就是我们要的实际数据,在实际使用过程中应该根据帧格式的字义来解析这个数据。另外帧格式中定义了最后一个字节为状态标志位,所以提取数据前还要检查一下这个标志位是否正常,不正常时要进行相应的处理,这里不再详细描述。至此完成一次数据帧的提取。如果是没什么特殊的要求的话,这里应该也算到一段落了,有一些对测试时间有要求的地方,就会要求在最短的时间内得到最多的信息。图6中我们可以看到,接收到的数据帧中,除了中间一个完整的帧之外,头尾还有一些无用的数据,其实这些数据中也包含了有用的信息的!比如我们可以从0xAC、0x96这二个帧的位置中推断中它前面的0x22、0x2A、0x38这三个字节也是我们想要的数据字节,但是由于没有接收到它的帧头,所以程序没能提取出来,但我们可以从后一帧的帧头推算出前面那一帧的数据字节是哪些,即使没收到前面那一帧的帧这里只给出一个流程,不再给出具体的程序。另外有可能接收的数据长度比较长,可能就不止包含了一帧的数据在里面,所以在程序中也要判断一下剩下的数据还够不够一帧的数据长度,如果够则可以根据上一次查找的帧头位置+数据帧长度来确定下一个数据帧的帧头位置了,不需要使用搜索的方法。也可能存在处理完一帧数据后,剩下的数据不够一个帧的,这时可以将这些剩下的数据保留起来,将它添加到下一次接收到的数据前面,组成新的数据再进行处理。去掉已经处理的数据可以使用“删除数组元素”这个函数来实现。这里也不再给出具体的程序。2.6 串口数据类型的转换由于LabVIEW中VISA Read/Write这二个函数都是只能读取/写入字符串类型的数据的,而有时候需要接收/写入的数据类型不一定是字符串,导致在刚开始接触的时候会有一点困惑。在进行数据转换时,只要记住计算机中所有数据都是以二进制保存这个原则就容易解决问题了。串口线上传输的也是高低,串口接收到的也是二进制数据,只是到LabVIEW后被转换为字符串格式了。还是以例子进行解释。2.6.1 LabVIEW从串口接受数据假设LabVIEW从串口接收到的数据为“1234”(正常显示模式下),那么这个数据在串口底层的时候其实是这样的二进制数据: 0011000100110010 00110011 00110100只是在LabVIEW中,这些二进制数据是以字符串形式显示出来的,它们的实质还是二进制数据,这几个二进制数据转换为十进制数据分别是“49,50,51,52”,由于字符串都是以ASCII码形式保存在计算机中的,那么49,50,51,52这几个数在ASCII表中就表示是字符串“1,2,3,4”。所以这几个数据在LabVIEW中就显示为字符串的1,2,3,4了。如果明白这里面的转换关系,那么要进行数据转换时就很容易了,比如上面的例子中,如果LabVIEW中接收到的是字符串“1234”,而原本下位机传送的是数值型数据,只需要将“1234”字符串转换为对应的ASCII值就是实际上下位机传上来的数据了,就是“49,50,51,LabVIEW中将字符串转换为对应的ASCII值的函数是“字符串至字节数组转换”这个函数图 9 字符串转换为字节数组上面说的是下位机发送的是数值类型的数据的,使用“字符串至字节数组转换”这个函数.如果是下位面发送的是字符串类型的数据,那么LabVIEW已经直接转换好了。个人总结:无论下位机发送的是何种类型的数据,LABVIE从串口接收的时候,总是将每8位二进制数,作为字符的ASCII码解读。2.6.2使用LabVIEW发送数据还有一个问题是使用LabVIEW发送数据的问题如果下位机接收的是字符串数据类型的话,直接用VISA写入对应的字符串就行了,现在的仪器一般都是接收字符串的,所以可以直接使用VISA发送而不需要转换。如果下位机接收的是数值型数据的话,就需要转换一下,其中数值型又是十进制和十六进制二种用得比较多,这二种数据间相互转换一下就行了,其实是一样的。由于在LabVIEW中字符串直接有十六进制的显示方式,所以发送十六进制的数据比较方便,比如要发送十六进制数值类型的“0xAF”,那么在VISA Write的写入缓冲区字符串常量上右键十六进制显示,如图1,直接输入“AF”即可,那么下位机接收到的就是正确的数据(十六进制数值类型)了。但实际使用过程中,一般都是需要将某个子VI输出一个动态的字符串通过VISA Write发送到下位机的,这时候就需要对数据进行转换一下,这个转换过程描述起来就是:将字符串A转换为字符串B,使得正常显示的字符串A跟十六进制显示的字符串B是一样的。由于转换目标(十六进制显示的字符串)的数据类型是十六进制,要想十六进制显示的字符串跟正常显示的字符串一样,这个正常显示的字符串必须都是十六进制的字符,即只能由0-9,A-F这十六个字母中的字母组合而成。否则就没办法使二种显示方式的字符串一致了。这个转换过程首先将字符串转换为十六进制数值型,然后再通过将这个十六进制数值创建为一个数组,最后再使用“字节数组至字符串转换”这个函数转换为字符串即可,实际上就是图5字符串转换为U8字节的反向操作,只不过是这个十六进制的值初始类型是十六进制,要先转换为数值类型。具体程序如下图所示。图 10 正常显示字符串转换为相同的十六进制显示的字符串由于十六进制数据由二个字节构成,而字符只有一个字符,所以每二个字符表示一个十六进制数据,如果字符多于二个的话要先进行截取,每二个字符转换为一个十六进制数据。也可以用空格将正常显示的字符串每二个字符用一个空格断开,然后先将这个字符串以空格为分隔符转换为一个字符串数组,再转换为十六进制数值再转换为字符串。 需要注意一下的是如果正常显示的字符串并不是2的整数倍,那么上图的转换程序就会少转换一个字符,可以用程序动态判断一下这个字符串的长度,如果是奇数的话在它最左边补一个“0”再使用上面的程序就正常了。3 软件实现31 LabVIEW应用软件概述 LabVIEW是一个工业标准的图形化开发环境,它结合了图形化编程方式的高性能与灵活性以及专为测试测量与自动化控制应用设计的高端性能与配置功能,能为数据采集、仪器控制、测量分析与数据显示等各种应用提供必要的开发工具。因此,LabVIEW通过降低应用系统开发时间与项目筹建成本帮助科学家与工程师们提高工作效率。LabVIEW被广泛应用于各种行业中,包括汽车、半导体、航空航天、交通运输、高校实验室、电信、生物医药与电子等无论在哪个行业中,工程师与科学家们都可以使用LabVIEW创建功能强大的测试测量与自动化控制系统,在产品开发中进行快速原型创建与仿真工作。在产品生产过程中,工程师们也可以利用LabVIEW进行生产测试,监控各个产品生产过程。总之,LabVIEW可用于各行各业产品开发的阶段。由于LabVIEW能够为用户提供简明、直观、易用的图形编程方式,能够将繁琐复杂的语言编程简化成为以菜中提示方式选择功能,并且用线条将各种功能连接起来,十分省时简便。与传统的编程语言比较,LabVIEW图形编程方式能够节省85%以上的程序开发时间,其运行速度却几乎不受影响,体现出了极高的效率。使用虚拟仪器产品,用户可以根据实际生产需要重新构筑新的仪器系统。例如,用户可以将原有的带有RS232接口的仪器、VXI总线仪器以及GPIB仪器通过计算机,联接在一起,组成各种各样新的仪器系统,由计算机进行统一管理和操作32 LabVIEW串口通信模块在LabVIEW 70中,对串行口进行控制的方式通常有两种:一是利用LabVIEW功能模块的lnstrument 1/0-VISA子模块;二是直接利用LabVIEW功能模块lnstrument 1/0一Serial子模块,该程序库中包含进行串行通信操作的一些功能模块这正符合本软件开发的需要33 LabVIEW通信模块的属性表(1)给出了本系统用到的几个通信模块的基本属性的描述VI名称VI功能VISA Configure Serial Port初始化VISA configure name指定的串口通讯参数 VISA Write将输出缓冲区中的数据发送到VISA configure name指定的串口VISA Read将VISA configure name指定的串口接收缓冲区中的数据读取指定字节数的数据到计算机内存中VISA Serial Break向VISA configure name指定的串口发送一个暂停信号VISA Bytes at Serial port 查询VISA configure name指定的串口接收缓冲区中的数据字节数VISA Close 结束与VISA configure name指定的串口资源之间的会话VISA Set I/O Buffer Size设置VISA configure name指定的串口的输入输出缓冲区大小VISA Flush I/O Buffer Buffer清空VISA configure name指定的串口的输入输出缓冲区3.4 串口通信程序结构 本程序主要采用顺序结构实现,具体流程描述如下:(1)初始化串口。据实际需要选择并打开com口,打开串口时根据双方协议设置波特率、数据位、奇偶校验位、停止位、缓冲区大小等。如果打开串口无误,指小灯亮;否则提小串口出错,并关闭串口。初始化成功后,退出第一桢,进入第二桢。(2)输入命令字到串口。因双方约定单片机输入的命令字为一六进制的55 (ASC 码字符表示为U),故在程序框图中输入的字串若用 ASC 码字符表示为U,用HI;X进制表示为55。若写入的命令字有误,或写入串口模块打不开,出现出错提小,重新要求打开串口。(3)延时因涉及在操作系统的几层间传递信息,加之从主机发送命令到单片机,单片机判断为正确命令后返回数据给主机是需要一定的时间的,故这一步进行延时等待。延时时间可视情祝而定,只要大于单片机回送给主机的时间就行。具体执行时间可由LabVIEW工具菜中栏下的advanced下的profile来确定程序运行时间。若不加以延时程序会有出错提示。(4)显示部分,主要程序代码如图二所示根据需要进行图形及表格显示。为能准确计算被测信号的频率值,使前面板横轴表示的时间尽可能准确,在显示图形Graph IJU用bundle进行处理。实践表明:通过这种处理方式,可使被测信号的频率值误差在百分之三以内。在数组显示用一个重构数组函数将单片机送来的数据构建成一个10行8列的数组,后利用两层for循环实现数组的行列显示。2.5 串口通信技术在体温检测中的应用体温检测的硬件电路构成为:AT90S8535与一线数字温度传感器DS18B20连接,检测体温数据AT90S8535与上位PC机通信采用RS232总线,使用MAXIM公司的MAX232CPE芯片,为提高系统可靠性,在MAX232与CPU之间还可增加光电祸合器,更好地与上位机电气隔离。由AT90S8535读取一线数字温度传感器DS18B20检测到的体温数据,并应用AT90S8535的串行接口UART与PC机进行串行通信,将DS18B20检测到的体温数据由上位机PC机上运行的LabVIEW 70串口通信程序接受体温数据,并显示在PC机上,做进一步处理。以上软、硬件已经在体温HOLTER项目开发中加以应用,同时对AT908515,AT90S2313等其它型号AVR单片机也完全通用。总之,相对以往的AT89系列单片机,以AT90S8535作为嵌入式高效微控制器,在性能上要强得多,程序的效率高而且运行速度大大提高,开发手段也更加方便。AVR单片机的内部又有硬件看门狗电路即看门狗定时器和看门狗定时器的控制寄存器WDTTP相应的看门狗指令控制,大大提高了系统的可靠性及安全性。 串口通信方式简单、可靠、稳定,具有很好的可移植性、实时性,可供其它串口通信系统参考。该程序在实际应用中具有良好效果。4 程序设计设计思路:本设计分单片机和PC机两部分进行编程。在单片机方面,使用汇编语言,用中断方式接收和发送数据。单片机有五个终端源,本设计使用串行口中断请求标志RI或TI,当串行口接收完一帧串行数据时置位RI或当发送完一帧串行数据时置位TI,向CPU申请中断;在PC机方面,PC机数据的接收和发送采用VisualBasic中的通讯控件MSC0MM。设计中使用LED数码管显示发送或接收到数据;使用46的矩阵式键盘发送数据。4.1单片机通信的设计单片机完成通信数据的收发功能主要分为2个步骤。 串口波特率的设定通常使用单片机的串口时,选用的晶振比较固定,常用于何微机通信的波特率也相对固定。本设计设定通讯波特率为9600。 串口初始化串口初始化主要是设置产生波特率的定时器1、串行口控制和串口的中断控制。具体步骤如下。l 确定定时器1的工作方式写TMOD寄存器。l 计算定时器1的初值装载TH1、TL1。l 启动定时器1写TCON中的TR1位。l 确定串口的控制写SCON。l 使用串口中断方式时,开CPU和中断源写IE寄存器。本设计设定定时器T1工作在模式2,串行口工作于方式3。4.2 PC机通信的设计MSC0MM控件不需要用户对通讯底层进行操作。它有事件驱动通讯和查询通讯两种方式。本设计中采用事件驱动方式,即接收缓冲区每接受规定字符数产生一次MSCOMMOnC0Mm事件,发送时设置不产生该事件。4.3 输入显示程序设计设计中使用7段LED数码管显示发送或接收到数据;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 鲁山消防知识培训课件学校
- 济南市2024-2025学年七年级上学期语文期末模拟试卷
- 电解基础知识培训课件
- 工程造价评审咨询服务方案
- 工程施工监理合同
- sct考试试题及答案
- 福建省泉州市四校2024-2025学年九年级上学期11月期中联考化学试题(含答案)
- 电瓶车驾驶安全知识培训课件
- 2024-2025学年北京市平谷区北京版 六年级下册期末测试英语试卷(含答案)
- 北医大CT诊断考试卷及答案
- 煤矿通风安全培训课件
- 2025年特种设备(电梯)安全管理人员A证考试试题(200题)含答案
- 销售公司红线管理制度
- 创新园管理制度
- 阿尔兹海默症康复护理
- 小学一年级第一学期数学兴趣小组计划
- DB51T 2245-2016 四川省专用地震监测台网建设技术规范
- 《年产15万吨苯酚的工艺流程设计》21000字
- 土地信息系统试题及答案
- 肾切除患者护理疑难病例
- 名人传课件完整版本
评论
0/150
提交评论