用VB实现计算机与单片机的串行通信.doc_第1页
用VB实现计算机与单片机的串行通信.doc_第2页
用VB实现计算机与单片机的串行通信.doc_第3页
全文预览已结束

下载本文档

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

文档简介

此文档收集于网络,如有侵权,请联系网站删除用VB实现计算机与单片机的串行通信周子琛,申振宁(武警工程学院,陕西 西安 710086) 摘要:给出了使用VB控件,实现PC机与8031单片机之间串行通信的编程方法,并给出了一个用VB实现PC机同8031通信的应用实例。 1 概述在工业应用中,常常需要进行串行通信,特别是在一些工业控制系统中尤其重要。早期,人们习惯使用汇编语言来编制通信程序,随着WINDOWS和可视化编程开发环境的出现,如微软的VB、VC等等,给传统的程序开发模式带来了深刻的变化。其中VISUAL BASIC由于使用方便,一般工程人员容易掌握、设计软件方便、工作量较小,深受工程人员喜爱。适用于一些对实时性要求不高的情况下使用。以下就采用RS232串行接口和8031单片机进行通信为例设计一个由8031单片机采集外部数据,然后送入计算机进行数据处理的处理过程来说明VB在开发串行通信时的使用情况。2 硬件组成该系统中,由于计算机串行通信接口和8031单片机的驱动电平不一致,故应使用一个电平转换装置,而MAXIM3223就可以完成这一功能,最简单系统如图1所示。在使用VB来完成串行通信时,可以使用两种方法:一种是VB调用Windows的API函数法,另一种是使用VB自带的通信控件MsComm来完成。3 MsComm控件MsComm控件并未在常用的工具箱内出现,用户可以单击菜单中的“工程”菜单,并选择“部件”命令,在部件对话框中选择“Micosoft comm. Control”即可加入到工具箱内。MsComm控件提供了一系列标准通信命令使用的界面,可以建立与串行通信端口的连接,并通过串行通信端口完成对单片机,调制解调器等设备的数据采集和发送,以及监视串行通信线路的变化。MsComm控件有两种处理方式:(1)事件驱动方式,由MsComm控件中的OnComm事件捕获并处理通信事件及错误;(2)查询方式,检查ConEvent属性来处理通信事件及错误。下面简要介绍MsComm控件的主要属性以及响应事件的类型。(1) CommPort:设置或返回串行端口号,其取值范围199,缺省值为1。(2) Setting:设置或返回串行通信口的波特率、奇偶校验位、数据位数、停止位数。(3) PortOpen:串行口打开与否,为布尔量。(4) InBufferSize:设置或返回缓冲区的大小,缺省值为1024字节。(5) InBufferCount:返回缓冲区等待读取字节数。(6) Rthreshold:该属性为一个阈值,当查询到接收缓冲区内字节个数达到或超过该设置值时就产生Oncomm事件。(7) Inputlen :设置或返回接收缓冲区内用Input读入的个数。(8) Input:表示从接收缓冲区内读出的一串字符。(9) OutBufferSize:设置或返回缓冲区,缺省值为512字节。(10) OutBufferCounter:返回发送缓冲区内等待发送的字节数,可用来清空缓冲区。(11) EofEnable:若设置为True,则当输入中出现Eol时,就停止输入并产生OnComm事件。在通信中可能会产生错误或事件,它们都可以引发OnComm事件,并改变其属性,由CommEvent属性代码来反映错误类型,在通信程序的设计中可以根据CommEvent属性的不同来执行不同的操作。4 编程实例本例用于解决PC机同8031单片机之间的通信问题,上位机(PC)与单片机之间采用RS232串行通信标准,以查询的方式进行通信,通信设置波特率为9600,无奇偶校验位,8位数据位,1位停止位,使用通信控件MsComm发送数据,数据传递采用事件驱动的通信方式。以下为通信的VB编程部分:(1) 始化程序,主要是设置通信口的工作参数。Sub Form_load()MsComm1.Commport=2;MsComm1.Setting=”9600,N,8,1”;MsComm1.InputLen=0;MsComm1.InBufferSize=1024;MsComm1.PortOpen=Ture;MsComm1.InBufferCount=0;Perval=1000;NonPerval=500;Cmdp.Enable=False;During.Periodic=False;During.NonPeriodic=False;Endsub“使用COM2作为通信口,使用查询方式进行通信,每隔0.5s查询一次,以确定是否发送周期命令。同初始化发送缓冲区和接收缓冲区。”(2) 非周期发送程序。根据命令按钮状态以及周期性命令数据传输状态,在NonPeriodic定时器的中断中发送非周期性命令。Private Sub cmdnp_Click()CmdP.Enabled=true;CmdNp.Enabled=False;CmdNp.Enabled=False;During.NonPeriodic=True;EndsubSub NonPeriodic_Timer()If DuringPeriodic=True OR Cmdp=FalseThen Exit subCmdnp=false;Call DataTranslate;Mscomm1.Rthreshold=R-NonPeriodic-Byte;Endsub“查询命令按钮状态以及数据传输状态,以启动非周期性发送程序,其中Datatranslate为用户根据需要编制的函数,用以传递数据”(3) 周期性发送命令Sub Periodic_Timer()If During.NonPeriodic=True Then Exit Sub;During.Periodic=Ture;Call DataTranslate;MsComm1.Rthreshold=R-Periodic-Byte;EndSub“在发送周期命令后,上位机接收到若干字节后引发OnComm事件。”(4) OnComm事件程序OnComm事件中,根据引发情况的不同,如周期程序引发或非周期性程序引发,将产生不同的处理数据的方法,此段程序由读者根据自己的用途编写。5 同步问题的解决由于计算机的串行通信口只能进行异步通信,在异步通信中保持波特率的一致性是数据同步的保证,而帧同步只能靠DSR/DTR,RTS/CTS等异步通信控制信号来完成,但是8031的串行通信口并没有这些控制端,因此在8031与PC进行串行通信中虽然波特率选择一致能够保证单个字节传输正确,但无法保证大规模数据的正确传输。如:在单片机与计算机进行串行通信中,当传送一个字节时均能够正确地接收,但在多字节一起传输时就会造成大批数据丢失。解决的方法有硬件方法和软件方法,在此介绍硬件的解决方法。在图1的基础上,借助8031P3口的其他位模拟异步通信的控制信

温馨提示

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

评论

0/150

提交评论