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

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > PIC單片機在接口設(shè)計中的應(yīng)用?

          PIC單片機在接口設(shè)計中的應(yīng)用?

          作者: 時間:2018-09-13 來源:網(wǎng)絡(luò) 收藏

          (Peripheral Interface Controller)是一種用來開發(fā)去控制外圍設(shè)備的集成電路(IC)?,F(xiàn)在應(yīng)用領(lǐng)域已經(jīng)相當廣泛,為了方便廣大工程師能夠很好的學習 ,電子發(fā)燒友網(wǎng)整理了PIC單片機的相關(guān)知識應(yīng)用,現(xiàn)在先帶您學習下PIC單片機在中的應(yīng)用吧。

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

          一、SPI串行EEPROM與PIC單片機的

          目前市場上有許多種單片機用在嵌入式控制系統(tǒng)設(shè)計中,這些嵌入式控制系統(tǒng)中的很大一部分都要用到非易失性存儲器。由于串行EEPROM 具有封裝尺寸小,存儲容量靈活,對I/O 引腳要求低,和低功耗低成本等特點,已成為非易失性存儲器的首選。


          二、觸摸傳感器QST108與PIC單片機的

          QST108是意法半導體公司針對人機界面的觸摸按鍵控制而推出的電容觸摸傳感器。

          其工作原理采用了美國昆騰公司的電荷轉(zhuǎn)移電容專利技術(shù)(QProx),支持8個獨立按鍵,且可選擇按鍵狀態(tài)檢測輸出或I2C總線控制2種正常工作方 式;同時,通過軟件命令可使其進入低功耗模式,當有按鍵按下時可被喚醒。QST108特有的相鄰按鍵抑制算法使得一個按鍵在按下未松開時,其他按鍵處于無 效狀態(tài);自校準和自動漂移補償功能使其無須人工校準,從而進一步降低了QST108的應(yīng)用難度。引腳配置如圖1所示,各引腳功能如表1所列。

          三、PIC單片機與串行閃存的SPI接口設(shè)計

          PIC單片機以性能穩(wěn)定、品種眾多等特點在工業(yè)控制、儀器儀表、家電、通信等領(lǐng)域得到廣泛應(yīng)用。雖然很多型號自身集成了存儲器,但在很多情況下難以滿 足系統(tǒng)對大容量存儲的要求,需要外擴非易失性的存儲器。與并行Flash存儲器相比,串行Flash存儲器占用MCU引腳少,體積小,易于擴展,接線簡 單,工作可靠,故而越來越多地應(yīng)用在各類電子產(chǎn)品和工業(yè)測控系統(tǒng)中。本文主要討論PIC16F877A單片機與串行閃存M25P16之間的SPI通信,在 要求大容量數(shù)據(jù)存儲且MCU引腳資源有限的情況下具有實用價值。

          1 SPI工作原理

          SPI(Serial Peripheral Interface)是一種常用的串行通信協(xié)議,用于MCU系統(tǒng)與外圍設(shè)備的通信,可用來連接存儲器、A/D轉(zhuǎn)換器、D/A轉(zhuǎn)換器、實時時鐘、LCD驅(qū)動 器、傳感器,甚至其他處理器。SPI主要使用4個信號:MOSI(主機輸出/從機輸人)、MISO(主機輸入/從機輸出)、SCK(串行時鐘)和CS(片 選)。其中,SCK由主機產(chǎn)生,作為傳輸?shù)耐綍r鐘,控制所有數(shù)據(jù)傳輸。主機通過觸發(fā)從設(shè)備的CS決定二者之間的SPI傳輸是否能夠進行。主機和外設(shè)都包 含1個串行移位寄存器。主機通過向自己的SPI串行寄存器寫入1個字節(jié)來發(fā)起1次傳輸,然后通過MOSI信號線將數(shù)據(jù)傳給外設(shè),同時外設(shè)將自己移位寄存器 中的內(nèi)容通過MISO信號線返回給主機,如圖1所示。這樣,兩個移位寄存器中的內(nèi)容就交換了。也就是說,外設(shè)的寫操作和讀操作是同步完成的。在實際應(yīng)用 中,如果只進行寫操作,則主機只需忽略收到的字節(jié)即可;如果主機要讀外設(shè)的數(shù)據(jù),必須發(fā)送1個字節(jié)來引發(fā)從機的傳輸,發(fā)送的這個字節(jié)可以是任意數(shù)據(jù)。

          四、數(shù)字電位器X9241與PIC單片機的接口及程序設(shè)計電路圖

          X9241概述

          X9241是XICOR公司生產(chǎn)的、把4個E2POT數(shù)字電位器集成在單片的CMOS集成電路上的一種數(shù)字電位器。它包含4個電阻陣列,每個陣列包含 63個電阻單元,在每個單元之間和2個端點之間都有被滑動單元訪問的抽頭點?;瑒訂卧陉嚵兄械奈恢糜捎脩敉ㄟ^2線串行總線接口控制。每個電阻陣列與1個 滑動端計數(shù)寄存器(WCR)和4個8位數(shù)據(jù)寄存器聯(lián)系在一起。這4個數(shù)據(jù)寄存器可由用戶直接寫入和讀出。WCR的內(nèi)容控制滑動端在電阻陣列中的位置,其功 能框圖如圖1所示。

          X9241與PIC16CXX單片機的接口及程序清單

          五、PIC單片機的IIC接口程序

          InitI2CBusMaster

          ;************************************************************

          TxmtStartBit

          bsf Bus_Busy ; on a start condition bus is busy

          bsf STATUS, RP0 ; Select page 1

          bsf _SDA ; set SDA high

          bsf _SCL ; cLOCk is high

          call Delay40uSec ; This is necessary for setup time

          bcf _SDA ; This gives a falling edge on SDA while clock is high

          call Delay47uSec ; Necessary for START HOLD time

          return

          ;************************************************************

          TxmtStopBit

          bsf STATUS, RP0 ; Select page 1

          bcf _SCL ; clock is low

          bcf _SDA ; set SDA low

          bsf _SCL ; clock is pulLED up

          call Delay40uSec ; Setup time for STOP condition

          bsf _SDA ; rising edge on SDA while CLOCK is high

          call Delay47uSec ; makes sure a START isn't sent immediately after a STOP

          bcf Bus_Busy ; The bus isn't busy anymore

          return

          ;************************************************************



          關(guān)鍵詞: PIC單片機 接口設(shè)計

          評論


          相關(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); })();