MCS-51单片机与二线制串行E2PROM的接口方法
扫描二维码
随时随地手机看文章
二线制串行E2PROM是一种非易失存储器,以其体积小、功耗低、操作灵活、性价比高、存储数据可靠等诸多优点,是单片机应用系统中非易失存储器的理想选择。但二线制串行E2PROM的操作采用I2C总线协议,而MCS-51系列单片机没有I2C接口,我们在研制“GLM-500测湿仪”时,利用MCS-51单片机的两条I/O线,通过软件产生I2C总线所要求的操作时序,可方便地实现MCS-51对二线制串行E2PROM的读写操作。
1 二线制串行E2PROM的引脚功能及基本操作时序
图1是二线制串行E2PROM 24C01/02/04/08/16的引脚排列图。
仅SCL和SDA端为基本的总线操作端;SCL是串行时钟输入端;SDA是串行数据输入/输出端;漏极开路输出需接上拉电阻到VDD;WP是写保护端,接高电平时,只能读出,禁止写入;A0、A1、A2是片选端,对于24C01/02/04/08/16,内部无连接,可接至VSS。
I2C总线协议运用主/从双向通讯。发送数据到总线上的器件定义为发送器,接收数据的器件定义为接收器。主器件和从器件都可工作于接收器和发送器状态,但总线必须由主器件(通常为微处理器)控制,主器件产生串行时钟(SCL),控制总线上数据传送的方向,并产生开始和停止信号。
总线从主器件产生开始条件后到产生停止条件期间有效,微处理器对串行E2PROM的读写操作在开始位控制下开始,在停止位控制下结束。
当SCL和SDA均为高电平时,定义为总线空闲状态,数据的传送必须在总线空闲时才能开始。当SCL为高电平时,SDA由高到低的变化为传送数据的开始位;而当SCL为高电平时,SDA由低到高的变化为停止位。在开始条件以后,SDA上数据的改变必须在SCL为低电平期间进行,在SCL为高电平期间, SDA必须保持稳定。每传送一位数据,主器件必须发出一个时钟脉冲。开始与停止条件如图2所示。
一次读操作读出的字节数由主器件决定,没有限制,多到一次可以读出整个存储器的内容;而对于写操作,一次最多可以写入一个页面的字节数,如果超过了节),则前面接收到的数据将被覆盖。
数据传送过程中,每接收一个数据,接收器必须产生一个低电平的确认信号,主器件必须产生一个与此确认位相应的时钟脉冲。
开始位以后,主器件需送出8位的控制字节,其格式请参考有关的文献。
2 接口方法
MCS-51系列单片机由于没有I2C总线接口,可利用两条I/O线P1.0和P1.1分别连至串行E2PROM的SCL和SDA端,通过软件产生E2PROM所要求的读写时序,MCS-51系列单片机与24C04的硬件连接如图3所示。
3 读写程序
MCS-51系列单片机对二线制串行E2PROM读写时,必须产生开始位,发送控制字节,控制数据传送,产生停止位。按照图3的连接,MCS-51系列单片机对24C04的读写程序如下:
①字节读子程序
入口条件:R0中存放块内写入单元的地址;R1中存放待写入的数据;R2中存放控制字节。
BYWR:SETBP1.0 ;产生开始位
CLRP1.1
CLRP1.0
MOV A,R2 ;发送控制字节
LCALLSBWR
SETBP1.1
SETBP1.0
NOP
JBP1.1,BYWR
;判有无确认信号,接收器没确认重新开始
CLRP1.0
MOV A,R0 ;发送块内写入字节地址
LCALLSBWR
SETBP1.1
SETBP1.0
JBP1.1,$ ;判确认信号
CLRP1.0
MOV A,R1 ;发送写入数据
LCALLSBWR
SETBP1.1
SETBP1.0
JBP1.1,$ ;判确认信号
CLRP1.0
CLRP1.1 ;产生停止位
SETBP1.0
SETBP1.1
CLRP1.0
RET
②字节写子程序
入口条件:R0中存放块内读出字节的地址;R2中存放控制字节,其最低位为0。
返回结果:读出的数据存于R1中。
BYRD:SETBP1.0 ;产生开始位
CLR P1.1
CLR P1.0
MOV A,R2 ;发送控制字节
LCALLSBWR
SETBP1.1
SETBP1.0
NOP
JBP1.1,BYRD
;判确认信号,接收器未确认重新开始
CLR P1.0
MOV A,R0 ;发送块内读出字节地址
LCALLSBWR
SETBP1.1
SETBP1.0
&nbs