在VC++中用ActiveX控件实现与单片机的串行通信

上传人:daj****de2 文档编号:165260038 上传时间:2022-10-27 格式:DOCX 页数:6 大小:15.25KB
收藏 版权申诉 举报 下载
在VC++中用ActiveX控件实现与单片机的串行通信_第1页
第1页 / 共6页
在VC++中用ActiveX控件实现与单片机的串行通信_第2页
第2页 / 共6页
在VC++中用ActiveX控件实现与单片机的串行通信_第3页
第3页 / 共6页
资源描述:

《在VC++中用ActiveX控件实现与单片机的串行通信》由会员分享,可在线阅读,更多相关《在VC++中用ActiveX控件实现与单片机的串行通信(6页珍藏版)》请在装配图网上搜索。

1、摘要:详细论述在V C+6.0中使用ActiveX控件通过串口与单片机进行二进制数据传输的具体方 法。关键词:VC+ ActiveX串行通信在单片机应用系统中,经常需要通过RS232串行口与微机进行通信。目前在各种操作系统 中,Microsoft的Windows较为常见,而且大多为Windows95/98等32位平台。以往在Windows平台 上的串行通信多使用其提供的API函数来实现,这种方法使用起来需要许多底层设置,因而较为 繁琐,并且难以理解。Microsoft推出的ActiveX技术提供了另外一种实现串行通信的方法。这种 方法不仅相对较为简单,而且非常实用。尤其是Visual C+这种

2、可视化面向对象的编程环境中, 可以真正把串口看作一个对象,编程时只需简单的设置,理解起来也很容易。下面详细讨论 Microsoft提供的串行通信ActiveX控件的使用方法。该控件的相应文件是MSCOMM32.OCX,以 下简称为MSCOMM控件。一、MSCOMM控件MSCOMM控件,即Microsoft Communication CONTROL,是Microsoft 为简化Windows下串 行通信编程而提供的ActiveX控件。它提供了一系列标准通信命令的使用接口,利用它可以建立 与串口的连接,并可以通过串口连接到其他通信设备(如调制解调器),发出命令,交换数据以 及监视和响应串行连接中

3、发生的事件和错误。MSCOMM控件可用于创建电话拨号程序、串口通 信程序和功能完备的终端程序。MSCOMM控件提供了两种处理通信的方式:(1)事件驱动方式。当通信事件发生时,MSCOMM控件会触发OnComm事件,调用者可 以捕获该事件,通过检查其CommEvent属性便可确认发生的是哪种事件或错误,从而进行相应 的处理。这种方法的优点是响应及时、可靠性高。(2)查询方式。在程序的每个关键功能之后,可以通过检查CommEvent属性的值来查询事 件和错误。如果应用程序较小,这种方法可能更可取。例如,如果写一个简单的电话拨号程序, 则没有必要每接收1个字符都产生事件,因为惟一等待接收的字符是调制

4、解调器的确定响应。在使用MSCOMM控件时,1个MSCOMM控件只能同时对应1个串口。如果应用程序需要访 问和控件多个串口,那么必须使用多个MSCOMM控件。在VC+中,MSCOMM控件只对应着1个C+类-CMSComm。由于MSCOMM控件本身没有 提供方法,所以CMSComm类除了Create ()成员函数外,其他的函数都是Get/Set函数对,用来 获取或设置控件的属性。MSCOMM控件也只有1个OnComm事件,用来向调用者通知有通信事 件发生。MSCOMM控件有许多很重要的属性,限于篇幅只给出几个较为重要和常用的属性,如表1所列。二、编程实现从表1可以看到,MSCOMM可以两种不同的

5、形式接收数据,即以文本形式和以二进制形式。 用MSCOMM控件进行字符数据传输的文献和资料可以找到很多,在Microsoft的MSDN (Microsoft Developer Network)中就可以找到这样的例子,即VCTERM。可是几乎所有以单片 机为核心的测量系统所得到的原始数据都是二进制形式的,所以,以二进制形式传输数据将是 最为直接而又简洁的办法。不仅如此,由于MSCOMM控件在文本形式下,其传输的是宽字符格 式的字符,要想得到有用信息,还要额外处理。因此本文主要讨论在二进制形式下的使用方法。在VC+6.0中,用APPWizard可以生成三种应用程序:单文档(SDI)、多文档(MD

6、I)和基 于对话框的应用程序。为了说明问题和省去不必要的细节,下面以基于对话框的应用程序为例。1. 创建一个基于对话框的应用程序打开VC+6.0集成开发环境,选择菜单项File/New,在出现的对话框中选中Projects标签中 的MFC AppWizard(exe),然后在Project Name框中填入MyCOMM(可根据需要命名),之后点OK 按钮。在接着出现的对话框中选中DIALOG Based项,然后点NEXT按钮。以下的各对话框都按 照缺省设置,这样即可生成一个基于对话框的应用程序。在资源编程器中会出现其对话框模板。2. 插入MSCOMM控件选择菜单项Project/Add to

7、project/Components and CONTROLS.,在弹出的对话框中选择 Registered ActiveX CONTROLs文件夹下的Microsoft Communications CONTROL.version6.0,然 后按下Insert按钮,接着会弹出一个对话框,提示生成的类名及文件名,按OK按钮即可实现控 件的插入。这时在对话框的控件工具栏 上会多出一个电话机模样的控件图标,Workspace的 Classview 中也多了一个类 CMSComm。此时即可将MSCOMM控件加入到对话框模板,加入方法与其他控件一样。然后还要在对话 框类中相应加入一个成员变量,此处我们

8、将其命名为m_comm。加入方法为:首先,在对话框 模板中,用鼠标右键点击该控件,选择ClassWizard,在出现的对话框的Member Variables标签的 CONTROL Ids项下,选中IDC_MSCOMM1。然后,按Add triable按钮,在出现的对话框的 Member Variable Name项中输入m_comm。最后,按OK按钮即可。3. 设置属性可以在两个地方对控件的属性进行设置:(1) 对话框资源编辑器中。在对话框模板上,用右键单击 MSCOMM控件,然后选择 Properties菜单项,最后便可设置各项属性。此处只对以下几处进行改动,其他接受缺省设置: Rther

9、shold: 1, InputLen: 1, DTREnable:不选,InputMode: 1-Binary。(2) 对话框类的OnInitDIALOG()函数中。下面是以上设置的函数实现:BOOL CMyCOMMDlg : OnlnitDIALOG()CDIALOG:: OnlnitDIALOG();此处为应用框架自动生成代码,不予列出/TODO: Add extra initialization herem_comm.SetCommPort(l); 使用串口 1m_comm.SetSettings(9600, N, 8, 1);波特率为9600,无奇偶校验,8位数据位,1位停止位m_co

10、mm.SetRThreshold(10); /每接收10个字符就触发1次接收事件m_comm.SetSThreshold(O); 不触发发送事件m_comm.SetInputLen(10); 每次读操作从缓冲区中取10个字符m_comm.SetInputMode(1); 二进制数据传输形式m_comm.SetPortOpen ( TRUE); /打开串口return TRUE; /return TRUE unless you set the focus to a CONTROL4. 发送二进制数据如果需要发送二进制数据,可将数据作如下处理。具体代码如下:CByteArray bytOutArr

11、;bytOutArr.Add(OxO); 给数组赋值bytOutArr.Add(Oxl);bytOutArr.Add(Ox2);bytOutArr.Add(Ox3);bytOutArr.Add(Ox4);COleVariant varOut;varOut=COleVriant(bytOutArr); 将数据转换为变体数据类型m_comm.SetOutput (varOut); 发送数据5. 接收二进制数据当需要接收大量的数据时,最好采用事件驱动方式进行编程。具体步骤如下:(1) 响应OnComm事件。在对话框资源编程器中,双击对话框模板上的MSCOMM控件, 在弹出的对话框中填入您所希望的事件

12、响应函数名,此处将其命名为OnCommMscomm1 ()。(2) 在事件响应函数中接收和处理数据。接收来的数据为变体数据,所以需要做一些处理, 具体代码如下:void CMyCOMMDlg:: OnCommMscomm1 ()COleVariant varRcv ;CByteArray byt;int i;long num;SWITCH (m_comm.GetCommEvent()cass 1:/数据发送事件break;case 2: /数据接收事件varRcv=m_comm.GetInput();varRcv.ChangeType (VT_ARRAYVT_UI1);BYTE HUGEP *

13、pbstr;HRESULT hr;hr=SafeArrayAccessData (varRcv.parray,(void HUGEP*FAR* )& pbstr);/ 获取安全数组指针 if (FAILED (hr)AfxMessageBox(获取数组指针失败! ”);break;num=0;hr=SafeArrayGetUBound (varRcv.parray1,&nu m); 获取数组上界if (FAILED (hr)AfxMessageBox(获取数组上界失败! ”);break;for(i=0;ibyt.Add(pbstr i);SafeArrayUnaccessData (varRcv.parray);此时数据已保存在二进制数组byt中,可根据需要进行相关处理break;default:break;以上代码中的处理部分可以做成一个单独的函数,在此处调用即可。经过以上代码的处理, 接收来的数据已存放在二进制数组byt中,可以根据自己的需要对其进行相关处理,如保存和显 示等。三、硬件接口单片机与微机之间的硬件接口可以用1片MAX232或ICL232与几个电容即可实现,有许多文 献讨论过,此处不再多述。以上方法经过笔者在实践中的应用,感到非常简洁、方便,具有很强的实用意义。

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!