一、芯片手册须知
1.AT24C02为2K,器件地址如图所示,读取R为高电平1,写入W为低电平0
2.写入时序
3.读取时序
二、读写代码
//=====AT24C02写入函数=====//
void Write_24C02(unsigned char dat, unsigned char value)
{
I2CStart();
I2CSendByte(0xa0); //根据时序图编写,器件地址为10100000即0xa0
I2CWaitAck();
I2CSendByte(dat); //写入的地址,如0x01 0x02
I2CWaitAck();
I2CSendByte(value); //写入的参数值
I2CWaitAck();
I2CStop();
}
//=====AT24C02读取函数=====//
unsigned char Read_24C02(unsigned char addr)
{
unsigned char temp;
I2CStart();
I2CSendByte(0xa0); //根据时序图
I2CWaitAck();
I2CSendByte(addr); //发送读取地址
I2CWaitAck();
I2CStart();
I2CSendByte(0xa1);
I2CWaitAck();
temp = I2CReceiveByte();
I2CSendAck(1);
I2CStop();
return temp;
}
//=====使用函数示例=====//
pos1_dat = Read_24C02(0x01); //读取
pos3_dat = Read_24C02(0x03);
Write_24C02(0x01,pos1_dat); //写入
DelaySMG(2000); //注意延时,等待太短字节不够时间写入
Write_24C02(0x03,pos3_dat);
DelaySMG(2000);
在我后续将AT24C02与PCF8591结合使用时,曾发生一个错误,PCF8591获取到的原始数据0-255转化为电压值显示到数码管,在存储电压值时,应该存储原始数据(字节类型),而不是直接把int型的电压值存到AT24C02,应要读取的时候再进行数据类型转换。
注:本笔记仅作个人学习使用。