Windows環(huán)境下PC機(jī)與單片機(jī)串行通信的實(shí)現(xiàn)
由通信協(xié)議可知,數(shù)據(jù)包中的數(shù)是以十六進(jìn)制字符表示,因此在發(fā)送數(shù)據(jù)時(shí),對(duì)數(shù)據(jù)還需做一定的處理。即先將需要發(fā)送的字符串轉(zhuǎn)換為相應(yīng)的十六進(jìn)制字節(jié)串,然后再經(jīng)COleVariant類將其轉(zhuǎn)換為通用的VARIANT型變量,再通過控件的SetOutput()函數(shù)把數(shù)據(jù)從串口發(fā)出去。以發(fā)送1幀數(shù)據(jù)為例,其實(shí)現(xiàn)的主要代碼如下:
至于數(shù)據(jù)的接收,我們通過讓MSComm控件響應(yīng)OnComm事件來完成,通過ClassWizard加入其對(duì)事件的響應(yīng),當(dāng)有數(shù)據(jù)到達(dá)時(shí)便會(huì)通知 OnComm()函數(shù)去處理,從而實(shí)現(xiàn)數(shù)據(jù)的異步接收。由于接收的數(shù)據(jù)為變體數(shù)據(jù)VARIANT,因此,還必須做一些處理,具體實(shí)現(xiàn)代碼如下:
根據(jù)以上的方法,我們無需花很大的工作量,就能編寫出一個(gè)功能較強(qiáng)的串口通信程序。
4 結(jié) 語
按以上方法編寫的程序在Windows XP下由Microsoft VisualC++6.0編譯通過,并在PC機(jī)與遙控CCD相機(jī)控制子系統(tǒng)的串行通信過程中獲得了滿意的效果。同時(shí)串行通信的這種軟、硬件實(shí)現(xiàn)方法也可以用于PC機(jī)與其他外設(shè)之間的通信,實(shí)用范圍非常廣泛。
參考文獻(xiàn)
[1]希望圖書創(chuàng)作室.Visual C++6.0技術(shù)內(nèi)幕[M].第5版.北京:北京希望電子出版社,1999.
[2]何立明.單片機(jī)中級(jí)教程[M].北京:北京航空航天大學(xué)出版社,1999.
[3]嘯峰工作室.在VCA++中利用ActiveX控件開發(fā)串行通信程序[DB].http://www.gjwtech.com/serialcomm.htm,2002.
評(píng)論