機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
單片機(jī)模擬I2C總線實(shí)現(xiàn)串行E2PROM的讀寫(xiě)
單片機(jī)模擬I2C總線實(shí)現(xiàn)串行E2PROM的讀寫(xiě)
 更新時(shí)間:2009-10-24 15:29:19  點(diǎn)擊數(shù):0
【字體: 字體顏色
摘要:在單片機(jī)系統(tǒng)中廣泛使用E2PROM作為數(shù)據(jù)存儲(chǔ)器。本文簡(jiǎn)要介紹了I2C總線及AT24C系列串行E2PROM,給出了8031單片機(jī)與串行E2PROM通訊的硬軟件實(shí)現(xiàn)方法和實(shí)用的讀/寫(xiě)子程序。

  關(guān)鍵詞:?jiǎn)纹瑱C(jī);I2C總線; E2PROM 

1 I2C總線簡(jiǎn)介

  I2C總線是一種串行數(shù)據(jù)總線,只有二根信號(hào)線,一根是雙向的數(shù)據(jù)線SDA,另一根是時(shí)鐘線SCL。在
I2C總線上傳送的一個(gè)數(shù)據(jù)字節(jié)由八位組成?偩對(duì)每次傳送的字節(jié)數(shù)沒(méi)有限制,但每個(gè)字節(jié)后必須跟一位應(yīng)答位。數(shù)據(jù)傳送首先傳送最高位(MSB),數(shù)據(jù)傳送按圖1所示格式進(jìn)行。首先由主機(jī)發(fā)出啟動(dòng)信號(hào)“S”(SDA在SCL高電平期間由高電平跳變?yōu)榈碗娖?,然后由主機(jī)發(fā)送一個(gè)字節(jié)的數(shù)據(jù)。啟動(dòng)信號(hào)后的第一個(gè)字節(jié)數(shù)據(jù)具有特殊含義:高七位是從機(jī)的地址,第八位是傳送方向位,0表示主機(jī)發(fā)送數(shù)據(jù)(寫(xiě)),1表示主機(jī)接收數(shù)據(jù)(讀)。被尋址到的從機(jī)設(shè)備按傳送方向位設(shè)置為對(duì)應(yīng)工作方式。標(biāo)準(zhǔn)I2C總線的設(shè)備都有一個(gè)七位地址,所有連接在I2C總線上的設(shè)備都接收啟動(dòng)信號(hào)后的第一個(gè)字節(jié),并將接收到的地址與自己的地址進(jìn)行比較,如果地址相符則為主機(jī)要尋訪的從機(jī),應(yīng)在第九位答時(shí)鐘脈沖時(shí)向SDA線送出低電平作為應(yīng)答。除了第一字節(jié)是通用呼叫地址或十位從機(jī)地址之外(詳細(xì)內(nèi)容見(jiàn)[1]),第二字節(jié)開(kāi)始即數(shù)據(jù)字節(jié)。數(shù)據(jù)傳送完畢,由主機(jī)發(fā)出停止信號(hào)“P”(SDA在SCL高電平期間由低電平跳變?yōu)楦唠娖?。

  AT24C系列串行E2PROM具有I2C總線接口功能,功耗小,寬電源電壓(根據(jù)不同型號(hào)2.5V~6.0V),工作電流約為3mA,靜態(tài)電流隨電源電壓不同為30μA~110μA,存儲(chǔ)容量見(jiàn)表1。

  (1) AT24C系列 E2PROM接口及地址選擇

  由于I2C總線可掛接多個(gè)串行接口器件,在I2C總線中每個(gè)器件應(yīng)有唯一的器件地址,按I2C總線規(guī)則,器件地址為7位數(shù)據(jù)(即一個(gè)I2C總線系統(tǒng)中理論上可掛接128個(gè)不同地址的器件),它和1位數(shù)據(jù)方向位構(gòu)成一個(gè)器件尋址字節(jié),最低位D0為方向位(讀/寫(xiě))。器件尋址字節(jié)中的最高4位(D7~D4)為器件型號(hào)地址,不同的I2C總線接口器件的型號(hào)地址是廠家給定的,如AT24C系列E2PROM的型號(hào)地址皆為1010,器件地址中的低3位為引腳地址A2A1A0,對(duì)應(yīng)器件尋址字節(jié)中的D3、D2、D1位,在硬件設(shè)計(jì)時(shí)由連接的引腳電平給定。

  對(duì)于E2PROM的片內(nèi)地址,容量小于256字節(jié)的芯片(AT24C01/02),8位片內(nèi)尋址(A0~A7)即可滿足要求。然而對(duì)于容量大于256字節(jié)的芯片,則8位片內(nèi)尋址范圍不夠,如AT24C16,相應(yīng)的尋址位數(shù)應(yīng)為11位(211=2048)。若以256字節(jié)為1頁(yè),則多于8位的尋址視為頁(yè)面尋址。在AT24C系列中對(duì)頁(yè)面尋址位采取占用器件引腳地址(A2、A1、A0)的辦法,如AT24C16將A2、A1、A0作為頁(yè)地址。凡在系統(tǒng)中引腳地址用作頁(yè)地址后,該引腳在電路中不得使用,作懸空處理。AT24C系列串行E2PROM的器件地址尋址字節(jié)如表1所示,表中P0P1P2表示頁(yè)面尋址位。

  (2) AT24C系列 E2PROM讀寫(xiě)操作

  對(duì)AT24C系列 E2PROM的讀寫(xiě)操作完全遵守I2C總線的主收從發(fā)和主發(fā)從收的規(guī)則。

  連續(xù)寫(xiě)操作 連續(xù)寫(xiě)操作是對(duì)E2PROM連續(xù)裝載n個(gè)字節(jié)數(shù)據(jù)的寫(xiě)入操作,n隨型號(hào)不同而不同,一次可裝載字節(jié)數(shù)見(jiàn)表1。SDA線上連續(xù)寫(xiě)操作數(shù)據(jù)狀態(tài)如圖2。

器件地址(寫(xiě)) 片內(nèi)地址    ≤ n個(gè)字節(jié)數(shù)據(jù)

圖2  SDA線連續(xù)寫(xiě)操作數(shù)據(jù)狀態(tài)

  AT24C系列片內(nèi)地址在接收到每一個(gè)數(shù)據(jù)字節(jié)地址后自動(dòng)加1,故裝載一頁(yè)以?xún)?nèi)規(guī)定數(shù)據(jù)字節(jié)時(shí),只須輸入首地址,若裝載字節(jié)多于規(guī)定的最多字節(jié)數(shù),數(shù)據(jù)地址將“上卷”,前面的數(shù)據(jù)被覆蓋。

  連續(xù)讀操作 連續(xù)讀操作時(shí)為了指定首地址,需要兩個(gè)偽字節(jié)寫(xiě)來(lái)給定器件地址和片內(nèi)地址,重復(fù)一次啟動(dòng)信號(hào)和器件地址(讀),就可讀出該地址的數(shù)據(jù)。由于偽字節(jié)寫(xiě)中并未執(zhí)行寫(xiě)操作,地址沒(méi)有加1。以后每讀取一個(gè)字節(jié),地址自動(dòng)加1。
在讀操作中接收器接收到最后一個(gè)數(shù)據(jù)字節(jié)后不返回肯定應(yīng)答(保持SDA高電平)隨后發(fā)停止信號(hào)。連續(xù)讀操作SDA上數(shù)據(jù)狀態(tài)如圖3。

器件尋址(寫(xiě)) 片內(nèi)地址   器件尋址(讀)讀出數(shù)據(jù)

圖3 SDA線連續(xù)讀操作數(shù)據(jù)狀態(tài)

3 8031單片機(jī)與AT24C系列 E2PROM通訊的硬軟件實(shí)現(xiàn)

  (1)硬件電路

  圖4是用8031P1口模擬I2C總線與E2PROM連接電路圖(以AT24C16為例),由于AT24C16是漏極開(kāi)路,圖中R1、R2為上拉電阻(5.1k)。A0~A2地址引腳、TEST測(cè)試腳均懸空。

圖4 8031P1口與E2PROM連接電路圖

  (2)軟件實(shí)現(xiàn)

  由前述分析和圖4的硬件電路,我們編制了E2PROM的讀寫(xiě)子程序。兩者的主要區(qū)別在于讀子程序需發(fā)器件地址(寫(xiě))和片內(nèi)地址作為偽字節(jié),之后再發(fā)一次開(kāi)始信號(hào)和器件地址(讀命令)。

  讀寫(xiě)子程序如下:

;寫(xiě)串行E2PROM子程序EEPW

; (R3)=器件地址

; (R4)=片內(nèi)字節(jié)地址

; (R1)=欲寫(xiě)數(shù)據(jù)存放地址指針

; (R7)=連續(xù)寫(xiě)字節(jié)數(shù)n

EEPW: MOV P1,#0FFH

  CLR  P1.0  ;發(fā)開(kāi)始信號(hào)

  MOV  A,R3  ;送器件地址

  ACALL  SUBS

  MOV  A,R4  ;送片內(nèi)字節(jié)地址

  ACALL SUBS

AGAIN: MOV A,@R1

  ACALL SUBS ;調(diào)發(fā)送單字節(jié)子程序INC   R1

  DJNZ  R7,AGAIN;連續(xù)寫(xiě)n個(gè)字節(jié)

  CLR    P1.0  ;SDA置0, 準(zhǔn)備送停止信號(hào)

  ACALL DELAY ;延時(shí)以滿足傳輸速率要求

  SETB   P1.1  ;發(fā)停止信號(hào)

  ACALL DELAY

  SETB   P1.0

  RET

SUBS: MOV R0,#08H ;發(fā)送單字節(jié)子程序

LOOP: CLR P1.1

  RLC  A

  MOV  P1.0,C

  NOP

  SETB P1.1

  ACALL DELAY

  DJNZ R0,LOOP ;循環(huán)8次送8個(gè)bit

  CLR  P1.1

  ACALL DELAY

  SETB P1.1

REP: MOV C,P1.0

  JC  REP  ;判應(yīng)答到否,未到則等待

  CLR  P1.1

  RET

DELAY: NOP

  NOP

  RET

;讀串行E2PROM子程序EEPR

;(R1)=欲讀數(shù)據(jù)存放地址指針

;(R3)=器件地址

;(R4)=片內(nèi)字節(jié)地址

;(R7)=連續(xù)讀字節(jié)數(shù)

EEPR: MOV P1,#0FFH

  CLR  P1.0  ;發(fā)開(kāi)始信號(hào)

  MOV  A,R3  ;送器件地址

  ACALL SUBS   ;調(diào)發(fā)送單字節(jié)子程序

  MOV A,R4   ;送片內(nèi)字節(jié)地址

  ACALL SUBS

  MOV P1,#0FFH

  CLR P1.0   ;再發(fā)開(kāi)始信號(hào)

  MOV A,R3

  SETB ACC.0  ;發(fā)讀命令

  ACALL SUBS

MORE: ACALL SUBR

  MOV @R1,A

  INC R1

  DJNZ R7,MORE

  CLR P1.0

  ACALL DELAY

  SETB P1.1

  ACALL DELAY

  SETB P1.0 ;送停止信號(hào)

  RET

SUBR: MOV  R0,#08H ;接受單字節(jié)子程序

LOOP2: SETB  P1.1

  ACALL DELAY

  MOV C,P1.0

  RLC A

  CLR P1.1

  ACALL DELAY

  DJNZ R0,LOOP2

  CJNE R7,#01H,LOW

  SETB P1.0  ;若是最后一個(gè)字節(jié)置A=1

  AJMP SETOK

LOW: CLR P1.0  ;否則置A=0

SETOK: ACALL DELAY

  SETB  P1.1

  ACALL DELAY

  CLR  P1.1

  ACALL DELAY

  SETB P1.0  ;應(yīng)答畢,SDA置1

  RET

  程序中多處調(diào)用了DELAY子程序(僅兩條NOP指令),這是為了滿足I2C總線上數(shù)據(jù)傳送速率的要求,只有當(dāng)SDA數(shù)據(jù)線上的數(shù)據(jù)穩(wěn)定下來(lái)之后才能進(jìn)行讀寫(xiě)(即SCL線發(fā)出正脈沖)。另外,在讀最后一數(shù)據(jù)字節(jié)時(shí),置應(yīng)答信號(hào)為“1”,表示讀操作即將完成。

小結(jié)

  在測(cè)量?jī)x器中使用E2PROM保存數(shù)據(jù),這是儀器具有校準(zhǔn)、標(biāo)定功能的基本條件。8031單片機(jī)與串行E2PROM的結(jié)合滿足了這一要求,這種方法電路簡(jiǎn)單、編程方便。E2PROM讀寫(xiě)數(shù)據(jù)安全可靠保證了在測(cè)量過(guò)程中數(shù)據(jù)穩(wěn)定。我們?cè)谘兄茢?shù)種測(cè)量?jī)x器中均使用此法,效果很好。

  • 上一篇: AT93C46/56/55串行EEPROM及單片機(jī)程序
  • 下一篇: 沒(méi)有了
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1