用了战舰的例程读写24C04发现一个BUG

2019-07-21 01:41发布

            在文件24Cxx里面,会发现读写24C04上超过256的地址的时候出问题, 经过验证,是代码读指令有个bug,写是没有问题的。不知道是不是我发现的比较晚,还是有人发现了。

  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);//发送高地址
  IIC_Wait_Ack();  
 }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_Send_Byte(0XA1+((ReadAddr/256)<<1)); 
 IIC_Wait_Ack(); 
    temp=IIC_Read_Byte(0);    
    IIC_Stop();//产生一个停止条件    
 return temp;
}

   
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。