<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 單片機通信協(xié)議處理

單片機通信協(xié)議處理

作者: 時(shí)間:2012-10-26 來(lái)源:網(wǎng)絡(luò ) 收藏

4. 上位機中的數據接收和命令

上位機中數據接收的過(guò)程與下位機可以做到完全一致,不過(guò)針對不同的串口操作方法有所不同。對于阻賽式的串口讀函數,例如直接進(jìn)行API操作或者調用windows的串口控件,最好能夠開(kāi)啟一個(gè)線(xiàn)程專(zhuān)門(mén)用于監視串口的數據接收,每接收到一個(gè)數據可以向系統發(fā)送一個(gè)消息。筆者常用的CSerialPort類(lèi)中就是這樣的過(guò)程。CSerialPort打開(kāi)串口后開(kāi)啟線(xiàn)程監視串口的數據接收,將接收的數據保存到緩沖區,并向父進(jìn)程發(fā)送接收數據的消息,數據將隨消息一起發(fā)送到父進(jìn)程。父進(jìn)程中開(kāi)啟此消息的函數,從中獲取串口數據后就可以把以上的代碼拷貝過(guò)來(lái)使用。

CSerialPort向父類(lèi)發(fā)送的消息號如下:

#define WM_COMM_RXCHAR WM_USER+7 // A character was received and placed in the input buffer.

因此需要手動(dòng)添加此消息的響應函數:

afx_msg LONG OnCommunication(WPARAM ch, LPARAM port);

ON_MESSAGE(WM_COMM_RXCHAR, OnCommunication)

響應函數的具體代碼如下:

LONG CWellInfoView::OnCommunication(WPARAM ch, LPARAM port)

{

int retval = 0;

rcvdat = (BYTE)ch;

if(state_machine == 0) // 解析狀態(tài)機

{

if(rcvdat == 0x55) // 接收到幀頭第一個(gè)數據

state_machine = 1;

else

state_machine = 0; // 狀態(tài)機復位

}

else if(state_machine == 1)

{

if(rcvdat == 0xAA) // 接收到幀頭第二個(gè)數據

state_machine = 2;

else

state_machine = 0; // 狀態(tài)機復位

......

5. 總結

以上給出的是系統運作的基本雛形,雖然簡(jiǎn)單,但是可行。實(shí)際的系統中比這個(gè)要復雜,而且涉及到數據包響應、命令錯誤、延時(shí)等等一系列的問(wèn)題,在這樣的一個(gè)基礎上可以克服這些困難并且實(shí)現出較為穩定可靠的系統。


上一頁(yè) 1 2 3 下一頁(yè)

關(guān)鍵詞: 處理 協(xié)議 通信 單片機

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>