新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)控制24C02串行E2PROM的讀寫

        51單片機(jī)控制24C02串行E2PROM的讀寫

        作者: 時(shí)間:2013-03-21 來源:網(wǎng)絡(luò) 收藏


        讀寫子程序如下:

        ;寫串行子程序EEPW
        ; R3=10100000(命令1010+器件3位地址+讀/寫。 器件地址一個(gè)芯片,是000)
        ; (R4)=片內(nèi)字節(jié)地址
        ; (R1)=欲寫數(shù)據(jù)存放地址指針
        ; (R7)=連續(xù)寫字節(jié)數(shù)n
        EEPW: MOV P1,#0FFH

          CLR  P1.0  ;發(fā)開始信號(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ù)寫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,

          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

        RER
        DELAY: NOP

          NOP
          RET
        ;讀串行子程序EEPR

        ;(R1)=欲讀數(shù)據(jù)存放地址指針
        ;; R3=10100001(命令1010+器件3位地址+讀/寫。 器件地址一個(gè)芯片,是000)

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

        ;(R7)=連續(xù)讀字節(jié)數(shù)
        EEPR: MOV P1,#0FFH
        CLR  P1.0  ;發(fā)開始信號(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ā)開始信號(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)
          RE
        SUBR: MOV  R0,#08H ;接受單字節(jié)子程序

        LOOP2: SETB  P1.1
          ACALL DELAY
          MOV C,P1.0

          RLC 
          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)定下來之后才能進(jìn)行讀寫(即SCL線發(fā)出正脈沖)。另外,在讀最后一數(shù)據(jù)字節(jié)時(shí),置應(yīng)答信號(hào)為“1”,表示讀操作即將完成。
        上拉電阻相關(guān)文章:上拉電阻原理

        上一頁 1 2 3 下一頁

        關(guān)鍵詞: 51單片機(jī) 24C02 E2PROM

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 故城县| 柘荣县| 华池县| 农安县| 长海县| 平武县| 阿合奇县| 丹巴县| 商洛市| 定州市| 出国| 大英县| 永春县| 漳浦县| 乾安县| 治多县| 砀山县| 白山市| 沅江市| 麦盖提县| 永福县| 灵寿县| 博罗县| 巴彦淖尔市| 航空| 海盐县| 廉江市| 榆树市| 新乡县| 高州市| 龙山县| 九寨沟县| 嘉荫县| 新田县| 慈溪市| 孙吴县| 天津市| 工布江达县| 壤塘县| 蒙城县| 滦南县|