微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 在VC++中用MSCOMM控件实现与单片机的串行通信

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

时间:11-22 来源:互联网 点击:
二进制数据传输形式

m_comm.SetPortOpen(TRUE);//打开串口

returnTRUE;//returnTRUEunlessyousetthefocustoacontrol

}

4.发送二进制数据

如果需要发送二进制数据,可将数据作如下处理。具体代码如下:

CByteArraybytOutArr;

bytOutArr.Add(0x0);//给数组赋值

bytOutArr.Add(0x1);

bytOutArr.Add(0x2);

bytOutArr.Add(0x3);

bytOutArr.Add(0x4);

COleVariantvarOut;

varOut=COleVariant(bytOutArr);//将数据转换为变体数据类型

m_comm.SetOutput(varOut);//发送数据

5.接收二进制数据

当需要接收大量的数据时,最好采用事件驱动方式进行编程。具体步骤如下:

(1)响应OnComm事件。在对话框资源编程器中,双击对话框模板上的MSCOMM控件,在弹出的对话框中填入您所希望的事件响应函数名,此处将其命名为OnCommMscomm1()。

(2)在事件响应函数中接收和处理数据。接收来的数据为变体数据,所以需要做一些处理,具体代码如下:

voidCMyCOMMDlg::OnCommMscomm1()

{

COleVariantvarRcv;

CByteArraybyt;

inti;

longnum;

switch(m_comm.GetCommEvent())

{

cass1://数据发送事件

break;

case2://数据接收事件

varRcv=m_comm.GetInput();

varRcv.ChangeType(VT_ARRAY|VT_UI1);

BYTEHUGEP*pbstr;

HRESULThr;

hr=SafeArrayAccessData(varRcv.parray,(voidHUGEP*FAR*)pbstr);//获取安全数组指针

if(FAILED(hr)){

AfxMessageBox("获取数组指针失败!");

break;}

num=0;

hr=SafeArrayGetUBound(varRcv.parray,1,num);//获取数组上界

if(FAILED(hr)){

AfxMessageBox("获取数组上界失败!");

break;}

for(i=0;i

byt.Add(pbstr[i]);

SafeArrayUnaccessData(varRcv.parray);

//此时数据已保存在二进制数组byt中,可根据需要进行相关处理

break;

default:

break;

}

}

以上代码中的处理部分可以做成一个单独的函数,在此处调用即可。经过以上代码的处理,接收来的数据已存放在二进制数组byt中,可以根据自己的需要对其进行相关处理,如保存和显示等。

三、硬件接口

单片机与微机之间的硬件接口可以用1片MAX232或ICL232与几个电容即可实现,有许多文献讨论过,此处不再多述。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top