MSCOMM32串口编程循环读取数据

来源:互联网 发布:星际战甲腐蚀投射数据 编辑:程序博客网 时间:2024/06/03 21:41

MSCOMM32中设置接收字节数触发事件使用m_mscommCtrl.put_RThreshold(1);表示串口接收到一个字节就触发接收事件,于是需要接收时循环接收数据知道没有数据。

代码如下:

BEGIN_EVENTSINK_MAP(CMSCommMFCDemoDlg, CDialogEx)ON_EVENT(CMSCommMFCDemoDlg, IDC_MSCOMM1, 1, CMSCommMFCDemoDlg::OnCommMscomm1, VTS_NONE)END_EVENTSINK_MAP()void CMSCommMFCDemoDlg::OnCommMscomm1(){// TODO: 在此处添加消息处理程序代码if (m_mscommCtrl.get_CommEvent() == 2){//接收事件CByteArray byArrRecv;byArrRecv.RemoveAll();//循环读取数据,直到读取完毕while (m_mscommCtrl.get_InBufferCount() > 0){CByteArray byArrRecvTemp;byArrRecvTemp.RemoveAll();COleSafeArray stSafeArr = (COleSafeArray)(m_mscommCtrl.get_Input());  //读取数据stSafeArr.GetByteArray(byArrRecv);byArrRecv.Append(byArrRecvTemp);}CString csRecv;for (int i = 0; i < byArrRecv.GetSize(); ++i){csRecv.AppendFormat(_T("%02x "), byArrRecv.GetAt(i));//十六进制//csRecv.AppendFormat(_T("%c"), byArrRecv.GetAt(i));//十进制常规数据}m_csReceive.Append(csRecv);//更新编辑框UpdateData(FALSE);}return;}


原创粉丝点击