欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 健康 > 美食 > 蓝桥杯之AT24C02的页写页读

蓝桥杯之AT24C02的页写页读

2025/7/22 10:26:28 来源:https://blog.csdn.net/jshdhhaj/article/details/146406548  浏览:    关键词:蓝桥杯之AT24C02的页写页读

一、原理:

1、页写:一次性向AT24C02里的多个数据存储单元地址写入多个数据

        (1)在AT24C02的页写模式下,每次写入数据后,存储单元地址会自动加1

        (2)一页有8个数据存储单元,蓝桥杯的AT24C02一共有256个数据存储单元,也就是说,蓝桥杯的AT24C02只有256 / 8 = 32个页。

        (3)如果一页写入了8个以上的数据,那么存储单元地址就会从头开始,比如从0x00开始页写,一直写到了0x07,这时如果继续页写,就会从0x00开始覆盖原来的内容。

        (4)在一次页写里面,无需任何的延时;但是在多次页写时,要有5ms的延时。以下是Deepseek的回复。

 2、页读:一次性向AT24C02里的多个数据存储单元地址读取多个数据(与上述页写原理类似,不做重复)

注意:在写入设备地址后,还需要写入开始页读的存储单元地址,下述原理图未标出。

二、代码:(只给出页写页读代码,其他代码未给出,请自己写)

注:写入之后不能立即读取,要延时10ms左右

1、页写代码

/*
函数:AT24C02页写函数
参数:*Data:要写入的数据数组的首地址,Address:页写的首地址(最好是8的倍数,比如0x00,0x08,0x10等等),num:Data数组的长度
功能:一次性往AT24C02里的多个数据存储地址写入多个字节数据
返回值:无
*/
void AT24C02_Page_Write(unsigned char *Data,Address,num)
{I2CStart();I2CSendByte(0xA0);I2CWaitAck();I2CSendByte(Address);I2CWaitAck();while(num--){I2CSendByte(*Data++);I2CWaitAck();}I2CStop();Delayms(5);  // 进行多次页写时,要加一个5ms延时,单次页写则不用加
}

2、页读代码

/*
函数:AT24C02页读函数
参数:*Data:要写入的数据数组的首地址,Address:页写的首地址(最好是8的倍数,比如0x00,0x08,0x10等等),num:Data数组的长度
功能:一次性往AT24C02里的多个数据存储地址读取多个字节数据
返回值:无
*/
void AT24C02_Page_Read(unsigned char *Data,Address,num)
{unsigned char Temp;I2CStart();I2CSendByte(0xA0);I2CWaitAck();I2CSendByte(Address);I2CWaitAck();I2CStart();I2CSendByte(0xA1);I2CWaitAck();while(num--){*Data++ = I2CReceiveByte();if(num != 0)  I2CSendAck(0);  // 没读完if(num == 0)  I2CSendAck(1);  // 读完了}I2CStop();
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词