I2C关于开始和结束是这么说的SCL线为高电平期间,SDA线由高电平向低电平的变化表示起始信号;SCL线为高电平期间,SDA线由低电平向高电平的变化表示终止信号。
我在编程的时候这么写
void start() //开始信号
{
scl=1;
delay();
sda=1;
delay();
sda=0;
delay();
}
void stop() //结束信号
{
scl=1;
delay();
sda=0;
delay();
sda=1;
delay();
}
这么写不能实现功能。而改成下面这样就可以了:
void start() //开始信号
{
sda=1;
delay();
scl=1;
delay();
sda=0;
delay();
}
void stop() //停止
{
sda=0;
delay();
scl=1;
delay();
sda=1;
delay();
}
感觉时序上是一样的啊,求助!
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
是跟着那个图来的,我试着延长了delay,还是不行。我在stop前面的respons后面加了句if(sda==1) P1=0xfe;结果就是sda=1,这样就向前面你说的那样stop中sda会发生两次跳变。可能这样真的不行。。。我也是个菜鸟,大家一起学习。。。
一周热门 更多>