24C04在2051系统中的使用

以电路1说明2051对24C04的读写操作的方法和使用中应注意的问题。电路1中由C1、R1组成上电复位电路,C2、C3和6M晶振组成振荡电路。24C04的1-3脚分别为器件编址端A0、A1、A2(用于与系统中的同类器件编码),4脚为电源地,5脚为I2C总线的数据线SDA,6脚为I2C总线的时钟SCL,7脚为测试输入端,在系统中接地,8脚为电源。

要正确的对24C04进行读写操作首先要了解这两个问题1、器件寻址方法 2、翻卷现象及处理方法。器件的寻址法:如表一所示,表中的A0、A1、A2的状态与器件的A0、A1、A2脚的状态一至时并且前四位也与器件代码一至时就可以访问该器件。(24C系列器件代码为1010),当表中的A0、A1、A2被Px代替时该器件的相应管脚应悬空。R/W位为读和写状态位,为0时写,为1时读。电路1中I2C器件采用的是24C04,由于24C04的容量为512字节,而访问24C04的地址位只有1字节即只能访问256字节,这时P0是作为器内寻址时的最高位使用。这样就可以访问24C04全部的512字节了。从附表中可以看出A0位已被P0使用,所以电路1中A0脚悬空。电路1中要对24C04进行读操作时寻址字节就由:器件代码(1010)+器件A1、A2脚的状态(00)+P0(状态与访问的单元有关大于256字节时为1否则为0)+R/W(读0/写1)组成。翻卷现象及处理方法:AT24C01/02/04/08/16系列的页写地址分别是4/8/16/16/16如表2所示

表2:

24C01 B7 B6 B5 B4 B3 B2 B1 B0 4字节

24C02 B7 B6 B5 B4 B3 B2 B1 B0 8字节

24C04 B7 B6 B5 B4 B3 B2 B1 B0 16字节

24C08 B7 B6 B5 B4 B3 B2 B1 B0 16字节

24C016 B7 B6 B5 B4 B3 B2 B1 B0 16字节

画了下画线的位为页写地址位,当页写地址位最高位出现进位时它的前一位并不加一,这种现象就是翻卷现象。例:器件为24C02 当向00000111B为起始地址单元写入两个连续数据时;第二位数据会写到00000000B中去而不是写到00001000B中,这种错误就是翻卷;当出现这种情况时应在软件上进行调整。在写入字节小于或等于页写数时可像RAM一样写入,在写完一页后应有5-15ms(根据采用器件而定)的延时后才能再操作器。

本着让读者在不了解I2C的工作原理的情况下能拿来就用的原则,在这里只讲进使用模拟软件的简单工作原理和使用方法。指定地址写N个字节:启动总线->发送器件寻址字节->回答->发送寻址地址->回答->发送第一个数据->回答->发送第二个数据->回答...........->发送第n-1个数据->回答->停止总线。数据寻址地址放在数据中的第一位字。节指定地址读N个字节:启动总线->发送器件寻址字节->回答->发送数据寻址地址->回答->停止总线+启动总线->读第一个数据->回答->读第二个数据->回答...........->读第n-1个数据->回答->停止总线。由于AT2051没有I2C接口所以采用的是软件模拟的方法,模拟软件占用资源F0,IV区工作寄存器R0、R1。软件中MTD为发送缓冲区首地址,MRD为接收缓冲区首地址,SLA:器件寻址字节存放单元,NUMBYT为传送节数存放单元,WRNBYT为发送N个数据子程序,RDNBYT为为接收N个数据子程序

读写实例:向附电路图中的24C04内的00H单元为首地址写入5个数据的程序如下:

MTD EQU 30H

MRD EQU 40H

SAL  EQU 50H

NUMBYT    EQU 51H

mov 30h,#31h;;;;;;;;置缓冲区首地址

mov 40h,#41h

mov NUMBYT,#06h;;;;置传送数据字节数6

mov 30h,#00h;;;;;;置寻址地址00H

mov SLA,#0a0h;;;;;置器件寻址位写

CALL WRNBYT;;;;; 调用写子程序

从附电路图中的24C04内的00H单元为首地址读入5个数据的程序如下:

;XCH1106@163.COM

MTD EQU 30H

MRD EQU 40H

SAL   EQU 50H

NUMBYT   EQU 51H

mov 30h,#31h;;;;;;;;置缓冲区首地址

mov 40h,#41h

mov NUMBYT,#01h;;;;置传送字节数1

mov 31h,#00h;;;;;;置寻址地址

mov SLA,#0a0h;;;;;置器件寻址位写

CALL WRNBYT ;;;;;调用写子程序

mov NUMBYT,#05h;;;;置传送字节5

mov SLA,#0a1h;;;;;;置器件寻址位读

CALL RDNBYT;;;;;;调用读N字节子程序

本程序只适用6M晶振,子程序已通过验证.

相关