关于I2C的应答信号,钻牛角尖了,求高手解答

2019-10-16 03:25发布

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;
}

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