初级会员

- 积分
- 81
- 金钱
- 81
- 注册时间
- 2016-5-29
- 在线时间
- 19 小时
|
1金钱
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\r\n",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\r\n",errtime);
return 0;
}
|
最佳答案
查看完整内容[请看2#楼]
谢谢各位的指点,通过抓捕波形,已经彻底明白IC2的应答机制,首先在第9个时钟的上升沿之前,从机会拉低SDA,以确认接收到数据,然后在第9个时钟的下降沿,从设备会发送一个高脉冲,来确认已释放总线。
|