按照IIC协议,起始信号和停止信号都应该在SCL为高电平的时候进行的,但是原子哥的例子程序中,停止信号却是在SCL信号由低到高中进行的。
请看截图和程序:
//产生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);
}
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);
按照这个逻辑,那最后的 SDA=0 这个位应该会被传出去