1、IIC停止信号产生,感觉与IIC时序不一致
代码如下:
void IIC_Stop(void)
{
SDA_OUT();//sda线输出
IIC_SCL=0;
IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
delay_us(4);
IIC_SCL=1;
IIC_SDA=1;//发送I2C总线结束信号
delay_us(4);
}
2、等待应答信号函数中,将SDA设置为输入,后更改SDA的脚状态,不能够理解。
//等待应答信号到来
//返回值:1,接收应答失败
// 0,接收应答成功
u8 IIC_Wait_Ack(void)
{
u8 ucErrTime=0;
SDA_IN(); //SDA设置为输入
IIC_SDA=1;delay_us(1);
IIC_SCL=1;delay_us(1);
while(READ_SDA)
{
ucErrTime++;
if(ucErrTime>250)
{
IIC_Stop();
return 1;
}
}
IIC_SCL=0;//时钟输出0
return 0;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
并没有遇见问题,只是感觉原子例程中模拟IIC 与标准IIC不一致,怎么还可以正常使用,有点儿想不通而已。之前看过一个帖子说。IIC对时序要求并不是很高,感觉这种说法很牵强,所以贴出来问下。
一周热门 更多>