CMSComm、頭文件 MSComm.h、實現 MSComm.cpp| 屬性 | 值 | 說明 |
|---|---|---|
| CommPort | 1 | 串口號 |
| Settings | 9600,n,8,1 | 波特率、校驗、數據位、停止位 |
| InBufferSize | 4096 | 輸入緩衝區 |
| Rthreshold | 250 | 觸發 OnComm 事件的字符數 |
| InputMode | 1 (Binary) | 二進制模式 |
| Handshaking | 0 (None) | 無硬件流控 |
| DTREnable | TRUE | 啟用 DTR |
| RTSEnable | FALSE | 禁用 RTS |
| EOFEnable | TRUE | 啟用 EOF 字符檢測 |
| Sthreshold | 0 | 發送閾值 |
OnComm 事件在通信發生時觸發,調用 GetCommEvent() 判斷事件類型:
comEvReceive 接收字符
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 接收板測試通過。