1.从起始地址连续读出AT24C02中256个字节中的数据。采用的是Random read的时序读取的。
//连续读(Randem读的时序)
AT24C04_Start(); //起始信号
AT24C04_SendByte(AT24_Address); //发送设备地址+写信号
ack=check();
AT24C04_SendByte(0x00); //发送存储单元地址
ack=check();
AT24C04_Start(); //起始信号
AT24C04_SendByte(AT24_Address+1); //发送设备地址+读信号
ack=check();
for (i=0; i<256; i++)
{
temp1[i]= AT24C04_RecvByte(); //
自己创建的数组用来接收存储的数据
if (i == 255)
{
AT24C04_SendACK(1);//
最后一个数据需要回NAK
}
else
{
AT24C04_SendACK(0);//回应ACK
}
}
AT24C04_Stop(); //停止信号
2. 用Byte Write时序把0xa0写入到0x01的地址中
AT24C04_Start(); //起始信号
AT24C04_SendByte(AT24_Address); //发送设备地址+写信号
ack
=check();
AT24C04_SendByte(0x01); //发送存储单元地址0x01
ack=check();
AT24C04_SendByte(0x0a); //发送要写入的数据0x0a
ack=check();
AT24C04_Stop();
3.
用Page Write时序来写一页数据到
AT24C02中,切记存储单元地址一定要是8的倍数
AT24C04_Start(); //起始信号AT24C04_SendByte(AT24_Address); //发送设备地址+写信号ack=check();
AT24C04_SendByte(0x18);
//发送存储单元地址,0x18,换为10进制为24,也就是第4页的起始地址
ack=check();
for(i=0;i<8;i++)
{
AT24C04_SendByte(10);//写入一页,8个10
ack=check();
}AT24C04_Stop();
4.
用Current Address Read的时序来读,上次最后一个数据存在哪里,则从哪个地址的后一个地址开始读
AT24C04_Start();
AT24C04_SendByte(AT24_Address+1);
ack=check();
temp1[0]= AT24C04_RecvByte();
AT24C04_SendACK(1);//最后一个数据需要回NAK
5.用
Sequential Read
时序从当前地址连续读256个数,如果当前地址不是从0开始则读不够256个
AT24C04_Start();
AT24C04_SendByte(AT24_Address+1);
ack=check();
for (i=0; i<256; i++)
{
temp1[i]= AT24C04_RecvByte();
if (i == 255)
{
AT24C04_SendACK(1);//最后一个数据需要回NAK
}
else
{
AT24C04_SendACK(0);//回应ACK
}
AT24C04_Stop(); //停止信号
}
6.附start(),stop(),ack(),
check(),
AT24C04_SendByte(),
AT24C04_RecvByte()
代码
void AT24C04_Start(){SDA = 1; //拉高数据线SCL = 1; //拉高时钟线Delay5us(); //延时SDA = 0; //产生下降沿Delay5us(); //延时SCL = 0; //拉低时钟线}void AT24C04_Stop(){SDA = 0; //拉低数据线SCL = 1; //拉高时钟线Delay5us(); //延时SDA = 1; //产生上升沿Delay5us(); //延时}void AT24C04_SendACK(bit ack){SDA = ack; //写应答信号SCL = 1; //拉高时钟线Delay5us(); //延时SCL = 0; //拉低时钟线Delay5us(); //延时}unsigned char check(void){// SDA =1; //释放SDA线SCL=1; //拉高时钟线Delay5us();//延时CY = SDA;//读应答信号SCL=0; //拉低时钟线Delay5us(); //延时return CY;}void AT24C04_SendByte(unsigned char dat){unsigned char i;
for (i=0; i<8; i++) //8位计数器{dat <<= 1; //移出数据的最高位SDA = CY; //送数据口SCL = 1; //拉高时钟线Delay5us(); //延时SCL = 0; //拉低时钟线Delay5us(); //延时}}unsigned char AT24C04_RecvByte(){unsigned char i;unsigned char dat = 0;
SDA = 1; //使能内部上拉,准备读取数据for (i=0; i<8; i++) //8位计数器{dat <<= 1;SCL = 1; //拉高时钟线Delay5us(); //延时dat |= SDA; //读数据SCL = 0; //拉低时钟线Delay5us(); //延时}
return dat;}