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文章
794浏览量
42425 -
AT24C02
+关注
关注
0文章
79浏览量
24097 -
E2PROM
+关注
关注
0文章
29浏览量
18395
发布评论请先 登录
相关推荐
评论