Bootstrap

51单片机读写EEPROM(AT24C02)

AT24C02引脚图
AT24C02引脚功能描述

AT24C02的存储容量为2K bit,内容分成32页,每页8Byte,共256Byte,操作时有两种寻址方式:芯片寻址和片内子地址寻址。
(1)芯片寻址:AT24C02的芯片地址为1010,其地址控制字格式为1010A2A1A0R/W。其中A2,A1,A0可编程地址选择位。A2,A1,A0引脚接高、低电平后得到确定的三位编码,与1010形成7位编码,即为该器件的地址码。R/W为芯片读写控制位,该位为0,表示芯片进行写操作。
(2)片内子地址寻址:芯片寻址可对内部256B中的任一个进行读/写操作,其寻址范围为00~FF,共256个寻址单位。

函数声明:

IIC开始函数:void IIC_Start(void);
向IIC发送数据:void IIC_SendByte(unsigned char address, unsigned char date);
从IIC接受数据:unsigned char IIC_RecByte(void);
IIC应答函数:void IIC_Ack(void);
IIC停止函数:void IIC_Stop(void);

向AT24C02写数据步骤:
第1步:发送开始信号,IIC启动;
第2步:发送器件地址,其中读写标志位为写;
第3步:IIC应答信号;
第4步:发送器件内部存储地址;
第5步:IIC应答信号;
第6步:向器件中写入数据;
第7步:IIC应答信号;
第8步:发送停止信号,IIC停止

代码如下:

void writeAT24C02(unsigned char address, unsigned char date)
{
    IIC_Start();
    IIC_SendByte(0xa0);
    IIC_Ack();
    IIC_SendByte(address);
    IIC_Ack();
    IIC_SendByte(date);
    IIC_Ack();
    IIC_Stop();
}

从AT24C02中读取数据步骤:
第1步:定义一个unsigned char类型的变量,以接受读出的数据;
第2步:发送开始信号,IIC启动;
第3步:发送器件地址,其中读写标志位为写;
第4步:IIC应答信号;
第5步:发送器件内部存储地址;
第6步:IIC应答信号;
第7步:发送开始信号,IIC再次启动;
第8步:发送器件地址,其中读写标志位为读;
第9步:IIC应答信号;
第10步:从器件读出数据;
第11步:发送停止信号,IIC停止;
第12步:返回所读取的数据;

代码如下:

unsigned char readAT24C02(unsigned char address)
{
    unsigned char date;
    IIC_Start();
    IIC_SendByte(0xa0);
    IIC_Ack();
    IIC_SendByte(address);
    IIC_Ack();
    IIC_Start();
    IIC_SendByte(0xa1);
    IIC_Ack();
    date = IIC_RecByte();
    IIC_Stop();
    return date;
}
;