在单片机运用体系中,常常需求通过RS-232串行口与微机进行通讯。现在在各种操作体系中,Microsoft的Windows较为常见,并且大多为Windows2K/XP等32位渠道。以往在Windows渠道上的串行通讯多运用其供给的API函数来完成,这种办法运用起来需求许多底层设置,因而较为繁琐,并且难以了解。Microsoft推出的ActiveX技能供给了别的一种完成串行通讯的办法。这种办法不只相对较为简略,并且十分有用。尤其是Visual
一、MSCOMM控件
MSCOMM控件,即Microsoft
MSCOMM控件供给了两种处理通讯的办法:
(1)事情驱动办法。当通讯事情产生时,MSCOMM控件会触发OnComm事情,调用者能够捕获该事情,通过查看其CommEvent特点便可承认产生的是哪种事情或过错,然后进行相应的处理。这种办法的长处是呼应及时、可靠性高。
(2)查询办法。在程序的每个要害功用之后,能够通过查看CommEvent特点的值来查询事情和过错。假如运用程序较小,这种办法或许更可取。例如,假如写一个简略的电话拨号程序,则没有必要每接纳1个字符都产生事情,因为专一等候接纳的字符是调制解调器的”确认”呼应。
在运用MSCOMM控件时,1个MSCOMM控件只能一起对应1个串口。假如运用程序需求拜访和控件多个串口,那么有必要运用多个MSCOMM控件。
在VC++++中,MSCOMM控件只对应着1个C++类–CMSComm。因为MSCOMM控件自身没有供给办法,所以CMSComm类除了Create()成员函数外,其他的函数都是Get/Set函数对,用来获取或设置控件的特点。MSCOMM控件也只要1个OnComm事情,用来向调用者告诉有通讯事情产生。
MSCOMM控件有许多很重要的特点,限于篇幅只给出几个较为重要和常用的特点,如表1所列。
表1
属
CommPort
Settings
PortOpen
Input
Output
InputMode
二、编程完成
从表1能够看到,MSCOMM能够两种不同的方法接纳数据,即以文本方法和以二进制方法。用MSCOMM控件进行字符数据传输的文献和材料能够找到许多,在Microsoft的MSDN(Microsoft
在VC++6.0中,用APPWizard能够生成三种运用程序:单文档(SDI)、多文档(MDI)和依据对话框的运用程序。为了阐明问题和省去不必要的细节,下面以依据对话框的运用程序为例。
1.创立一个依据对话框的运用程序
翻开VC++6.0集成开发环境,挑选菜单项File/New,在呈现的对话框中选中Projects标签中的MFC
2.刺进MSCOMM控件
挑选菜单项Project/Add
此刻即可将MSCOMM控件参加到对话框模板,参加办法与其他控件相同。然后还要在对话框类中相应参加一个成员变量,此处咱们将其命名为m_comm。参加办法为:首要,在对话框模板中,用鼠标右键点击该控件,挑选ClassWizard,在呈现的对话框的Member
3.设置特点
能够在两个当地对控件的特点进行设置:
(1)对话框资源编辑器中。在对话框模板上,用右键单击MSCOMM控件,然后挑选Properties…菜单项,最终便可设置各项特点。此处只对以下几处进行改动,其他承受缺省设置:Rthershold:1,InputLen:1,DTREnable:不选,InputMode:1-Binary。
(2)对话框类的OnInitDialog()函数中。下面是以上设置的函数完成:
BOOL
{
CDialog::OnlnitDialog();
//此处为运用结构主动生成代码,不予列出
//TODO:Add
m_comm.SetCommPort(1);//运用串口1
m_comm.SetSettings(“9600,N,8,1”);
//波特率为9600,无奇偶校验,8位数据位,1位中止位
m_comm.SetRThreshold(10);
m_comm.SetSThreshold(0);
m_comm.SetInputLen(10);
m_comm.SetInputMode(1);
m_comm.SetPortOpen(TRUE);
return
}
4.发送二进制数据
假如需求发送二进制数据,可将数据作如下处理。详细代码如下:
CByteArray
bytOutArr.Add(0x0);
bytOutArr.Add(0x1);
bytOutArr.Add(0x2);
bytOutArr.Add(0x3);
bytOutArr.Add(0x4);
COleVariant
varOut=COleVariant(bytOutArr);
m_comm.SetOutput
5.接纳二进制数据
当需求接纳很多的数据时,最好选用事情驱动办法进行编程。详细步骤如下:
(1)呼应OnComm事情。在对话框资源编程器中,双击对话框模板上的MSCOMM控件,在弹出的对话框中填入您所期望的事情呼应函数名,此处将其命名为OnCommMscomm1()。
(2)在事情呼应函数中接纳和处理数据。接纳来的数据为变体数据,所以需求做一些处理,详细代码如下:
void
{
COleVariant
CByteArray
int
long
switch
{
cass
break;
case
varRcv=m_comm.GetInput();
varRcv.ChangeType
BYTE
HRESULT
hr=SafeArrayAccessData
if
AfxMessageBox(“获取数组指针失利!”);
break;}
num=0;
hr=SafeArrayGetUBound
if
AfxMessageBox(“获取数组上界失利!”);
break;}
for(i=0;i
byt.Add(pbstr
SafeArrayUnaccessData
//此刻数据已保存在二进制数组byt中,可依据需求进行相关处理
break;
default:
break;
}
}
以上代码中的处理部分能够做成一个独自的函数,在此处调用即可。通过以上代码的处理,接纳来的数据已存放在二进制数组byt中,能够依据自己的需求对其进行相关处理,如保存和显现等。
三、硬件接口