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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 學習方法與實踐 > 從引腳有限的微處理器上壓榨出額外輸出引腳

          從引腳有限的微處理器上壓榨出額外輸出引腳

          作者:Armatron International Inc. Abel Raynus 時間:2008-01-30 來源:EDN 收藏

            現(xiàn)在許多設計采用來自Freescale和Microchip的低成本微控制器,但在過去十年中,產(chǎn)品封裝趨向于越來越小的引腳特征,如8個、甚至6個引腳。雖然這些封裝減少了PCB板面積,但它們也減少了可用I/O引腳,當需要添加功能而不移植到一個較大封裝時,給設計者設置了障礙。

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

            為了克服輸入引腳的稀少的問題,通過寫一個復用和選擇輸入引腳的程序,設計者可以增加小型微處理器輸入。但這種方法并不擴展輸出引腳,由于大部分設計需要同時驅(qū)動多個引腳。圖1顯示如何通過增加了移位寄存器來解決這個問題。

            圖1 你需要更多的輸出引腳嗎?

            比如,基于IC1(Freescale半導體的9-bit,flash存儲的MC68HC908QT1微處理器,它只有8個引腳)設計增加一個8-LED。產(chǎn)品僅有4個多用途輸出口,因而默認情況下驅(qū)動不了八個分離的LED。為了解決這個問題,你可以加入IC2, 74HC595串入串出/并出鎖存移位寄存器芯片,該芯片可從半導體供應商處得到。該寄存器的鎖存功能允許與特殊數(shù)據(jù)位相關的LED選擇性驅(qū)動。

            根據(jù)其數(shù)據(jù)手冊,74HC595芯片通過SPI協(xié)議接受信號。不幸的是 
          ,低端微控制器,如MC68HC908QT1,缺乏SPI協(xié)議的硬件支持,但你可以在軟件中通過以下步驟模擬SPI:

            1.通過不定義控制微處理器芯片IC1的PA4引腳不鎖存移位寄存器輸出。

            2.啟動MSB,從處理器的內(nèi)部數(shù)據(jù)寄存器復制1位,轉(zhuǎn)移到處理器的PA0(SD)的輸出上。

            3.在PA1引腳上產(chǎn)生一個時鐘脈沖。

            4.對所有的八個數(shù)據(jù)位重復步驟2和3。

            5.定義微處理器的PA4引腳輸出鎖存數(shù)據(jù)到IC2(74HC595)。

            圖2顯示了傳送數(shù)據(jù)$F0從IC1到IC2的時序圖。

            圖2 時序圖

            表1展示了通過發(fā)送5個連續(xù)字節(jié)給IC2點亮LED,LED值為:$03, $0c,$30,$c0和$55。前4個字節(jié)沿著柱狀圖每秒一步的逐漸點亮兩個LED。最后一個字節(jié)點亮并鎖存所有奇數(shù)LED。表格僅包含了常用的指令,容易轉(zhuǎn)化為其他微處理器的匯編語言。

            SPI僅需要三個輸出引腳,空出了微處理器剩余I/O引腳可以滿足其它功能,也允許遠程設置移位寄存器/LED驅(qū)動――比如,帶LED的單獨顯示板。有適當?shù)木彌_時,寄存器輸出引腳也能驅(qū)動其他負載,如電機、繼電器和白熾燈等。



          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁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); })();