VC编写串口通信

2019-03-23 10:25

串口通信是很常见的比如GPS, GPRS,单片机等等一些外设仪器都是采用串口通信,所以串口通信在一些项目中很常见也很重要。

VC++编写串口通信的方法有很多种,我这里说的是使用微软提供的ActiveX控件MsComm来进行通信的。要使用MsComm控件,你就必须先在你的系统中注册这个控件,具体的注册方法网上也很多,我就不说了。

注册好控件后,你就在你建好的工程的对话框上”右击”选择”添加ActiveX控件”, 在弹出的窗口中选MsComm就完成了MsComm控件对你现在的项目的支持。此时vs会在你的项目中添加一个从CWnd派生出来的类CMscomm1,我们也就是通过这个类来进行通信的。

然后在你的对话框类里面添加一个CMscomm1 的对象m_comm及函数

OnCommMscomm1,添加m_comm对象的目的很明显,因为只有将CMscomm1类进行的实例化才能进行通信。而添加函数OnCommMscomm1是因为MsComm控件是采用了事件驱动法进行通信的,也就是说只要当相应的串口有变化,MsComm控件就会引发一个OnComm的事件,然后再由OnCommMscomm1对该事件进行响应。要想

OnCommMscomm1函数对OnComm事件进行响应,那么我们还需要添加一个事件接受映射,让MsComm知道是由OnCommMscomm1进行接收该事件的处理。事件接收映射添加代码如下:

? ? ?

BEGIN_EVENTSINK_MAP(CsdDlg,CDialog)

ON_EVENT(CsdDlg,IDC_MSCOMM1,1,CsdDlg::OnCommMscomm1,VTS_NONE) END_EVENTSINK_MAP()

上面的都完成后,就需要在OnInitDialog函数中添加串口通信的一些初始化代码:

? ? ? ? ?

//如果端口原来打开,则需要先关闭 if(m_comm.get_PortOpen()) m_comm.put_PortOpen(FALSE);

// _T(\串口参数,波特率:38400, 8为数据位,1为停止位 //设置连接参数

? m_comm.put__CommPort(2); //指定串口号

?? m_comm.put_Settings(_T(\9600, n, 8, 1\));//通信参数设置 ?? m_comm.put_InBufferSize(1024);//指定接收缓冲区大小 ?? m_comm.put_InBufferCount(0); //清空输入缓冲区 ?? m_comm.put_InputMode(0); //文本模式获取数据 ?? m_comm.put_InputLen(0); //读取缓冲区的全部数据

?? m_comm.put_RThreshold(1); //设置在产生OnComm事件前要接收的字符数阈值 ??

?? //打开端口连接

?? if(!m_comm.get_PortOpen()) ?? m_comm.put_PortOpen(TRUE);

MsComm的初始化的一些参数我就不介绍了,网上也很多。我上面的代码,我使用的是串口2,通信设备的波特率为9600.

通过上面的操作,我们可以实现VC++的串口通信,要通信,就要有接收很发送,接收信息的事件是在OnComm事件中,我们可以通过MsComm的get_CommEvent() 这个属性来判断发来的信息是否是有效的,然后通过get_Input()取得发来的信息。

?? if(m_comm.get_CommEvent() <1000) { ?? VARIANT var_in;

?? var_in =m_comm.get_Input(); //读缓冲区

?? CString str =var_in.bstrVal; //转换成CString类型 ??

?? m_stc.SetWindowTextW(str); ??

?? if(str ==_T(\D\)) {

?? m_stc.SetWindowTextW(_T(\收到\)); ?? } ?? }

我的代码还对信息的内容进行判断,然后收到的信息是一个字母D,那么才进行处理。 对于信息的发送,也很简单,直接put_Output()这个成员函数,比如我们需要向串口发送一个字母Z,那么我们可以如下:

?? void CsdDlg::OnBnClickedButton1() ?? {

?? // TODO: 在此添加控件通知处理程序代码 ?? // m_stc.SetWindowTextW(_T(\正转\ ?? m_comm.put_Output(COleVariant(_T(\Z\))); ?? }

其中COleVariant是一个嵌入式的变量类型。

就这么简单,可以实现VC++程序跟串口之间进行的通信。其实我上面的通信还是比较简单,一般通信为了保证信息的准确性及可靠性,通信的时候都需要加上”三次握手”等通信来保证可靠的通信。

我的代码写的时候,我是使用凌阳单片机进行通信的,其实其它都一样样。 在我的百度Hi里面,有很多以前我收集的VC++关于串口通信的资料,如果你有兴趣,可以在友情链接里面的链接进入我的百度hi去查看文章。


VC编写串口通信.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:上海xx企业知识产权战略规划2016-2025

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: