u8 I2C_Wait_ACK(void)
{
u16 errtime=1;
SDA_IN()
IIC_SDA=1;
IIC_SCL=1;
while(READ_SDA)
{
errtime++;
if(errtime>250)
{
I2C_Stop();
return 1;
}
}
IIC_SCL=0;
printf("errtime=%d
",errtime);
return 0;
}
上面这样写,一点问题都没有但是这样写,就不好使了
u8 I2C_Wait_ACK(void)
{
u16 errtime=1;
SDA_OUT()
IIC_SDA=1; 这里我先让SDA输出1,等到第9个上升沿的时候,24C02会把SDA拉低,然后把IO口变成SDA_IN() 转为接收方式,为什么时序就错了呢??想了好久好久也没想明白
IIC_SCL=1;
SDA_IN()
while(READ_SDA)
{
errtime++;
if(errtime>250)
{
I2C_Stop();
return 1;
}
}
IIC_SCL=0;
printf("errtime=%d
",errtime);
return 0;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
你所提到的SDA_IN() 和SDA_OUT()变化,在另一段有主从状态的程序中可以看到。
一周热门 更多>