关于:“只有在时钟线上低电平期间,数据线上电平状态才允许变化”的疑问

2019-07-20 23:20发布

请教各位大佬一个问题,近期在学习I2C通信这一块的时候学到了  “只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。 ”
但是在范例中,等待应答信号到来这个程序,SDA设置为上拉输入,SCL置为高电平,那么此时SCL都被拉高电平了,SDA线上的信号不就不允许发生变化了么?那还怎么检测SDA的电平变化?

还是说 “只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化 ”这句话只是针对SDA作为输出时才有效?

  1. //等待应答信号到来
  2. //返回值:1,接收应答失败
  3. //        0,接收应答成功
  4. u8 IIC_Wait_Ack(void)
  5. {
  6.         u8 ucErrTime=0;
  7.         SDA_IN();      //SDA设置为输入  
  8.         IIC_SDA=1;delay_us(1);         //设置为上拉输入  
  9.         IIC_SCL=1;delay_us(1);         
  10.         while(READ_SDA)
  11.         {
  12.                 ucErrTime++;
  13.                 if(ucErrTime>250)
  14.                 {
  15.                         IIC_Stop();
  16.                         return 1;
  17.                 }
  18.         }
  19.         IIC_SCL=0;//时钟输出0           
  20.         return 0;  
  21. }
复制代码

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