AT24CXX 的读写函数,代码如下:
/****************************************************************
***************
* 函 数 名 : AT24CXX_ReadOneByte
* 函数功能 在 AT24CXX 指定地址读出一个数据
* 输 入 ReadAddr:开始读数的地址
*输 出 读到的数据*****************************************************************
**************/
u8 AT24CXX_ReadOneByte(u16 ReadAddr)
{
u8 temp=0;
IIC_Start();
if(EE_TYPE>AT24C16)
{
IIC_Send_Byte(0XA0); //发送写命令 IIC_Wait_Ack(); IIC_Send_Byte(ReadAddr>>8);//发送高地址
}
else {
IIC_Send_Byte(0XA0+((ReadAddr/256)<<1)); //发送器件地址 0XA0,写数据
}
此if 语句的作用就是可以兼容AT24C系列:02 04 08 16 32 64
其中2 4 8 16器件地址取决于硬件地址,在器件地址中它们的页地址位分别为:0位 1 位 2 位 3位
32和64它们的页地址并未占用器件地址位。
所以输入的读字节的地址对256取余,将高于第八位的数据取出,再左移1位,避开读写位。再与0X A0叠加!
对于32 和64 对于它们的字节地址直接取高位和低位即可。