本帖最后由 Poison丶Keil 于 2017-11-4 15:43 编辑
环境:我在使用原子的24C02示例程序时关于其中读地址和写地址 0XA0 和 0XA1的问题。
代码:
AT24CXX读取一个字节:
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)); <--------------------------@1@
IIC_Wait_Ack();
IIC_Send_Byte(ReadAddr%256); //发送低地址
IIC_Wait_Ack();
IIC_Start();
IIC_Send_Byte(0XA1); <--------------------------@2@
IIC_Wait_Ack();
temp=IIC_Read_Byte(0);
IIC_Stop();//产生一个停止条件
return temp;
}
问题:
我在学习时候发现原子视频里面讲了
读取的时候为0XA1 。而这里代码里的 :"见代码 @1@" 为0XA0. 而 "见代码 @2@" 是 0XA1.
IIC_Send_Byte(0XA0+((ReadAddr/256)<<1));
IIC_Send_Byte(0XA1);
这里不是很理解?
如果按EEPROM的读时序:
应该有两个addr 。我觉得两次的地址应该是一样的啊,也就是读的时候的地址:0XA1
为啥是第一个addr:0xA0 而第二个addr :0xA1?
如果不是希望解释下为什么???
先谢谢。+_=!
一周热门 更多>