首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

VC++ 6.0 使用 MSComm 控件實現串口通信

     編輯:關於VC++

控件嵌入步驟

  1. 新建專案勾選 ActiveX Controls
  2. 專案 → 加入項目 → 元件與控件 → 已註冊的 ActiveX 控件
  3. 選擇 Microsoft Communications Control 6.0 (黃色電話圖標) → 插入
  4. 確認生成類 CMSComm、頭文件 MSComm.h、實現 MSComm.cpp
  5. 從控件工具箱拖放至對話框

關鍵屬性設置

屬性值說明
CommPort1串口號
Settings9600,n,8,1波特率、校驗、數據位、停止位
InBufferSize4096輸入緩衝區
Rthreshold250觸發 OnComm 事件的字符數
InputMode1 (Binary)二進制模式
Handshaking0 (None)無硬件流控
DTREnableTRUE啟用 DTR
RTSEnableFALSE禁用 RTS
EOFEnableTRUE啟用 EOF 字符檢測
Sthreshold0發送閾值

事件驅動處理模型

OnComm 事件在通信發生時觸發,調用 GetCommEvent() 判斷事件類型:

  • 2 = comEvReceive 接收字符
  • 其他參考文檔

GPS 數據接收完整代碼

void CGpsDlg::OnButtonStartreceivegps() {
    if (!m_Comm.GetPortOpen()) m_Comm.SetPortOpen(TRUE);
    UpdateData(TRUE);
}

void CGpsDlg::OnButtonEndreceivegps() {
    if (m_Comm.GetPortOpen()) m_Comm.SetPortOpen(FALSE);
    UpdateData(FALSE);
}

void CGpsDlg::OnComm() {
    if (m_Comm.GetCommEvent() == 2) { // 接收事件
        m_comdata.Empty();
        VARIANT var = m_Comm.GetInput();
        COleSafeArray sa(var);
        long len = sa.GetOneDimSize();
        BYTE buf[1024];
        for (long i=0; i= 0) {
            CString gps = m_comdata.Mid(pos, EXPECTED_LEN);
            if (gps.GetLength() == EXPECTED_LEN && gps.Find("$GPRMC,") == 0)
                m_gpsdata = gps; // 進一步解析經緯度、時間
        }
    }
}

環境驗證

Win98/95/NT + P133 + ROCKWELL JUPITER GPS 接收板測試通過。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved