下图为MCS-51单片机与24LC02接口电路。
图中A2、A1、A0为从器件的地址选择信号,WP=1禁止写入,WP=0允许写入。由于SCL与SDA为漏极开路,所以要接R1、R2上拉电阻及外电源。
1.单字节及页写入操作
往E2PROM片内的单个单元进行数据写入的操作称为单字节写操作。其操作格式如下表所示
表格符号含义如下。
S指开始条件:当SCL.保持为1时,SDA由1变为O;其时序如下左图所示。
P停止条件:当SCt一保持为1时,SDA由O变为1;其时序如下右图所示。
ACK0为从器件的应答信号:在12C总线数据传送中,当从器件(E2PROM)收到主器件传递来的一个字节后,从器件必须向SDA线上返送一个应答信号(ACK0)给主器件,即于第9个时钟周期SCI.一到来之前将SDA置低电平以确认它成功地接收到该字节,此时如果SDA=1,则表示接收失败。
如果接收失败必须重新握手。
下表中的字节地址是指从器件的地址,下表中的数据是指待写入的数据。
设单片机的晶振为6MHz,则T机=2us,定义P1.7BlTSDA,P1.6BlTSCI.现分别给出S、P、ACK0及往E2PROM写一字节子程序。
;开始条件子程序
START:CLRSDA
SETBSCL
SETBSDA
NOP
NOP
NOP
CLRSDA
NOP
NOP
CLRSCL
REP
;停止条件子程序
;应答信号子程序,出口:FO=1应答失败,FO=O应答成功
:往E2PROM写一宇节子程序,入口:A的内容为待发数据;注意:数据高位先送。
例:如何将立即数53H写到24LC02的7AH单元。其程序片断如下:
对E2PROM的数据写入也可以实现页写入。对E2PROM片内连续装载8个字节数据的写入操作,每收到一个数据以后,数据字地址的低3位自动加1。而高位是不改变的,以保持存储器页位置不变。
如果多于8个数据被送到E2PROM,则数据地址重复滚动,以前输入的数据将被覆盖。其操作格式如下表所示。
2.单字节及页读出操作
从E2PROM片内的单个单元进行数据读出的操作称为单字节读操作。其操作格式如下表所示。
页读出操作格式如下表所示。
单字节及页读出操作与单字节及页写入操作雷同。
应答信号(ACKl):当主器件(如单片机)读E2ROM片内数据时,应答信号由主器件产生,当SDA=0,表示ACKl;当SDA=1,表示/ACKl。即在主器件(如单片机)读E2PROM片内数据时。也要根据要求给从器件ACKl或/ACKl信号。其时序如下左图,下右图所示。几个子程序如下。
;单片机应答信号(ACKl)
:单片机非应答信号(/ACK/)(SDA=1)
:从E2PROM中读一字节,出口:A的内容为接收数据
RBYTE:SETBSDA;SDA作为输入口
NOP
NOP
MOVR7,#08H
RBYTEl:CLRSCL.
N0p
NOP
SETBSCL
NOP
NOP
MOVC,SDA
RLcA;注意,先读高位
DJNZR7.RBYTEI
CLRSCL
RET
例:如何将24LC02的5CH单元内容读到单片机内部了RAM的33H单元。其程序片断如下:
LOOP:ACALLSTART
MOVA.#0AOH
ACALLWBYTE
ACALLCHACK
JBF0,LOOP;成功接收?
MOVA,#5CH;待访问的单元
ACALLWBYTE
ACALLCHACK
JBFo,LOOP;成功接收?
ACALLSTART
MOVA.#0AtH
ACALI.WBYTE
ACALLCHACK
JBF0.L00P;成功接收?
ACALLRBYTE
MOV33H,A
ACALL.MNACK
ACALLSTOP
三、结论
由于l℃总线的时序较为复杂且容易出错,所以笔者对其协议作了较为深入的分析,同时也对各个子程序作了调试并在实践中成功应用。希望上述协议及时序的解析能为初学者在工程实践中提供借鉴作用。
上一篇:串行通讯接口电路