请教各位大佬一个问题,近期在学习I2C通信这一块的时候学到了
“只有在时钟线上的信号为低电平期间,数据线上的高电平或低电平状态才允许变化。 ”
但是在范例中,等待应答信号到来这个程序,SDA设置为上拉输入,SCL置为高电平,那么此时SCL都被拉高电平了,SDA线上的信号不就不允许发生变化了么?那还怎么检测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;
- }
复制代码
好的,感谢推荐,问题已解决。附件供有需要的朋友参考
一周热门 更多>