基于89C2051單片機的熱表通訊模塊的開發(fā)
圖6 信息幀一般格式
上位機發(fā)送信息幀時,下位機全部收到上位機的信息幀,然后判斷信息幀中的地址碼,如果是自己的地址碼,則根據(jù)數(shù)據(jù)幀中的信息碼內(nèi)容作出相應(yīng)的反應(yīng)。信息幀的長度不限(根據(jù)系統(tǒng)中下位機的個數(shù)以及信息碼的形式?jīng)Q定) ,是多個字節(jié)的。在這種通信格式中還可以用軟件的方式進行一些通信數(shù)據(jù)的校驗。
工控機與下位機通訊模塊之間的通信協(xié)議,如圖7 所示。
圖7 工控機與下位機通訊模塊間的通信協(xié)議
上位機工控機向下位機發(fā)出的信息幀中應(yīng)包含地址和控制指令信息,以便下位機的通訊模塊能辨識出是否及如何應(yīng)答;通訊模塊,向上位機回復(fù)的信息幀中應(yīng)包含自身地址及對應(yīng)控制指令的數(shù)據(jù);同步字和結(jié)束字是完成異步通訊必須的,因此無論上位機信息幀還是下位機信息幀都不可少。具體的信息幀格式如下(括號里標(biāo)注為字節(jié)數(shù),未標(biāo)出的字節(jié)數(shù)為1) :
整個收發(fā)數(shù)據(jù)的互控流程如下:
上位機:按照一定的時間發(fā)送指令給下位機;
下位機:收到信息幀后,判斷信息幀中的地址是否為本機地址,若是則將本機地址發(fā)回上位機,并根據(jù)控制字向熱表發(fā)出相應(yīng)的指令,等待模擬串口中斷,將熱表數(shù)據(jù)傳給單片機,之后轉(zhuǎn)發(fā)給上位機;反之則退出中斷程序;
上位機:根據(jù)串口引發(fā)的事件接受數(shù)據(jù),判斷來源后存入數(shù)據(jù)庫并通過人機界面顯示。
按照上述通信協(xié)議,綜合串口模擬過程對通訊模塊(下位機) 進行編程。編寫的程序主要包括主程序和中斷程序;中斷程序有模擬串口中斷接收程序和串行中斷程序。其中主程序完成各個特殊寄存器及通信參數(shù)、格式的初始化工作,分析判斷串行中斷,接受信息向熱表發(fā)出相應(yīng)的指令;模擬串口中斷程序具體完成熱表數(shù)據(jù)的接收;串行中斷程序完成對上位機發(fā)出信息幀的接收。另外,考慮到實際應(yīng)用當(dāng)中各種隨機干擾,在編寫程序時作了適當(dāng)?shù)募m錯處理,即通訊模塊收到上位機指令后對熱表進行操作,若在一定時間內(nèi)沒有收到回應(yīng),則使程序復(fù)位。
每臺熱表對應(yīng)的通訊模塊地址的標(biāo)識方法如圖8所示。充分利用了該型號單片機的硬件資源,以跳線的方式設(shè)定P1 端口各個管腳的電平作為地址標(biāo)識,8個管腳不同的通斷組合可以表示不同的地址。
圖8 通信模塊地址標(biāo)識
通訊模塊的編程都是利用仿真器提供的環(huán)境進行模擬并調(diào)試成功的。
4 與上位機軟件接口
通過通訊模塊最終實現(xiàn)工控機對熱表數(shù)據(jù)的讀取還需要對上位機進行通訊接口程序的編寫。上位機通訊程序的編寫也同樣有多種方法: (1) 通過調(diào)用WINDOWS 提供的API 函數(shù)實現(xiàn); (2) 采用匯編語言和C 語言混合編寫動態(tài)連接庫函數(shù)實現(xiàn); (3) 利用VB 語言及其提供的串行通信控件實現(xiàn)。第3 種方法最簡單, 開發(fā)周期短, 經(jīng)濟實用。只需在工程中添加MSCOMM控件, 然后進行相應(yīng)的屬性設(shè)置, 便可完成數(shù)據(jù)的收發(fā)。但VB 中的數(shù)據(jù)收發(fā)分為二進制形式和文本形式。若發(fā)送文本, 單片機收到的文本是ASC Ⅱ碼, 在VB6. 0 中使用的是Unicode 字符,即用2 個字符來表示1 個字符, 當(dāng)發(fā)送1 個字符時單片機收到2 個字節(jié)。因此大多情況下PC 機與單片機通訊交換的是二進制數(shù)據(jù)。所以利用MSCOMM 控件來發(fā)送二進制數(shù)據(jù)時, 必須將變量聲明為Byte 形式。
參考文獻
[1 ] 胡漢才. 單片機原理及其接口技術(shù). 北京:清華大學(xué)出版社,1993 :317 - 320.
[2 ] 李華,嚴(yán)天峰. 串行通訊軟硬件的實現(xiàn)方法. 電子世界,2003 (5) :31 - 33.
[3 ] 王小軍,郝迎吉,張斌. 單片機串行通信中兩個問題的討論. 現(xiàn)代電子技術(shù),2002 (1) :69 - 71.
評論