原创
单片机读写AT24C02串行E2PROM的示例程序
发布: 2009-8-13 16:54 | 作者: 玲珑 | 查看: 0次
24C02中带有片内地址
寄存器。每写入或读出一个数据字节后,该地址寄存器自动加1,以
实现对下一个存储单元的读写。所有字节均以单一操作方式读取。为降低总的写入时间,一次操作可写入多达8个字节的数据。
电子园51单片机学习网 o&I1eX1EN;这是将0600H地址中以下的8个数据写到24C02的01H为首址单元中去的
汇编程序
#eG%b f:K43093:IKu_8GNy7eeZ43093ORG 0000H
a5gxr8jK-_43093电子园51单片机学习网k My t r'U1Z)GvDSCL BIT P3.4;定义24C02的串行
时钟线
电子园51单片机学习网 O#{I)Zq(rSDA BIT P3.5;定义24C02的串行数据线
g(e/rf)m}Q43093E wu$mj"pB$RI43093LJMP START
S8K;^[W,jNF43093START:LCALL STAR;调用
)g6{+d R'@+s43093MOV R2,#08H;一个数据有8位
%]%SY6{aL43093MOV DPTR,#0600H;定义源数据的位置
_ GyN8h;Zf43093LOOP:MOV A,#00H
电子园51单片机学习网-j#az@tYYI`MOVC A,@A+DPTR
电子园51单片机学习网(BZbC6m9n3U sLCALL SDATA
2W ^G+P6s |})m43093LCALL ACK
电子园51单片机学习网 Jt vig2|XJC LOOP
z{(@+c y*X,K43093INC DPTR
D*YehA:y%J*|43093DJNZ R2,LOOP
[?zn'm"y43093x]P7Ni43093LCALL STOP;调用停止子程序
电子园51单片机学习网 Xr1J_5p \!D电子园51单片机学习网-?)@%]&daJ ?STAR:SETB SDA
电子园51单片机学习网'G moGb8B+kgSETB SCL
2L L2F4c&|.N43093NOP
电子园51单片机学习网(Z!e X"[%wk+` q1iNOP
电子园51单片机学习网K1l|3vm p/{ pNOP
电子园51单片机学习网5@"C#[ H&`bMhNOP
电子园51单片机学习网 G_w%SRl4`CLR SDA
N6OkJB43093NOP
电子园51单片机学习网;Zd U:FS U3} b^:N }NOP
电子园51单片机学习网]sgE!T.}3G^ gNOP
q.y0\C;k43093NOP
aJ:{X@u P43093CLR SCL
VHt7~ f&C"r$s43093RET
UK8n6ao(L@0T-F43093SDATA:MOV R0,#08H
电子园51单片机学习网`Qx3} l^ K i mLOOP0:RLC A
|_ Sk^h+S7a'wpG43093MOV SDA,C
@7x My&z*}.A$\ D"]43093NOP
mJ-v1Sx(cta43093NOP
电子园51单片机学习网8Nz \m }^cSETB SCL
`'E"R"olo43093NOP
电子园51单片机学习网%z"E4] |oxHNOP
电子园51单片机学习网(~6x2U7mn4jR(e3dXGNOP
电子园51单片机学习网 l9Jk'FW9~u+l se8}NOP
电子园51单片机学习网i$cj+orCLR SCL
5L-v9K7a y*I1h43093DJNZ R0,LOOP0
电子园51单片机学习网Tz1W0dM)URET
Dn|1qMV8x43093ACK:SETB SDA
电子园51单片机学习网j7y)I6E d{hZNOP
.]t cAW!o!z43093NOP
电子园51单片机学习网I~hsK'hSETB SCL
UD7a1? ] ]]43093NOP
电子园51单片机学习网X K b!Nq:jNOP
电子园51单片机学习网)o P4IgUK)^-fiTNOP
电子园51单片机学习网H eI0E#[NOP
+mu!d$u)W9jIE43093MOV C,SDA
wN;j&D7X43093CLR SCL
电子园51单片机学习网9fMb J7lZy5Z wRET
T7\C*?D7K9R43093STOP:CLR SDA
电子园51单片机学习网 |c+a.mzPNOP
kZGt^:m0an g43093NOP
C'|1qgE43093NOP
电子园51单片机学习网zaU$^| ]6djNOP
电子园51单片机学习网5C!Kw%ARSETB SCL
电子园51单片机学习网!C3x4Y.Eo,J4gm `NOP
电子园51单片机学习网%NF3]V"Q y&Z,~(~NOP
电子园51单片机学习网 u5| yU3P6WNOP
电子园51单片机学习网'ws8n Qq M:s3MfyMNOP
电子园51单片机学习网/e)I"TV6^;DSETB SDA
电子园51单片机学习网I([!h3_ k [NOP
[4VBp/y'JgV1y43093NOP
电子园51单片机学习网M!?K C Z%l xNOP
电子园51单片机学习网P,sv#^6{n)c:DNOP
电子园51单片机学习网6z$b9rvX7|RET
qm1~-];]43093ORG 0600H
MmQSi4{1@x.w43093DB 0A0H,10H,01H,02H,03H,04H,05H,06H
电子园51单片机学习网sq|9[!PEND
电子园51单片机学习网 a|@J*k'~电子园51单片机学习网D*aC;l9A'cRUrK^ 读写子程序如下:
电子园51单片机学习网\n4f6h4D.P.l0U电子园51单片机学习网p7Jv4F~;写串行E2PROM子程序EEPW
电子园51单片机学习网 S[kn{ K%goV; R3=10100000(命令1010+器件3位地址+读/写。 器件地址一个芯片,是000)
RdoVn ]+V.I43093; (R4)=片内字节地址
Yiy {/de l7hY43093; (R1)=欲写数据存放地址指针
Ci~,`1k43093; (R7)=连续写字节数n
电子园51单片机学习网 M:c+HRmBEEPW: MOV P1,#0FFH
)A%CkWX43093电子园51单片机学习网$C-@^Nd CLR P1.0 ;发开始信号
]3N`p8B1I9qTh43093 MOV A,R3 ;送器件地址
/C$Eq"F;T oug9o43093 ACALL SUBS
y%rZ7U2I%P8JN43093 MOV A,R4 ;送片内字节地址
!k l8um&G|43093 ACALL SUBS
-\t)c:B(C3g,R43093AGAIN: MOV A,@R1
电子园51单片机学习网\(Xb&I!sg.j|{\~ ACALL SUBS ;调发送单字节子程序INC R1
电子园51单片机学习网AgG0v"Q&|,sBbT DJNZ R7,AGAIN;连续写n个字节
3m np+N)IL43093 CLR P1.0 ;SDA置0, 准备送停止信号
电子园51单片机学习网 m3t6LFi8I9n7Q| ACALL DELAY ;延时以满足传输速率要求
电子园51单片机学习网hR$\T[ SETB P1.1 ;发停止信号
电子园51单片机学习网JVVT0bB&WQ ACALL DELAY
l}f(E/K)@43093 SETB P1.0
电子园51单片机学习网P B `4gi:sMf5C/F RET
1uO%boD43093'{6rk?+A?43093SUBS: MOV R0,#08H ;发送单字节子程序
电子园51单片机学习网P&v1OV}2~C{1CLOOP: CLR P1.1
电子园51单片机学习网eGS@}D RLC A
$X/g5_xDk43093 MOV P1.0,C
8Y _%v3k)t df43093 NOP
L"U'f+VUP!_.[3@1K)e8F43093 SETB P1.1
%Eh'd1wOG(Fr43093 ACALL DELAY
电子园51单片机学习网 ~m Az2}4Ub DJNZ R0,LOOP ;循环8次送8个bit
电子园51单片机学习网+LNL^ TY CLR P1.1
*Y't2K2BB8B3y3Y3Q43093 ACALL DELAY
电子园51单片机学习网 Ios/a Hq0X SETB P1.1
电子园51单片机学习网I"a%Cr&vBnDREP: MOV C,P1.0
电子园51单片机学习网)`Sz;q @)qS C+?f JC REP ;判应答到否,未到则等待
电子园51单片机学习网\P#pk wN0U*h:l6S CLR P1.1
o7b(_tA\vKRV'C43093 RET
电子园51单片机学习网xd6@?*i | _E(A电子园51单片机学习网 ?y1V3fZ nEjDELAY: NOP
"C [pvr8`#X Wv*N43093 NOP
4sXW0D [u:Mok43093 RET
9z,ra*T$A8{ ~!Kqw43093zqyW7W6I$Nm43093电子园51单片机学习网'uc^+hX)H ^;读串行E2PROM子程序EEPR
电子园51单片机学习网pVW-}1T;(R1)=欲读数据存放地址指针
电子园51单片机学习网l2G B8}1N"NeRO;; R3=10100001(命令1010+器件3位地址+读/写。 器件地址一个芯片,是000)
"H/nq H4|u7er,f?!Kn+d43093;(R4)=片内字节地址
u~J ME43093;(R7)=连续读字节数
sSz|4D;c Hj43093电子园51单片机学习网-A-R9Q9QSA#Ja-cEEPR: MOV P1,#0FFH
}+{@,G{4p0g43093 CLR P1.0 ;发开始信号
电子园51单片机学习网8b!NFvGS MOV A,R3 ;送器件地址
电子园51单片机学习网-A%v$^Fv'TQ4`\ ACALL SUBS ;调发送单字节子程序
0u,HTI:Rnv43093 MOV A,R4 ;送片内字节地址
:D,^ \2A2Cx43093 ACALL SUBS
电子园51单片机学习网%h%zV6OK)Nc MOV P1,#0FFH
电子园51单片机学习网fba }!Y;p CLR P1.0 ;再发开始信号
JaFm"bC\43093 MOV A,R3
&D E$t"T#mFZ43093 SETB ACC.0 ;发读命令
'nLO a M6xA43093 ACALL SUBS
)q;F"lC ~v43093MORE: ACALL SUBR
电子园51单片机学习网2WB7Y9UU.yA0^"t h MOV @R1,A
2A!JFQ.uB43093 INC R1
9|V Q"?H&FclsN43093 DJNZ R7,MORE
电子园51单片机学习网 \.@S?r CLR P1.0
XI7Ji1b)gg43093 ACALL DELAY
'e P\.m`*^43093 SETB P1.1
*J/U!VyI["H0yi7U43093 ACALL DELAY
*Zf ~!{F$@*v43093 SETB P1.0 ;送停止信号
)P$W0H(|yl7Wg43093 RET
电子园51单片机学习网S.UjX"dll电子园51单片机学习网k u%{u6fo7K4RSUBR: MOV R0,#08H ;接受单字节子程序
*v@ej2j.A nH2P43093LOOP2: SETB P1.1
U/A.D} {:_3P+[ p43093 ACALL DELAY
2j+U?-[0E$pcE43093 MOV C,P1.0
2F"B~%Y!e43093 RLC A
电子园51单片机学习网l"uO C!a p+~X0t.Cu9m CLR P1.1
电子园51单片机学习网Y:eQ c$OTA ACALL DELAY
fBF*me;D[(sV43093 DJNZ R0,LOOP2
A7z^pr\ Dm,f43093 CJNE R7,#01H,LOW
电子园51单片机学习网T{k,\@ SETB P1.0 ;若是最后一个字节置A=1
电子园51单片机学习网7D&@Zs4G7t-B%qhRY AJMP SETOK
C[3G|4q#i'g43093LOW: CLR P1.0 ;否则置A=0
e%o8P{#Y:i#J43093SETOK: ACALL DELAY
电子园51单片机学习网jD9s9w{;S PA SETB P1.1
;Pxe8p7g|%y43093 ACALL DELAY
电子园51单片机学习网Wms)_4i?7a CLR P1.1
电子园51单片机学习网,?`D5kX3cX9m ACALL DELAY
i+is,`%V,F8h8n|"K43093 SETB P1.0 ;应答毕,SDA置1
"@g0o rr43093 RET
%oAC|]"m2h|2T2U43093电子园51单片机学习网;qqFYeb!Y `"@O 程序中多处调用了DELAY子程序(仅两条NOP指令),这是为了满足I2C总线上数据传送速率的要求,只有当SDA数据线上的数据稳定下来之后才能进行读写(即SCL线发出正脉冲)。另外,在读最后一数据字节时,置应答信号为“1”,表示读操作即将完成。
文章评论(0条评论)
登录后参与讨论