古詩詞大全網 - 成語查詢 - MFC串口接收數據

MFC串口接收數據

使用MSComm控件串口接收數據,壹般設置成SetRThreshold(1);

//參數1表示每當串口接收緩沖區中有多於或等於1個字符時將引發壹個接收數據的OnComm事件

並且串口每次接收到的數據個數是不確定的,如果妳自己確定需要接收到多少個數據的話,就好辦了。

//全局變量

BYTE Comm_Packet_Len; //需要接收到的數據個數

BYTE Comm_DataBuffer[20]; //依次存放串口接收到的數據

long Comm_Packet_Index; //每次收到數據個數,並標誌數據應放在全局數組位置的索引

//每次處理完數據後清空,為下壹次接收做準備

void CEOLDlg::OnMscomm()

{

// TODO: Add your control notification handler code here

VARIANT variant_inp;

COleSafeArray safearray_inp;

long len=0, k=0; //轉換為數組時使用的變量

BYTE rxdata[204]; //設置BYTE數組 An 8-bit integerthat is not signed.

CString strtemp; //字符型變量

int temp = 0; //臨時變量

unsigned char ecuchecksum = 0; //ecu回傳校驗碼

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 < len; k++) //將ColeSafeArray型變量轉換為BYTE型數組

{

safearray_inp.GetElement(&k, rxdata + k);//轉換為BYTE型數組

}

for(temp = 0; temp < len; temp++)

{

Comm_DataBuffer[Comm_Packet_Index + temp] = rxdata[temp];

}

Comm_Packet_Index += len;

if(Comm_Packet_Index == Comm_Packet_Len)//接收到的數據個數等於

{

//處理接收到的數據

}

}

}