<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è) > 嵌入式系統 > 設計應用 > 基于89C2051單片機的熱表通訊模塊的開(kāi)發(fā)

基于89C2051單片機的熱表通訊模塊的開(kāi)發(fā)

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

基于89C2051單片機的熱表通訊模塊的開(kāi)發(fā)
圖6  信息幀一般格式
  上位機發(fā)送信息幀時(shí),下位機全部收到上位機的信息幀,然后判斷信息幀中的地址碼,如果是自己的地址碼,則根據數據幀中的信息碼內容作出相應的反應。信息幀的長(cháng)度不限(根據系統中下位機的個(gè)數以及信息碼的形式?jīng)Q定) ,是多個(gè)字節的。在這種通信格式中還可以用軟件的方式進(jìn)行一些通信數據的校驗。
工控機與下位機通訊模塊之間的通信協(xié)議,如圖7 所示。
基于89C2051單片機的熱表通訊模塊的開(kāi)發(fā)
圖7  工控機與下位機通訊模塊間的通信協(xié)議
  上位機工控機向下位機發(fā)出的信息幀中應包含地址和控制指令信息,以便下位機的通訊模塊能辨識出是否及如何應答;通訊模塊,向上位機回復的信息幀中應包含自身地址及對應控制指令的數據;同步字和結束字是完成異步通訊必須的,因此無(wú)論上位機信息幀還是下位機信息幀都不可少。具體的信息幀格式如下(括號里標注為字節數,未標出的字節數為1) :
整個(gè)收發(fā)數據的互控流程如下:
上位機:按照一定的時(shí)間發(fā)送指令給下位機;
下位機:收到信息幀后,判斷信息幀中的地址是否為本機地址,若是則將本機地址發(fā)回上位機,并根據控制字向熱表發(fā)出相應的指令,等待模擬串口中斷,將熱表數據傳給,之后轉發(fā)給上位機;反之則退出中斷程序;
上位機:根據串口引發(fā)的事件接受數據,判斷來(lái)源后存入數據庫并通過(guò)人機界面顯示。
按照上述通信協(xié)議,綜合串口模擬過(guò)程對通訊模塊(下位機) 進(jìn)行編程。編寫(xiě)的程序主要包括主程序和中斷程序;中斷程序有模擬串口中斷接收程序和串行中斷程序。其中主程序完成各個(gè)特殊寄存器及通信參數、格式的初始化工作,分析判斷串行中斷,接受信息向熱表發(fā)出相應的指令;模擬串口中斷程序具體完成熱表數據的接收;串行中斷程序完成對上位機發(fā)出信息幀的接收。另外,考慮到實(shí)際應用當中各種隨機干擾,在編寫(xiě)程序時(shí)作了適當的糾錯處理,即通訊模塊收到上位機指令后對熱表進(jìn)行操作,若在一定時(shí)間內沒(méi)有收到回應,則使程序復位。
每臺熱表對應的通訊模塊地址的標識方法如圖8所示。充分利用了該型號的硬件資源,以跳線(xiàn)的方式設定P1 端口各個(gè)管腳的電平作為地址標識,8個(gè)管腳不同的通斷組合可以表示不同的地址。
基于89C2051單片機的熱表通訊模塊的開(kāi)發(fā)
圖8  通信模塊地址標識
通訊模塊的編程都是利用仿真器提供的環(huán)境進(jìn)行模擬并調試成功的。

4  與上位機軟件接口
通過(guò)通訊模塊最終實(shí)現工控機對熱表數據的讀取還需要對上位機進(jìn)行通訊接口程序的編寫(xiě)。上位機通訊程序的編寫(xiě)也同樣有多種方法: (1) 通過(guò)調用WINDOWS 提供的API 函數實(shí)現; (2) 采用匯編語(yǔ)言和C 語(yǔ)言混合編寫(xiě)動(dòng)態(tài)連接庫函數實(shí)現; (3) 利用VB 語(yǔ)言及其提供的串行通信控件實(shí)現。第3 種方法最簡(jiǎn)單, 開(kāi)發(fā)周期短, 經(jīng)濟實(shí)用。只需在工程中添加MSCOMM控件, 然后進(jìn)行相應的屬性設置, 便可完成數據的收發(fā)。但VB 中的數據收發(fā)分為二進(jìn)制形式和文本形式。若發(fā)送文本, 收到的文本是ASC Ⅱ碼, 在VB6. 0 中使用的是Unicode 字符,即用2 個(gè)字符來(lái)表示1 個(gè)字符, 當發(fā)送1 個(gè)字符時(shí)單片機收到2 個(gè)字節。因此大多情況下PC 機與單片機通訊交換的是二進(jìn)制數據。所以利用MSCOMM 控件來(lái)發(fā)送二進(jìn)制數據時(shí), 必須將變量聲明為Byte 形式。

參考文獻
[1 ]  胡漢才. 單片機原理及其接口技術(shù). 北京:清華大學(xué)出版社,1993 :317 - 320.
[2 ]  李華,嚴天峰. 串行通訊軟硬件的實(shí)現方法. 電子世界,2003 (5) :31 - 33.
[3 ]  王小軍,郝迎吉,張斌. 單片機串行通信中兩個(gè)問(wèn)題的討論. 現代電子技術(shù),2002 (1) :69 - 71.


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

關(guān)鍵詞: 89C2051 單片機 熱表通訊模塊

評論


相關(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>