菜鸟在学习IIC总线,学习ATC2402的时候对这个简单的函数就很迷惑,望高人指点,谢谢啦
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,写数据
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr%256); //发送低地址
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0XA1); //进入接收模式
IIC_Wait_Ack();
temp=IIC_Read_Byte(0);
IIC_Stop();//产生一个停止条件
return temp;
}
尤其不明白的是
if(EE_TYPE>AT24C16)
#define EE_TYPE AT24C02
为什么要比较判断呢?不是AT24C02
IIC_Send_Byte(ReadAddr>>8);//发送高地址
为什么要右移八位呢?
IIC_Send_Byte(0XA0+((ReadAddr/256)<<1)); //发送器件地址0XA0,写数据
这句最迷惑了,注释看不懂,哪里写数据了?
IIC_Send_Byte(ReadAddr%256); //发送低地址
地址是几位的啊?