24C02中帶有片內地址寄存器。每寫入或讀出一個數據字節后,該地址寄存器自動加1,以實現對下一個存儲單元的讀寫。所有字節均以單一操作方式讀取。為降低總的寫入時間,一次操作可寫入多達8個字節的數據。
;這是將0600H地址中以下的8個數據寫到24C02的01H為首址單元中去的匯編程序
ORG 0000H
SCL BIT P3.4;定義24C02的串行時鐘線
SDA BIT P3.5;定義24C02的串行數據線
LJMP START
START:LCALL STAR;調用
MOV R2,#08H;一個數據有8位
MOV DPTR,#0600H;定義源數據的位置
LOOP:MOV A,#00H
MOVC A,@A+DPTR
LCALL SDATA
LCALL ACK
JC LOOP
INC DPTR
DJNZ R2,LOOP
LCALL STOP;調用停止子程序
STAR:SETB SDA
SETB SCL
NOP
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
CLR SCL
RET
SDATA:MOV R0,#08H
LOOP0:RLC A
MOV SDA,C
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
CLR SCL
DJNZ R0,LOOP0
RET
ACK:SETB SDA
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
MOV C,SDA
CLR SCL
RET
STOP:CLR SDA
NOP
NOP
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
SETB SDA
NOP
NOP
NOP
NOP
RET
ORG 0600H
DB 0A0H,10H,01H,02H,03H,04H,05H,06H
END
讀寫子程序如下:
;寫串行E2PROM子程序EEPW
; R3=10100000(命令1010+器件3位地址+讀/寫。 器件地址一個芯片,是000)
; (R4)=片內字節地址
; (R1)=欲寫數據存放地址指針
; (R7)=連續寫字節數n
EEPW: MOVP1,#0FFH
CLRP1.0;發開始信號
MOVA,R3;送器件地址
ACALL SUBS
MOVA,R4;送片內字節地址
ACALLSUBS
AGAIN: MOVA,@R1
ACALL SUBS;調發送單字節子程序INC R1
DJNZR7,AGAIN;連續寫n個字節
CLR P1.0;SDA置0, 準備送停止信號
ACALLDELAY ;延時以滿足傳輸速率要求
SETB P1.1 ;發停止信號
ACALLDELAY
SETB P1.0
RET
SUBS: MOVR0,#08H ;發送單字節子程序
LOOP: CLRP1.1
RLCA
MOVP1.0,C
NOP
SETBP1.1
ACALL DELAY
DJNZR0,LOOP ;循環8次送8個bit
CLRP1.1
ACALL DELAY
SETBP1.1
REP: MOVC,P1.0
JCREP;判應答到否,未到則等待
CLR P1.1
RET
DELAY: NOP
NOP
RET
;讀串行E2PROM子程序EEPR
;(R1)=欲讀數據存放地址指針
;; R3=10100001(命令1010+器件3位地址+讀/寫。 器件地址一個芯片,是000)
;(R4)=片內字節地址
;(R7)=連續讀字節數
EEPR: MOVP1,#0FFH
CLRP1.0;發開始信號
MOVA,R3;送器件地址
ACALL SUBS ;調發送單字節子程序
MOVA,R4;送片內字節地址
ACALL SUBS
MOVP1,#0FFH
CLRP1.0;再發開始信號
MOVA,R3
SETBACC.0;發讀命令
ACALL SUBS
MORE: ACALL SUBR
MOV@R1,A
INCR1
DJNZ R7,MORE
CLRP1.0
ACALL DELAY
SETB P1.1
ACALL DELAY
SETBP1.0 ;送停止信號
RET
SUBR: MOV R0,#08H ;接受單字節子程序
LOOP2: SETB P1.1
ACALL DELAY
MOVC,P1.0
RLCA
CLRP1.1
ACALL DELAY
DJNZ R0,LOOP2
CJNE R7,#01H,LOW
SETB P1.0;若是最后一個字節置A=1
AJMP SETOK
LOW: CLRP1.0;否則置A=0
SETOK: ACALL DELAY
SETB P1.1
ACALL DELAY
CLRP1.1
ACALL DELAY
SETBP1.0;應答畢,SDA置1
RET
程序中多處調用了DELAY子程序(僅兩條NOP指令),這是為了滿足I2C總線上數據傳送速率的要求,只有當SDA數據線上的數據穩定下來之后才能進行讀寫(即SCL線發出正脈沖)。另外,在讀最后一數據字節時,置應答信號為“1”,表示讀操作即將完成。
-
存儲芯片
+關注
關注
11文章
899瀏覽量
43189 -
AT24C02
+關注
關注
0文章
79瀏覽量
24304 -
E2PROM
+關注
關注
0文章
29瀏覽量
18621
發布評論請先 登錄
相關推薦
評論