ImageVerifierCode 换一换
格式:DOCX , 页数:11 ,大小:22.92KB ,
资源ID:8509151      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8509151.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(VB mscomm 串口控件 及与51单片机通讯使用指南.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

VB mscomm 串口控件 及与51单片机通讯使用指南.docx

1、VB mscomm 串口控件 及与51单片机通讯使用指南一、概述 串口通讯作为一种古老而又灵活的通讯方式,被广泛地应用于PC间的通讯以及PC和单片机之间的通讯之中。 提到串口通讯的编程,人们往往立刻想到C、汇编等对系统底层操作支持较好的编程语言以及大串繁琐的代码。实际上,只要我们借助相关ActiveX控件的帮助,即使是在底层操作一向不被人看好的VB中,一样能够实现串口通 讯,甚至其实现方法和C、汇编相比,要更加快捷方便。下面,笔者就介绍一下在VB中实现串口通讯的方法。在Visual Basic中有一个名为Microsoft Communication Control(简称MSComm)的通讯控

2、件。我们只要通 过对此控件的属性和事件进行相应编程操作,就可以轻松地实现串口通讯。下面,笔者就简要地介绍一下MSComm控件的使用方法。 二、MSComm控件的主要属性、事件 1、MSComm的属性 常用属性和方法 利用MSComm控件实现计算机通信的关键是理解并正确设置MSComm控件众多属性和方法。以下是MSComm控件的常用属性和方法: Commport:设置通讯所占用的串口号。如设成1(默认值),表示对Com1进行操作。 语法 object.CommPortvalue (value 一整型值,说明端口号。) 说明 在设计时,value 可以设置成从 1 到 16 的任何数(缺省值为 1

3、)。但是如果用 PortOpen 属性打开一个并不存在的端口时,MSComm 控件会产生错误 68(设备无效)。 注意:必须在打开端口之前设置 CommPort 属性。CTSHolding 属性:确定是否可通过查询 Clear To Send (CTS) 线的状态发送数据。Clear To Send 是调制解调器发送到相联计算机的信号,指示传输可以进行。该属性在设计时无效,在运行时为只读。 语法: object.CTSHolding(Boolean) Mscomm 控件的 CTSHolding 属性设置值: True Clear To Send 线为高电平。 False Clear To Se

4、nd 线为低电平。 说明:如果 Clear To Send 线为低电平 (CTSHolding = False) 并且超时时,MSComm 控件设置 CommEvent 属性为 comEventCTSTO (Clear To Send Timeout) 并产生 OnComm 事件。Clear To Send 线用于 RTS/CTS (Request To Send/Clear To Send) 硬件握手。如果需要确定 Clear To Send 线的状态,CTSHolding 属性给出一种手工查询的方法。 CommEvent:这是一个非常重要的属性。该属性设计时无效,运行时只读。一旦串口发生通

5、信事件或产生错误,依据产生的事件和错误,MSComm控件为CommEvent属性赋不同的代码,同时产生OnComm事件。用户程序就可在OnComm事件处理程序中针对不同的代码,进行相应的处理。CommEvent属性的代码、常数及含义参见表1及表2。 表1 CommEvent通信事件 代码 常数 含义 1 ComEvReceive 接受到Rthreshold个字符。该事件将持续产生,直到用Input属性从接受缓冲区中读取并删除字符。 2 ComEvSend 发送缓冲区中数据少于Sthreshold个,说明串口已经发送了一些数据,程序可以用Output属性继续发送数据。 3 ComEvCTS Cl

6、ear To Send信号线状态发生变化。 4 ComEvDSR Data Set Ready信号线状态从1变到0。 5 ComEvCD Carrier Detect信号线状态发生变化。 6 ComEvRing 检测到振铃信号。 7 ComEvEOF 接受到文件结束符。 表2 CommEvent通信错误 代码 常数 含义 1001 ComEvntBreak 接受到一个中断信号。 1002 ComEvntCTSTO Clear To Send信号超时。 1003 ComEvntDSRTO Data Set Ready信号超时。 1004 ComEvntFrame 帧错误。 1006 ComEvn

7、tOverrun 串口超速。 1007 ComEvntCDTO 载波检测超时。 1008 ComEvntRxOver 接受缓冲区溢出,缓冲区中已没有空间。 1009 ComEvntRxParity 奇偶校验错。 1010 ComEvntTxFull 发送缓冲区溢出,缓冲区中已没有空间。 1011 ComEvntDCB 检索串口的设备控制块时发生错误。 CDHolding 属性:通过查询 Carrier Detect (CD) 线的状态确定当前是否有传输。Carrier Detect 是从调制解调器发送到相联计算机的一个信号,指示调制解调器正在联机。该属性在设计时无效,在运行时为只读。 语法 o

8、bject.CDHolding 设置值:CDHolding 属性的设置值为: 设置 描述 True Carrier Detect 线为高电平 False Carrier Detect 线为低电平 说明:注意当 Carrier Detect 线为高电平 (CDHolding = True) 且超时时,MSComm 控件设置CommEvent 属性为 comEventCDTO(Carrier Detect 超时错误),并产生 OnComm 事件。 注意 在主机应用程序中捕获一个丢失的传输是特别重要的,例如一个公告板,因为呼叫者可以随时挂起(放弃传输)。 Carrier Detect 也被称为 Re

9、ceive Line Signal Detect (RLSD)。 数据类型 BooleanDSRHolding 属性:确定 Data Set Ready (DSR) 线的状态。Data Set Ready 信号由调制解调器发送到相连计算机,指示作好操作准备。该属性在设计时无效,在运行时为只读。 语法:object.DSRHolding object 所在处表示对象表达式,其值是“应用于”列表中的对象。 DSRHolding 属性返回以下值: True Data Set Ready 线高 False Data Set Ready 线低 说明:当 Data Set Ready 线为高电平 (DSR

10、Holding = True) 且超时时,MSComm 控件设置 CommEvent 属性为 comEventDSRTO(数据准备超时)并产生 OnComm 事件。当为 Data Terminal Equipment (DTE) 机器写 Data Set Ready/Data Terminal Ready 握手例程时该属性是十分有用的。 数据类型:BooleanEOFEnable 属性:确定在输入过程中 MSComm 控件是否寻找文件结尾 (EOF) 字符。如果找到 EOF 字符,将停止输入并激活 OnComm 事件,此时 CommEvent 属性设置为 comEvEOF, 语法:object

11、.EOFEnable = value EOFEnable 属性语法包括下列部分: value 布尔表达式,确定当找到 EOF 字符时,OnComm 事件是否被激活,如“设置值”中所描述。 Error 常数常数 值 描述 comEventBreak 1001 接收到中断信号 comEventCTSTO 1002 Clear-to-send 超时 comEventDSRTO 1003 Data-set ready 超时 comEventFrame 1004 帧错误 comEventOverrun 1006 端口超速 comEventCDTO 1007 Carrier detect 超时 comEv

12、entRxOver 1008 接收缓冲区溢出 comEventRxParity 1009 Parity 错误 comEventTxFull 1010 传输缓冲区满 comEventDCB 1011 检索端口 设备控制块 (DCB) 时的意外错误Handshake 常数常数 值 描述 comNone 0 无握手。 comXonXoff 1 XOn/Xoff 握手。 comRTS 2 Request-to-send/clear-to-send 握手。 comRTSXOnXOff 3 Request-to-send 和 clear-to-send 握手皆可。Input:从接收缓冲区中读取数据并清空该

13、缓冲区,该属性设计时无效,运行时只读。 InBufferSize:设置或返回接收缓冲区的大小,缺省值为1024字节。 InBufferCount:设置输入寄存器所存储的字符数,当将其值设为0时,则输入寄存器将被清空。 OutBufferSize:设置或返回发送缓冲区的大小,缺省值为512字节。 OutBufferCount:设置输出寄存器所存储的字符数,当将其值设为0时,则输出寄存器将被清空.InputMode:设置从输入寄存器中读取数据的形式。常数 值 描述 comInputModeText 0 (缺省)通过 Input 属性以文本方式取回数据。 comInputModeBinary 1 通

14、过 Input 属性以二进制方式检取回数据。InputLen 属性:设置并返回 Input 属性从接收缓冲区读取的字符数。语法 object.InputLen = valueInputLen 属性语法包括下列部分:value 整型表达式,说明 Input 属性从接收缓冲区中读取的字符数。 说明:InputLen 属性的缺省值是 0。设置 InputLen 为 0 时,使用 Input 将使 MSComm 控件读取接收缓冲区中全部的内容。若接收缓冲区中 InputLen 字符无效,Input 属性返回一个零长度字符串 ()。在使用 Input 前,用户可以选择检查 InBufferCount 属

15、性来确定缓冲区中是否已有需要数目的字符。该属性在从输出格式为定长数据的机器读取数据时非常有用。Output:向发送缓冲区发送数据,该属性设计时无效,运行时只读。 由于MSComm控件属性很多,在此笔者仅介绍与实现串口通讯密切相关的核心属性。 Portopen:设置串口状态,值为True时打开串口,值为False时关闭串口。 Rthreshold:该属性为一阀值。当接收缓冲区中字符数达到该值时,MSComm控件设置Commevent属性为ComEvReceive,并产生OnComm事件。用户可在OnComm事件处理程序中进行相应处理。若Rthreshold属性设置为0,则不产生OnComm事件。

16、例如用户希望接收缓冲区中达到一个字符就接收一个字符,可将Rthreshold设置为1。这样接收缓冲区中接收到一个字符,就产生一次OnComm事件。 在 MSComm 控件设置 CommEvent 属性为 comEvReceive 并产生 OnComm 之前,设置并返回的要接收的字符数。语法 object.Rthreshold = value (value 整型表达式,说明在产生 OnComm 事件之前要接收的字符数。 )说明 当接收字符后,若 Rthreshold 属性设置为 0(缺省值)则不产生 OnComm 事件。例如,设置 Rthreshold 为 1,接收缓冲区收到每一个字符都会使 M

17、SComm 控件产生 OnComm 事件。Sthreshold:该属性亦为一阀值。当发送缓冲区中字符数小于该值时,MSComm控件设置Commevent属性为ComEvSend,并产生OnComm事件。若Sthreshold属性设置为0,则不产生OnComm事件。要特别注意的是仅当发送缓冲区中字符数小于该值的瞬间才产生OnComm事件,其后就不再产生OnComm事件。例如Sthreshold设置为3,仅当发送缓冲区中字符数从3降为2时,MSComm控件设置Commevent属性为ComEvSend,同时产生OnComm事件,如发送缓冲区中字符始终为2,则不会再产生OnComm事件。这就避免了发

18、送缓冲区中数据未发送完就反复发生OnComm事件。 语法 object.SThreshold = value value 整形表达式,代表在 OnComm 事件产生之前在传输缓冲区中的最小字符数。说明:若设置 Sthreshold 属性为 0(缺省值),数据传输事件不会产生 OnComm 事件。若设置 Sthreshold 属性为 1,当传输缓冲区完全空时,MSComm 控件产生 OnComm 事件。如果在传输缓冲区中的字符数小于 value,CommEvent 属性设置为 comEvSend,并产生 OnComm 事件。comEvSend 事件仅当字符数与 Sthreshold 交叉时被激活

19、一次。例如,如果 Sthreshold 等于 5,仅当在输出队列中字符数从 5 降到 4 时,comEvSend 才发生。如果在输出队列中从没有比 Sthreshold 多的字符,comEvSend 事件将绝不会发生。OnComm 常数常数 值 描述 comEvSend 1 发送事件。 comEvReceive 2 接收事件。 comEvCTS 3 clear-to-send 线变化。 comEvDSR 4 data-set ready 线变化。 comEvCD 5 carrier detect 线变化。 comEvRing 6 振铃检测。 comEvEOF 7 文件结束。Settings:对

20、串口通讯的相关参数。包括串口通讯的比特率,奇偶校验,数据位长度、停止位等。其默认值 是“9600,N,8,1”,表示串口比特率是9600bit/s,不作奇偶校验,8位数据位,1个停止位。语法: object.Settings = value说明:当端口打开时,如果 value 非法,则 MSComm 控件产生错误 380(非法属性值)。Value 由四个设置值组成,有如下的格式:BBBB,P,D,SBBBB 为波特率,P 为奇偶校验,D 为数据位数,S 为停止位数。value 的缺省值是:9600,N,8,1value 的设置值:True 当 EOF 字符找到时 OnComm 事件被激活。 F

21、alse (缺省)当 EOF 字符找到时 OnComm 事件不被激活。 说明:当 EOFEnable 属性设置为 False,OnComm 控件将不在输入流中寻找 EOF 字符。 2、MSComm的事件 除了公共事件之外,MSComm只有一个OnComm事件。当CommEvent属性值变化时将发生OnComm事件,指示发生 一个通讯事件或错误。当我们设置Rtheshold属性值为0时,将使得捕获comEvReceive事件无效。MSComm控件提供了两种处理通信的方式:一种为事件驱动方式,该方式相当于一般程序设计中的中断方式。当串口发生事件或错误时,MSComm控件会产生OnComm事件,用户

22、程序可以捕获该事件进行相应处理。本文的两个例子均采用该方式。另一种为查询方式,在用户程序中设计定时或不定时查询MSComm控件的某些属性是否发生变化,从而确定相应处理。在程序空闲时间较多时可以采用该方式。 错误消息(MS Comm 控件)下表列出 MSComm 控件可以捕获的错误:值 描述 380 无效属性值 comInvalidPropertyValue383 属性为只读 comSetNotSupported394 属性为只读 comGetNotSupported 8000 端口打开时操作不合法 comPortOpen8001 超时值必须大于 0 8002 无效端口号 comPortInva

23、lid8003 属性只在运行时有效 8004 属性在运行时为只读 8005 端口已经打开 comPortAlreadyOpen8006 设备标识符无效或不支持该标识符 8007 不支持设备的波特率 8008 指定的字节大小无效 8009 缺省参数错误 8010 硬件不可用(被其它设备锁定) 8011 函数不能分配队列 8012 设备没有打开 comNoOpen 8013 设备已经打开 8014 不能使用 comm 通知 8015 不能设置 comm 状态 comSetCommStateFailed8016 不能设置 comm 事件屏蔽 8018 仅当端口打开时操作才有效 comPortNotO

24、pen 8019 设备忙 8020 读 comm 设备错误 comReadError8021 为该端口检索设备控制块时的内部错误 comDCBError 二、串口通讯编程实例 在完成了对MSComm控件的简要介绍之后,笔者就以实际程序为例,介绍一下串口通讯的具体实现方法。1、PC机间的串口通讯 (1)、实现方法: A、新建一个窗体,在上面放两个Text控件、两个CommandButton控件和两个Label控件(如图1.bmp所示)。 具体见下表:控件类型 名称 Caption属性 作用 Text Text1 - 输入所要发送的信息 Text Text2 - 显示接收到的信息 CommandB

25、utton Command1 发 送CommandButton Command2 退 出Label Label1 发送的数据 提示 Label Label2 接收的数据 提示 B、在控件工具箱中的空白处点击鼠标右键,在弹出的菜单中选择“部件”,在弹出的窗口中的控件列表中 找到“Microsoft Comm Control”,将其选中,在点击“应用”、“关闭”,在控件工具栏中就会出现一个电 话的小图标。 C、用串口线将两台电脑连接起来。您可以使用Com1对Com1的对应连接,也可以使用Com1和Com2的交叉连接。 本程序使用的是Com1对Com1的连接。 D、输入以下代码:Private Su

26、b Command1_Click() .发送数据 MSComm1.OutBufferCount = 0 .清空输出寄存器 MSComm1.Output = Text1.Text .发送数据 End Sub Private Sub Command2_Click() .退出 Unload Me End Sub Private Sub Form_Load() .初始化 MSComm1.CommPort = 1 .使用Com1口 MSComm1.Settings = 9600,n,8,1 .设置通讯参数 MSComm1.PortOpen = True .打开串口 End Sub Private Sub

27、 Mscomm1_Oncomm() .通讯事件发生 Select Case MSComm1.CommEvent Case comEvReceive .有接受事件发生 Text2.Text = MSComm1.Input .接受显示数据 MSComm1.InBufferCount = 0 .清空输入寄存器 End Select End Sub 2、PC机与单片机之间的通讯 PC机与单片机之间的通讯被广泛的用于工业、医疗测控等领域之中。在应用中,我们通常将单片机作为“感 受器”和“效应器”,负责数据采集、响应计算机发出的指令对电路进行控制,有时也进行一些简单的运算, 最后再将执行数据反馈给计算机处

28、理。本程序将实现在PC机上输入一个0-255之间的整数,将此数据发送到单片 机,单片机接收到数据后,将数据在显示管上显示,再将此数除以2,将得数返回给PC机。(运行效果如图 3.BMP所示)其实现方法如下: A、同PC机间通讯的实现方法A-B。 B、连接电脑和单片机。注意!由于PC机端的RS232电平与单片机端TTL的并不不匹配,故应注意电平转换。 C、在VB中输入以下代码: Private Sub Mscomm1_Oncomm() .通讯事件发生 Dim indata As Variant Dim bte(0) As Byte Select Case MSComm1.CommEvent Ca

29、se comEvReceive .有接受事件发生 indata = MSComm1.Input .注意!要通过MSComm控件发送或接收二进制数据必须用Variant类型的变量对二进 .制Byte类型的变量进行转换! bte(0) = AscB(indata) Text2.Text = bte(0) MSComm1.InBufferCount = 0 .清空输入寄存器 End Select End Sub Private Sub Command1_Click() .发送数据 Dim Num As Integer Dim outbte(0) As Byte Num = Val(Text1.Text) outbte(0) = CByte(Num) MSComm1.OutBufferCount = 0 .清空输出寄存器 MSComm1.Output = outbte(0) .发送数据

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

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