IIC停止信号的一个疑问

2019-08-14 00:16发布

先上原子的例程代码
//产生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);           
}

然后IIC停止的时序信号是当SCL处于逻辑高的时候,SDA由低到高跳变,产生IIC停止信号。

那按照如下代码是否也是可以?
void IIC_Stop(void)
{
SDA_OUT();//sda线输出
IIC_SCL=1;
IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
  delay_us(4);
IIC_SDA=1;//发送I2C总线结束信号
delay_us(4);           
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
4条回答
Riven丶叮当
1楼-- · 2019-08-14 01:34
我自己分析过下面的代码、觉得有漏洞但是我觉得应该也是可以的、在停止位出现之前、假如SCL和SDA都处于逻辑高,这个时候SCL=1;SDA=0;delay(4us);相当于给了一个开始信号,但是后面紧接着SDA=1;delay(4us);有相当于给了一个停止信号。求高手指点
jiutianshenjian
2楼-- · 2019-08-14 05:43
IIC_SCL=1;//SCL=1期间,除了开始停止信号,SDA不允许跳变
IIC_SDA=0;//可能会产生新的起始信号
shuaigew88
3楼-- · 2019-08-14 07:59
(假如SCL和SDA都处于逻辑高,这个时候SCL=1;SDA=0;delay(4us);相当于给了一个开始信号) ,起始信号启动之后,SCL =1时SDA不允许变化。
JohnnyS
4楼-- · 2019-08-14 08:51
 精彩回答 2  元偷偷看……

一周热门 更多>