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

          新聞中心

          EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > MCS-51單片機(jī)與二線制串行E2PROM的接口方法

          MCS-51單片機(jī)與二線制串行E2PROM的接口方法

          作者: 時(shí)間:2012-02-07 來(lái)源:網(wǎng)絡(luò) 收藏

          是一種非易失存儲(chǔ)器,以其體積小、功耗低、操作靈活、性價(jià)比高、存儲(chǔ)數(shù)據(jù)可靠等諸多優(yōu)點(diǎn),是應(yīng)用系統(tǒng)中非易失存儲(chǔ)器的理想選擇。但的操作采用I2C總線協(xié)議,而-51系列沒(méi)有I2C,我們?cè)谘兄?ldquo;GLM-500測(cè)濕儀”時(shí),利用-51的兩條I/O線,通過(guò)軟件產(chǎn)生I2C總線所要求的操作時(shí)序,可方便地實(shí)現(xiàn)-51對(duì)的讀寫(xiě)操作。

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

          1 二線制串行E2PROM的引腳功能及基本操作時(shí)序

          圖1是二線制串行E2PROM 24C01/02/04/08/16的引腳排列圖。

          僅SCL和SDA端為基本的總線操作端;SCL是串行時(shí)鐘輸入端;SDA是串行數(shù)據(jù)輸入/輸出端;漏極開(kāi)路輸出需接上拉電阻到VDD;WP是寫(xiě)保護(hù)端,接高電平時(shí),只能讀出,禁止寫(xiě)入;A0、A1、A2是片選端,對(duì)于24C01/02/04/08/16,內(nèi)部無(wú)連接,可接至VSS。

          21.jpg


          I2C總線協(xié)議運(yùn)用主/從雙向通訊。發(fā)送數(shù)據(jù)到總線上的器件定義為發(fā)送器,接收數(shù)據(jù)的器件定義為接收器。主器件和從器件都可工作于接收器和發(fā)送器狀態(tài),但總線必須由主器件(通常為微處理器)控制,主器件產(chǎn)生串行時(shí)鐘(SCL),控制總線上數(shù)據(jù)傳送的方向,并產(chǎn)生開(kāi)始和停止信號(hào)。

          總線從主器件產(chǎn)生開(kāi)始條件后到產(chǎn)生停止條件期間有效,微處理器對(duì)串行E2PROM的讀寫(xiě)操作在開(kāi)始位控制下開(kāi)始,在停止位控制下結(jié)束。

          當(dāng)SCL和SDA均為高電平時(shí),定義為總線空閑狀態(tài),數(shù)據(jù)的傳送必須在總線空閑時(shí)才能開(kāi)始。當(dāng)SCL為高電平時(shí),SDA由高到低的變化為傳送數(shù)據(jù)的開(kāi)始位;而當(dāng)SCL為高電平時(shí),SDA由低到高的變化為停止位。在開(kāi)始條件以后,SDA上數(shù)據(jù)的改變必須在SCL為低電平期間進(jìn)行,在SCL為高電平期間, SDA必須保持穩(wěn)定。每傳送一位數(shù)據(jù),主器件必須發(fā)出一個(gè)時(shí)鐘脈沖。開(kāi)始與停止條件如圖2所示。

          22.jpg
          一次讀操作讀出的字節(jié)數(shù)由主器件決定,沒(méi)有限制,多到一次可以讀出整個(gè)存儲(chǔ)器的內(nèi)容;而對(duì)于寫(xiě)操作,一次最多可以寫(xiě)入一個(gè)頁(yè)面的字節(jié)數(shù),如果超過(guò)了節(jié)),則前面接收到的數(shù)據(jù)將被覆蓋。

          數(shù)據(jù)傳送過(guò)程中,每接收一個(gè)數(shù)據(jù),接收器必須產(chǎn)生一個(gè)低電平的確認(rèn)信號(hào),主器件必須產(chǎn)生一個(gè)與此確認(rèn)位相應(yīng)的時(shí)鐘脈沖。

          開(kāi)始位以后,主器件需送出8位的控制字節(jié),其格式請(qǐng)參考有關(guān)的文獻(xiàn)。

          2 

          MCS-51系列單片機(jī)由于沒(méi)有I2C總線,可利用兩條I/O線P1.0和P1.1分別連至串行E2PROM的SCL和SDA端,通過(guò)軟件產(chǎn)生E2PROM所要求的讀寫(xiě)時(shí)序,MCS-51系列單片機(jī)與24C04的硬件連接如圖3所示。

          3 讀寫(xiě)程序

          MCS-51系列單片機(jī)對(duì)二線制串行E2PROM讀寫(xiě)時(shí),必須產(chǎn)生開(kāi)始位,發(fā)送控制字節(jié),控制數(shù)據(jù)傳送,產(chǎn)生停止位。按照?qǐng)D3的連接,MCS-51系列單片機(jī)對(duì)24C04的讀寫(xiě)程序如下:

          ①字節(jié)讀子程序

          入口條件:R0中存放塊內(nèi)寫(xiě)入單元的地址;R1中存放待寫(xiě)入的數(shù)據(jù);R2中存放控制字節(jié)。
          BYWR:SETBP1.0  ;產(chǎn)生開(kāi)始位
          CLRP1.1
          CLRP1.0
          MOV A,R2  ;發(fā)送控制字節(jié)
          LCALLSBWR
          SETBP1.1
          SETBP1.0
          NOP
          JBP1.1,BYWR
           ;判有無(wú)確認(rèn)信號(hào),接收器沒(méi)確認(rèn)重新開(kāi)始
          CLRP1.0
          MOV A,R0 ??;發(fā)送塊內(nèi)寫(xiě)入字節(jié)地址
          LCALLSBWR
          SETBP1.1
          SETBP1.0
          JBP1.1,$ ??;判確認(rèn)信號(hào)
          CLRP1.0
          MOV A,R1 ??;發(fā)送寫(xiě)入數(shù)據(jù)
          LCALLSBWR
          SETBP1.1
          SETBP1.0
          JBP1.1,$ ??;判確認(rèn)信號(hào)
          CLRP1.0
          CLRP1.1 ?。划a(chǎn)生停止位
          SETBP1.0
          SETBP1.1
          CLRP1.0
             RET

          ②字節(jié)寫(xiě)子程序

          入口條件:R0中存放塊內(nèi)讀出字節(jié)的地址;R2中存放控制字節(jié),其最低位為0。

          返回結(jié)果:讀出的數(shù)據(jù)存于R1中。
          BYRD:SETBP1.0 ?。划a(chǎn)生開(kāi)始位
          CLR P1.1
          CLR P1.0
          MOV A,R2 ?。话l(fā)送控制字節(jié)
          LCALLSBWR
          SETBP1.1
          SETBP1.0
          NOP
          JBP1.1,BYRD
           ??;判確認(rèn)信號(hào),接收器未確認(rèn)重新開(kāi)始
          CLR P1.0
          MOV A,R0 ?。话l(fā)送塊內(nèi)讀出字節(jié)地址
          LCALLSBWR
          SETBP1.1
          SETBP1.0
          nbs

          51單片機(jī)相關(guān)文章:51單片機(jī)教程




          評(píng)論


          相關(guān)推薦

          技術(shù)專(zhuān)區(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); })();