
AT24C04简介AT24C04是ATMEL公司生产的4k bit(512字节)E2PROM芯片。该芯片由I2C总线设计,主要性能指标与AT24C02相似,区别如下:
容量是AT24C02的两倍,分为两个存储空间,每个256字节。
有两个器件地址选择引脚,一条I2C总线最多可以连接四个AT24C04器件。
32页,每页16字节,一次可连续写入16字节数据。
当WP引脚为高电平时,AT24C04地址空间0~255的数据被写保护。
数据寻址需要9位地址。
AT24C04的引脚定义
AT24C04引脚功能
A0是空引脚,端口A1和A2是设备地址设置端口。AT24C04的设备地址通过端口A1和A2设置。
WP口接低电平时,可以读写整个AT24C04器件的512字节。WP口接高电平时,设备前256个地址的数据被保护,只能读不能写,后256个字节的数据可以读写。
AT24C04从机的器件地址由两个引脚决定,即A1和A2引脚。
AT24C04的数据空间由位P0决定,如图24-2所示。当P0为“0”时,将运算AT24C04的空间0~255中的数据。当P0为“1”时,将运算AT24C04的空间256~511中的数据。
AT24C04的读写操作和AT24C02的读写操作完全一样。不同的是AT24C04分为两个数据区,用P0位区分。当P0=0时,操作0~255个地址单元的数据。当P0=1时,操作地址单元256~511的数据。
AT24C04的dip开关设置只有2位数字(A1、A2),在例行程序中要按图24-3设置。
AT24C04读写演示程序
#p#
AT24C04应用电路#e#
AT24C04应用电路实现AT89C51以单字节读写AT24C04。AT24C04是ATMEL公司的CMOS结构的4096位(512字节 8位)串行EEPROM,16字节页写。与STC89C51单片机的接口如下图4-2-9所示。图中,AT24C04的地址为0,SDA为开漏输出,连接到STC89C51的P17引脚。上拉电阻的选择请参考AT24C04的数据手册,SCL是时钟端口,接STC89C51的P11脚。下面是通过I2C接口对AT24C04进行单字节读写的一个例程。
下面是一个用C语言编写的程序,模拟I2C总线的数据传输和读取。I2C芯片是AT24C04。单片机一个字节读写AT24C04。
/*********************************************************************/
//程序说明:软件模拟I2C芯片AT24C04的单字节读写程序,地址为0。
//功能是将数据0xc0存储在地址5中。
//然后通过P0口读出并驱动LED显示。
/*********************************************************************/
#包括《reg51.h》
#包括《intrins.h》
#定义uchar无符号字符
#定义nop _nop_()
sbit sda=p1^7;//SDA接单片机P17脚。
sbit scl=p1^1;//SCL接单片机的P11脚。
//定义ACC的位,这是最快的运算。
sbit a0=acc^0;
sbit a1=acc^1;
sbit a2=acc^2;
sbit a3=acc^3;
sbit a4=acc^4;
sbit a5=acc^5;
sbit a6=acc^6;
sbit a7=acc^7;
//启动功能
无效开始()
{
sda=1;
nop
SCL=1;
nop
sda=0;
nop
SCL=0;
nop
}
//停止功能
无效停止()
{
sda=0;
nop
SCL=1;
nop
sda=1;
nop
}
//响应函数
无效确认()
{
乌恰尔一世;
SCL=1;
nop
而((sda==1)(I《250》)I;
SCL=0;
nop
}
//编写一个字节函数
void write_byte(uchar dd)
{
ACC=dd
sda=a7SCL=1;SCL=0;
sda=a6SCL=1;SCL=0;
sda=a5SCL=1;SCL=0;
sda=a4SCL=1;SCL=0;
sda=a3SCL=1;SCL=0;
sda=a2SCL=1;SCL=0;
sda=a1SCL=1;SCL=0;
sda=a0SCL=1;SCL=0;
sda=1;
}
//读取一个字节函数
uchar read_byte()
{
sda=1;
SCL=1;a7=sdaSCL=0;
SCL=1;a6=sdaSCL=0;
SCL=1;a5=sdaSCL=0;
SCL=1;a4=sdaSCL=0;
SCL=1;a3=sdaSCL=0;
SCL=1;a2=sdaSCL=0;
SCL=1;a1=sdaSCL=0;
SCL=1;a0=sdaSCL=0;
sda=1;
返回(ACC);
}
//写地址和数据功能
void write_add(uchar地址,uchar日期)
{
start();
write _ byte(0xa 0);//写2404地址命令
ack();
写字节(地址);//写地址
ack();
写字节(日期);//写数据
ack();
stop();
}
//读地址、数据函数
uchar read_add(uchar地址)
{
乌恰尔温度;
start();
write _ byte(0xa 0);
ack();
写字节(地址);
ack();
start();
write _ byte(0xa 1);
ack();
temp=read_byte()。
stop();
返回(临时);
}
无效延迟(乌恰尔一世)
{
uchar a,b;
for(a=0;一个我;我)
for(b=0;b《100;b);
}
空的初始化()
{
sda=1;
not otherwise provided 除非另有规定
SCL=1;
not otherwise provided 除非另有规定
}
void main()
{
init();//初始化函数
write_add(5,0xc 0);//往地址5中写入0xc0
延迟(100);
P0=read _ add(5);//读地址5中的数据,并送p0蛋白蛋白口驱动发光二极管显示
while(1);//无限循环
}
程序下载硬件实验板上,运行结果如下图4-2-12所示。










