STM32
直播中

贾彩娟

7年用户 172经验值
私信 关注
[问答]

学习ATC2402的疑问如何解决

菜鸟在学习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);   //发送低地址
地址是几位的啊?

回帖(2)

李桂芝

2020-6-10 12:22:37
很简单,你把24C02和24C16以上的手册,看一遍,你就知道了.
硬件上的东西,软件去配合,没什么奇怪不奇怪的.
光看代码在那里拍脑袋,拍死你也是错的.
举报

魏贝贝

2020-6-10 12:36:30
我也同问啊。。。。。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分