zoukankan      html  css  js  c++  java
  • MFC使用MsComm做串口通信

    一、注册MSCOMM

    1、下载控件MSCOMM32.OCX(32位),mswnisck.ocx(64位)

    2、把这个ocx文件放在c盘WIndows的system32里,打开cmd执行:regsvr32 MSCOMM32.OCX(32位)

       把这个ocx文件放在c盘WIndows的syswow64里,打开cmd执行:regsvr32 c:windossyswowmswnisck.OCX(64位)

    3、在图形界面右键-》插入ActiveX控件,找到MS Communication控件,放在界面里(是一个黄色电话)

    二、打开串口

    m_mscomm.put__CommPort(1);//选择串口一
    m_mscomm.put_InputMode(1);//二进制方式读写数据
    m_mscomm.put_InBufferSize(1024);//接收缓冲区大小,字节
    m_mscomm.put_OutBufferSize(1024);//发送缓冲区大小,字节
    m_mscomm.put_Settings(_T("9600,n,8,1"));//9600波特率,8个数据位,1个停止位
    m_mscomm.put_InputLen(0);//设置当前接收区数据长度为0,表示全部读取
    m_mscomm.put_RThreshold(1);//接收缓冲区有1个及1个以上字符时,将引发接收数据的OnComm
    m_mscomm.put_PortOpen(TRUE);//打开串口,如果打开失败,此函数会调用AfxMessageBox来显示错误信息,并返回

    三、发送数据

    m_mscomm.put_Output((COleVariant)m_sendstr);//如果发送失败,此函数会调用AfxMessageBox提示错误信息并返回

    四、接收数据(基于事件驱动型,和中断类似)

    在图形界面,右键MSComm控件,添加事件处理程序onComm,在函数里:

    VARIANT variant;
    variant=m_mscomm.get_Input();//把接收缓冲区里的数据放在variant结构体中,这个结构体里有很多联合体,数据应该放在其中一个中
    COleSafeArray colesafearray;//定义一个安全数组,是为了下面处理数据
    colesafearray = variant;//把返回值存放在这个安全数组里
    byte buf[512];//定义一个字节数据
    long len, k;
    len = colesafearray.GetOneDimSize();//数据一共有多少字节
    for (k = 0; k < len; k++)
      colesafearray.GetElement(&k, buf + k);//把安全数组里的数据转移到字节数组buf中,方便打印
    buf[len] = 0;//防止乱码
    AfxMessageBox((CString)buf);

    四、关闭串口

    m_mscomm.put_PortOpen(FALSE);

    ps:如果注册失败,有可能是对c盘的权限不够,把ocx放在其他路径如D盘注册一样使用

  • 相关阅读:
    SNMP++
    临界区,互斥量,信号量,事件的区别
    2015 年最棒的 5 个 HTML5 框架(转)
    java.lang.OutOfMemoryError: PermGen space及其解决方法
    java.net.SocketException: Unrecognized Windows Sockets error: 0: JVM_Bind
    eclipse安装tomcat插件
    (转)Activity的跳转与传值
    Android SDK下载和更新失败的解决方法
    Android客户端WebView控件与Javascript交互
    SCI期刊
  • 原文地址:https://www.cnblogs.com/judes/p/5866494.html
Copyright © 2011-2022 走看看