<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應用 > 雙向透明串口擴展技術(shù)在嵌入式系統(tǒng)中的實現(xiàn)

          雙向透明串口擴展技術(shù)在嵌入式系統(tǒng)中的實現(xiàn)

          作者: 時間:2009-08-24 來源:網(wǎng)絡 收藏

          1.2硬件設(shè)計方案
          模塊主要由2部分組成:單片機AT89C2051及模擬開關(guān)CD4052、雙4通道模擬開關(guān)。
          模塊拓撲結(jié)構(gòu)圖如圖2所示,其中虛線框內(nèi)為模塊的主要部分。

          本文引用地址:http://www.ex-cimer.com/article/152376.htm

          2 通信協(xié)議設(shè)計
          2.1數(shù)據(jù)由用戶設(shè)備發(fā)送到HOST端
          由于各模塊是分時復用的,為了避免用戶設(shè)備之間發(fā)生競爭,需要AT89C2051對4個用戶設(shè)備通道進行仲裁,本文采用以下方案。
          4個用戶設(shè)備各用一根I/O口線分別與AT89C2051的P1.0~P1.3引腳相連,同時還與一個4輸入或非門相連,將某根或某幾根I/O口線置高電平并經(jīng)過該4輸入或非門來觸發(fā)中斷,通知AT89C2051有用戶設(shè)備請求向HOST終端發(fā)送數(shù)據(jù),同時AT89C2051進行用戶設(shè)備號查詢。AT89C2051收到請求信號后,首先判斷 HOST端與其他用戶設(shè)備之間的數(shù)據(jù)發(fā)送是否結(jié)束,若結(jié)束,則根據(jù)仲裁機制通過與各用戶設(shè)備相連的P1.4~P1.7引腳置高給出應答響應信號,同時 AT89C2051根據(jù)中斷查詢到的用戶設(shè)備號對P3.4和P3.5引腳進行設(shè)置來控制CD4052模擬開關(guān)選通對應通道,用戶設(shè)備收到應答響應信號后就開始發(fā)送數(shù)據(jù);若未結(jié)束,則屏蔽此次中斷,直到數(shù)據(jù)發(fā)送結(jié)束才開中斷。用戶設(shè)備數(shù)據(jù)發(fā)送結(jié)束時則將通過一個4輸入或非門來觸發(fā)中斷,通知AT89C2051此次數(shù)據(jù)發(fā)送結(jié)束。在響應數(shù)據(jù)發(fā)送請求時會涉及到多個用戶設(shè)備請求,從而需要AT89C2051進行仲裁。仲裁機制如下:心電和血氧模塊是50 ms定時發(fā)送數(shù)據(jù),而血壓模塊需要HOST端發(fā)來啟動測量命令后才向HOST端發(fā)送血壓數(shù)據(jù),因此需要將血壓模塊發(fā)送數(shù)據(jù)的請求設(shè)置為較高優(yōu)先級,才能保證血壓數(shù)據(jù)正確及時地發(fā)送到HOST端,而心電和血氧模塊設(shè)置為低優(yōu)先級輪流發(fā)送。

          linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)


          評論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();