IIC 代码wait_ack

2019-09-03 13:26发布

其他地方我都理解了,下面红 {MOD}字体的两个地方不理解。
用的是来自原子战舰板子的IIC代码
u8 IIC_Wait_Ack(void)
{
        u8 ucErrTime=0;
//        SDA_IN();      
        IIC_SDA=1;delay_us(1);          //IIC_SDA为什么要拉高?看不懂这里?
        IIC_SCL=1;delay_us(1);         
        while(READ_SDA)
        {
                ucErrTime++;
                if(ucErrTime>250)
                {
                        IIC_Stop();
                        return 1;
                }
        }
        IIC_SCL=0;
        return 0;  //这个return 返回的0 是给那个函数的用的?
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
操作系统
1楼-- · 2019-09-03 18:10
 精彩回答 2  元偷偷看……
gsndragon
2楼-- · 2019-09-03 23:36
主机释放了总线,从机才能给出应答信号,否则主机把SDA拉低如何检测应答?
dingdi
3楼-- · 2019-09-04 02:09
gsndragon 发表于 2017-3-23 10:28
主机释放了总线,从机才能给出应答信号,否则主机把SDA拉低如何检测应答?

//IIC_SDA=1;delay_us(1);
我把它屏蔽掉 如何。
dingdi
4楼-- · 2019-09-04 04:15
gsndragon 发表于 2017-3-23 10:28
主机释放了总线,从机才能给出应答信号,否则主机把SDA拉低如何检测应答?

在第九时钟,拉高SDA吗?
C语言是顺序执行的。
SDA=1;
SCL=1;
我感觉这个在第九个时钟,不符合逻辑啊。
第九个使用不是应该SCL=1,再SCL=0;吗!
dingdi
5楼-- · 2019-09-04 08:24
gsndragon 发表于 2017-3-23 10:28
主机释放了总线,从机才能给出应答信号,否则主机把SDA拉低如何检测应答?

我理解了。经过示波器测试,在主机释放总线的瞬间,slave 就已经把SDA给拉低了。非常快。

一周热门 更多>