<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ò ) 收藏


3.2  串行通信軟件
普通I/ O 口模擬串口的軟件編程實(shí)質(zhì)上就是模擬異步通訊規程。異步通信規程是把一個(gè)字符看作一個(gè)獨立的信息單元,并且字符出現在數據流中的相對時(shí)間是任意的。而每個(gè)字符中各數據位以固定的時(shí)間傳送,因此這種傳送在同一字符內部是同步的,而字符間是異步的。異步通信收發(fā)取得同步的方法,是采用在字符格式中設置起始位和停止位。但由于發(fā)送器和接收器不是使用同一個(gè)時(shí)鐘,而是以各自時(shí)鐘來(lái)劃分每位的寬度,收發(fā)時(shí)鐘的誤差必然影響數據的正確采樣,所以要求準確識別起始位的前沿。實(shí)際的做法是利用1 個(gè)16 倍波特率的時(shí)鐘,在1 個(gè)位周期的1/ 16 時(shí)間內確定出字符的開(kāi)始,接收器在每個(gè)時(shí)鐘的上升沿采樣數據輸入線(xiàn)。若發(fā)現低電平,緊接著(zhù)又連續采樣到8 次均為低電平,則認定為起始位,以后每隔16 個(gè)時(shí)鐘采樣1 次數據。字符再同步過(guò)程見(jiàn)圖4。
基于89C2051單片機的熱表通訊模塊的開(kāi)發(fā)
圖4  f = 16 倍波特率的字符再同步過(guò)程
在軟件編程中,根據熱表發(fā)送數據的波特率計算出數據位周期,而后再根據的晶振頻率編寫(xiě)數據位周期延遲程序和半位周期延遲程序。當檢測到INT0 (即P3. 2 端口) 為低電平時(shí),外部中斷觸發(fā),進(jìn)入中斷處理程序。首先,調用半位周期延時(shí)程序,判斷是否為起始位,若是則再調用位周期延時(shí)程序,進(jìn)行數據位的判斷與接收,最后判斷接收停止位。只要延時(shí)程序能準確地保證延時(shí)時(shí)間,就能完成對圖4 中工作時(shí)序的模擬。另外,在接收數據幀各個(gè)位時(shí),都連續地采樣3 次,并遵循3 中取2 的原則來(lái)確定所檢測的值。這樣做很大程度上抑制了干擾,提高了信
號傳輸的可靠性。同理,發(fā)送數據時(shí)只要調整好發(fā)送數據幀各數據位之間的傳輸時(shí)間間隔,滿(mǎn)足熱表接收數據的波特率,就能完成熱表對單片機發(fā)送數據的接收,程序流程圖如圖5 所示。
基于89C2051單片機的熱表通訊模塊的開(kāi)發(fā)

3.3  通信協(xié)議
單片機的串行口工作于方式2 或方式3 時(shí),數據幀由11 位數據組成:1 位起始位、9 位數據位、1 位停止位。在這兩種方式下,第9 位數據是可控的標志位,只有第9 位的數據是“1”(代表地址幀) 時(shí),串行口接口電路才會(huì )在接收完1 個(gè)數據后,向CPU 請求中斷。因為PC 機的異步通信功能沒(méi)有這樣的通信格式,所以這種方式只適合單片機之間的多機通信。一般情況下,實(shí)現兩種異型機之間的通信常采用以下幾種方式:
(1) 用1 臺單片機作為上位PC 機和下位單片機之間的“橋梁”,實(shí)現數據格式的轉換;
(2) 在PC 機內安裝異步通信適配卡,通過(guò)設計可編程芯片的運行方式,使之與單片機的多機通信方式一致;
(3) 設置上位機編程環(huán)境提供的串行通訊控件的屬性來(lái)區分尋址指令和數據傳送指令,進(jìn)而實(shí)現通訊。
方法1 和方法2 硬件結構復雜,方法3 軟件代碼編寫(xiě)繁瑣。在系統不復雜、任務(wù)不重、通信數據量不大的情況下,這些方法還不會(huì )有明顯的缺陷,否則方法1 中的“橋梁”單片機和方法2 中的通信異步適配器將會(huì )成為通信信道的瓶頸,而方法3 中數據幀中的奇偶校驗位通常用作發(fā)送地址碼(通道號) 或數據的特征位,這樣數據通信的校核會(huì )采用累加和校驗的方法,采用這種方法不但軟件開(kāi)銷(xiāo)和進(jìn)行通信的數據量增加了,而且實(shí)時(shí)性也受到影響。
根據實(shí)際情況,采用了通信信息幀不區分數據幀和地址幀的方法,這樣做不必使單片機工作在11 位異步收發(fā)方式下,使單片機和PC 機的串口工作方式一致。受到通信格式的啟發(fā),設計信息幀見(jiàn)圖6 ,用1~3 個(gè)字節作為數據通信的“報頭”,起同步作用;用1個(gè)或多個(gè)字節作為單片機的地址區別碼來(lái)標識某個(gè)單片機(根據系統中下位機的個(gè)數決定) ;用來(lái)標志下位機工作性質(zhì)的信息碼可根據實(shí)際的情況在信息幀中靈活設置。


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