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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 用一只引腳為微控制器輸入并行數(shù)據(jù)

          用一只引腳為微控制器輸入并行數(shù)據(jù)

          作者: 時(shí)間:2016-12-02 來源:網(wǎng)絡(luò) 收藏
          與UART的復(fù)雜相比,用微控制器的單一輸入引腳來輸入多個(gè)信息比特更簡單,事實(shí)證明這很有用。這種方案允許掃描鍵盤、模式開關(guān)或任何變化較慢的數(shù)字?jǐn)?shù)據(jù)。參考文獻(xiàn)1詳細(xì)說明了一種用單一引腳輸出信號(hào)的方法。來自開關(guān)組S1的數(shù)據(jù)首先到達(dá)IC3,后者是NXPSemiconductors公司的74HC165并串轉(zhuǎn)換器(圖1)。把數(shù)據(jù)加載到移位寄存器中,這需要PL線路上的一個(gè)脈沖(引腳1)。線路CK在微控制器引腳線路上把一個(gè)長脈沖作為輸出發(fā)送出去,由此完成上述脈沖。R2和C2引入延時(shí),并且一旦脈沖超過該延時(shí),PL線路就變?yōu)榈碗娖剑瑪?shù)據(jù)被加載。



            PL信號(hào)上升后,微控制器的I/O端口上的較短脈沖在移位寄存器的時(shí)鐘輸入端CP(不是在PL輸入端)產(chǎn)生脈沖。這些時(shí)鐘脈沖的持續(xù)時(shí)間必須足夠長,應(yīng)超過延時(shí)R1C1,但不能超過R2C2。這些時(shí)鐘脈沖使數(shù)據(jù)移位,使得8比特在移位寄存器輸出端QQ順序出現(xiàn)。



            如果微控制器的數(shù)據(jù)方向短暫地改變,以便借助高阻抗輸入,那么上述移位寄存器數(shù)據(jù)會(huì)占支配地位,這是由于R1、R2、R3的相對(duì)值所致,R3值低得多。高阻抗?fàn)顟B(tài)存在的時(shí)間必須短于R1C1時(shí)間常數(shù)(圖2)。微控制器現(xiàn)在讀取單一數(shù)據(jù)比特。三個(gè)不同周期的作用產(chǎn)生了三種功能:加載、時(shí)鐘、數(shù)據(jù)讀取。微控制器改變端口方向、讀取引腳數(shù)據(jù)、把引腳方向重設(shè)為輸出所需的時(shí)間決定了時(shí)序。例如,1ms微控制器需要10ms。

            為避免假CP脈沖,該時(shí)間常數(shù)必須低于0.33R1C1,因此R1C1可以是30ms,而R2C2可以是200ms。這些設(shè)置允許在大約1ms內(nèi)完成一次8比特讀取。為實(shí)現(xiàn)更快操作,可把RC繼電器換成精密可再觸發(fā)單穩(wěn)多頻振蕩器(如NXP公司的74HC123)和邏輯門??捎酶嘁莆患拇嫫鲾U(kuò)充此方案,來讀取數(shù)十個(gè)信號(hào)。

            請(qǐng)注意:74HC165移位寄存器中的內(nèi)部邏輯阻止CP信號(hào)在LD處于有效狀態(tài)時(shí)使數(shù)據(jù)移位。電阻器R4確保LD和CP的正確順序。二極管D1和D2使每個(gè)電容迅速放電,來“復(fù)位”R1C1和R2C2的延時(shí)功能。


          評(píng)論


          技術(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); })();