首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

怎么实现串口自动接收数据!

2012-04-05 
如何实现串口自动接收数据!!!!!!MFC问题:MCU在进行数据监测,发现数值变化后,就通过串口发送新的数据给PC软

如何实现串口自动接收数据!!!!!!
MFC

问题:MCU在进行数据监测,发现数值变化后,就通过串口发送新的数据给PC软件,并显示在对话框。
  请问PC方的软件如何判断,MCU已经发给自己数据了?如何接收这些数据?

多多指教!!!!



[解决办法]
1. 先创建线程 m_pThread=AfxBeginThread(CommProc, this, THREAD_PRIORITY_NORMAL, 0, CREATE_SUSPENDED, NULL); // 创建并挂起线程
2. 配置好串口后恢复线程运行 m_pThread->ResumeThread(); // 
3. 在 CommProc 中监听事件

C/C++ code
UINT CommProc(LPVOID pParam){    OVERLAPPED os;    DWORD dwMask, dwTrans;    memset(&os, 0, sizeof(OVERLAPPED));    os.hEvent=CreateEvent(NULL, TRUE, FALSE, NULL);    if(os.hEvent==NULL)    {        AfxMessageBox("Can't create event object!");        return (UINT)-1;    }    while(m_bConnected)    {         dwMask=0;        if(WaitCommEvent(m_hCom, &dwMask, &os)) // 重叠操作        {            if(GetLastError()==ERROR_IO_PENDING)                // 无限等待重叠操作结果                GetOverlappedResult(m_hCom, &os, &dwTrans, TRUE);            else            {                CloseHandle(os.hEvent);                return (UINT)-1;            }        }        else        {        [color=#FF0000]if (dwMask&EV_RXCHAR){            WaitForSingleObject(m_hPostMsgEvent, INFINITE);                        /* 收到字符,可以通过PostMessage等方法通知主程序*/                        在这里添加代码            }[/color]        if (dwMask&EV_TXEMPTY) {            WaitForSingleObject(m_hPostMsgEvent, INFINITE);                        /* 发送字符完毕*/                        在这里添加代码            }                    }            }    CloseHandle(os.hEvent);    return 0;}
[解决办法]
用微软串口控件MSCOMM32.OCX,添加之窗体加入窗体,双击打开接收响应函数在窗体初始化部分将串口打开就可以了。

热点排行