登录站点

用户名

密码

单片机读写AT24C02串行E2PROM的示例程序

已有 122 次阅读  2013-04-16 14:45   标签单片机  程序 
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)GvD
SCL BIT P3.4;定义24C02的串行时钟线 电子园51单片机学习网 O#{I)Zq(r
SDA BIT P3.5;定义24C02的串行数据线
g(e/rf)m}Q43093
E 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 s
LCALL SDATA
2W ^G+P6s |})m43093LCALL ACK电子园51单片机学习网 Jt vig2|X
JC LOOP
z{(@+c y*X,K43093INC DPTR
D*YehA:y%J*|43093DJNZ R2,LOOP
[?zn'm"y43093
x]P7Ni43093LCALL STOP;调用停止子程序电子园51单片机学习网 Xr1J_5p \!D
电子园51单片机学习网-?)@%]&daJ ?
STAR:SETB SDA电子园51单片机学习网'G moGb8B+kg
SETB SCL
2L L2F4c&|.N43093NOP电子园51单片机学习网(Z!e X"[%wk+` q1i
NOP电子园51单片机学习网K1l|3vm p/{ p
NOP电子园51单片机学习网5@"C#[ H&`bMh
NOP电子园51单片机学习网 G_w%SRl4`
CLR SDA
N6OkJB43093NOP电子园51单片机学习网;Zd U:FS U3} b^:N }
NOP电子园51单片机学习网]sgE!T.}3G^ g
NOP
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 m
LOOP0:RLC A
|_ Sk^h+S7a'wpG43093MOV SDA,C
@7x My&z*}.A$\ D"]43093NOP
mJ-v1Sx(cta43093NOP电子园51单片机学习网8Nz \m }^c
SETB SCL
`'E"R"olo43093NOP电子园51单片机学习网%z"E4] |oxH
NOP电子园51单片机学习网(~6x2U7mn4jR(e3dXG
NOP电子园51单片机学习网 l9Jk'FW9~u+l se8}
NOP电子园51单片机学习网i$cj+or
CLR SCL
5L-v9K7a y*I1h43093DJNZ R0,LOOP0电子园51单片机学习网Tz1W0dM)U
RET
Dn|1qMV8x43093ACK:SETB SDA电子园51单片机学习网j7y)I6E d{hZ
NOP
.]t cAW!o!z43093NOP电子园51单片机学习网I~hsK'h
SETB SCL
UD7a1? ] ]]43093NOP电子园51单片机学习网X K b!Nq:j
NOP电子园51单片机学习网)o P4IgUK)^-fiT
NOP电子园51单片机学习网H eI0E#[
NOP
+mu!d$u)W9jIE43093MOV C,SDA
wN;j&D7X43093CLR SCL电子园51单片机学习网9fMb J7lZy5Z w
RET
T7\C*?D7K9R43093STOP:CLR SDA电子园51单片机学习网 |c+a.mzP
NOP
kZGt^:m0an g43093NOP
C'|1qgE43093NOP电子园51单片机学习网zaU$^| ]6dj
NOP电子园51单片机学习网5C!Kw%AR
SETB SCL电子园51单片机学习网!C3x4Y.Eo,J4gm `
NOP电子园51单片机学习网%NF3]V"Q y&Z,~(~
NOP电子园51单片机学习网 u5| yU3P6W
NOP电子园51单片机学习网'ws8n Qq M:s3MfyM
NOP电子园51单片机学习网/e)I"TV6^;D
SETB SDA电子园51单片机学习网I([!h3_ k [
NOP
[4VBp/y'JgV1y43093NOP电子园51单片机学习网M!?K C Z%l x
NOP电子园51单片机学习网P,sv#^6{n)c:D
NOP电子园51单片机学习网6z$b9rvX7|
RET
qm1~-];]43093ORG 0600H
MmQSi4{1@x.w43093DB 0A0H,10H,01H,02H,03H,04H,05H,06H电子园51单片机学习网sq|9[!P
END电子园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+HRmB
EEPW: 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{1C
LOOP: 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&vBnD
REP: 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 nEj
DELAY: NOP
"C [pvr8`#X Wv*N43093  NOP
4sXW0D [u:Mok43093  RET
9z,ra*T$A8{ ~!Kqw43093
zqyW7W6I$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-c
EEPR: 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%{u6fo7K4R
SUBR: 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”,表示读操作即将完成。

上一篇: stm32应用例程 下一篇: MCS-51系列单片机控制手机收发短信息的原理

分享 举报