IIC学习的简单问题3?

2019-08-17 01:50发布

   在研究原子哥的代码过程中总有好多疑问。
  我先把有疑问的原子例程部分代码粘贴一下。
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));
  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;

}
这段代码是IIC例程中读取EEPROM数据的函数,我根据我找到的资料对照例程一步一步分析,有些部分不太理解。我先把资料粘贴一下。
主器件通过发送一个起始信号启动发送过程,然后发送它所要寻址的从器件的地址,8位从器件地址的高4位固定为1010,接下来的3位A2A1A0为器件的地址位,用来定义哪个器件
以及器件的哪个部分被主器件访问,可单独被系统寻址从器件8位地址的最低位作为读写控制位,1表示对从器件进行读操作,0表示对从器件进行写操作。
在主器件发送起始信号和从器件地址字节后CAT24C02监视总线,并当其地址与发送的从地址相符时响应一个应答信号。CAT24C02再根据读写控制位R/W的状态进行读或写操作。

这是百度文库里找到的24C02的中文手册中的话,我总结一下就是:
1、主器件先发送一个起始信号给24C02
2、发送从器件地址
3、当24C02发现从期间地址和自己的地址相同时会产生一个应答信号
4、根据R/W控制位的状态进行读写操作。
下面是问题:
1、ReadAddr这个地址是什么地址,存储开始的地址吗?0XA0我知道是 1010 0000,那ReadAddr这个地址是用来填写A2A1A0这三个位的吗?这个地址为什么是u16?
2、为什么在代码中有两次起始信号IIC_Start();?在启动信号之后不会将EEPROM复位吗?我将第二个启动信号注释掉之后程序就不能正常运行了。很想知道第二个启动信号是什么作用。
3、我看到有很多人问问题时用的不是粘贴代码,而是可以用带颜 {MOD}的滚动代码我想知道是怎么做到的,这样以后问问题看的人更方便一点。








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