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盘注册一样使用

  • 相关阅读:
    三国杀三字经
    window.open参数表
    捕获FormRequest安全错误的类
    SqlServer之Convert 函数应用格式化日期
    数据库区分大小写的问题
    时间字符串的比较
    char码值对应列表大全
    web.config 连接字符串 加密解密,代码方式
    关于app_offline.htm的用法
    关闭窗口的时候弹出确认对话框
  • 原文地址:https://www.cnblogs.com/judes/p/5866494.html
Copyright © 2011-2022 走看看