trol notification handler code here VARIANT variant_inp; COleSafeArray safearray_inp; LONG len,k; BYTE rxdata[2048]; //设置 BYTE 数组 An 8-bit integerthat is not signed. CString strtemp; if(m_ctrlComm.GetCommEvent()==2) //事件值为 2 表示接收缓冲区内有字符 { ////////以下你可以根据自己的
通信协议加入处理代码 variant_inp=m_ctrlComm.GetInput(); //读缓冲区 safearray_inp=variant_inp; //VARIANT 型变量转换为 ColeSafeArray 型变量 len=safearray_inp.GetOneDimSize(); //得到有效数据长度 for(k=0;k
到目前为止还不能在接收编辑框中看到数据, 因为我们还没有打开串口, 但运行程序不应该 有任何错误,不然,你肯定哪儿没看仔细,因为我是打开 VC6 对照着做一步写一行的,运 行试试。没错吧?那么做下一步: 6.打开串口和设置串口参数 你可以在你需要的时候打开串口, 例如在程序中做一个开始按 钮, 在该按钮的处理函数中打开串口。 现在我们在主对话框的 CSCommTestDlg::OnInitDialog() 打开串口,加入如下代码: // TODO: Add extra initialization here if(m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(FALSE); m_ctrlComm.SetCommPort(1); //选择 com1 if( !m_ctrlComm.GetPortOpen()) m_ctrlComm.SetPortOpen(TRUE);//打开串口 else AfxMessageBox("cannot open serial port");
m_ctrlComm.SetSettings("9600,n,8,1"); //波特率 9600,无校验,8 个数据位,1
个停止位 m_ctrlComm.SetInputModel(1); //1:表示以二进制方式检取数据 m_ctrlComm.SetRThreshold(1); //参数 1 表示每当串口接收缓冲区中有多于或等于 1 个字符时将引发一个接收数据的 OnComm 事件 m_ctrlComm.SetInputLen(0); //设置当前接收区数据长度为 0 m_ctrlComm.GetInput();//先预读缓冲区以清除残留数据
现在你可以试试程序了,将串口线接好后(不会接?去看看我写的串口接线基本方法) ,打 开串口调试助手,并将串口设在 com2,选上自动发送,也可以等会手动发送。再执行你编 写的程序,接收框里应该有数据显示了。 7.发送数据 先为发送按钮添加一个单击消息即 BN_CLICKED 处理函数, 打开 ClassWizard ->Message Maps,选择类 CSCommTestDlg,选择 IDC_BUTTON_MANUALSEND,双击 BN_CLICKED 添加 OnButtonManualsend()函数,并在函数中添加如下代码: void CSCommTestDlg::OnButtonManualsend() { // TODO: Add your control notification handler code here UpdateData(TRUE); //读取编辑框内容 m_ctrlComm.SetOutput(COleVariant(m_strTXData));//发送数据 } 运行程序,在发送编辑框中随意输入点什么,单击发送按钮,啊!看看,在另一端的串口调 试助手(或别的调试工具)接收框里出现了什么。 如果你真是初次涉猎串口编程,又一次成功,那该说声谢谢我了,因为我第一次做串口程序 时可费劲了,那时网上的资料也不好找。开开玩笑,谢谢你的支持,有什么好东西别忘了给 我寄一份。 最后说明一下,由于用到 VC 控件,在没有安装 VC 的计算机上运行时要从 VC 中把 mscomm32.ocx、msvcrt.dll、mfc42.dll 拷到 Windows 目录下的 System 子目录中(win2000 为 System32)并再进行注册设置,请参考 如何手工注册 MSComm 控件。 龚建伟 2001.6.20
什么是 VARIANT 数据类型?如何使用 VARIANT 数据类型? 怎么以十六进制或二进制发 送和接收?
目次: 1.建立项目 2.在项目中插入 MSComm 控