永发信息网

51单片机关于IIC的问题

答案:3  悬赏:60  手机版
解决时间 2021-11-17 04:49
51单片机关于IIC的问题
最佳答案
在主机发送应答信号后,把数据总线拉高,就是为了下一步检测从机的应答信号,这程序是连续的,既然前面的程序已经拉高了,准备检测从机的应答信号了,就不用再拉高一次啦,如果你愿意再拉一次也行啊。追问bit test() //检测从机应答信号
{
SCL=1; //把总线拉高 检测SDA的电平
delay();
if(SDA)
{
SCL=0;
_nop_();
stop();
return(0);
}
else
{
SCL=0;
_nop_();
return(1);

SCL=0;
_nop_();
SDA=1;
_nop_();
请问 加上上面这四条也可以 吗?

}
}追答是这四条吗:
SCL=0;
_nop_();
SDA=1;
_nop_();
加在这里,可就没有一点作用了,因为前面有一条return(1);这已经从子程序返回了,后面的就不会再执行了。你这不是马后炮吗?
全部回答
在检测从机应答时,主机释放SDA数据总线,间隔一定时间后从机拉低SDA一段时间作为从机的应答,同时主机一直在检测SDA总线是否被从机拉低,检测到时说明双方准备好了,开始通信。如果超过设定时间主机没有检测到从机的应答,则主机重复上一动作直至从机应答。
为什么主机发送应答信号完毕的时候要把SDA置1如下:
--置一后,才能正确输入对方送来的高低电平。

但是在检测从机应答的时候却不用把SDA置1呢如下:

--应该,在此之前,先置一了。追问对的,在检测从机应答之前 把SDA拉高了 为什么在这个函数之后 为什么不把SDA再次拉高呢?
bit test() //检测从机应答信号
{
SCL=1; //把总线拉高 检测SDA的电平
delay();
if(SDA)
{
SCL=0;
_nop_();
stop();
return(0);
}
else
{
SCL=0;
_nop_();
return(1);

}
}追答为什么在这个函数之后 为什么不把SDA再次拉高呢?

--这个函数,并没有对其拉低,所以,
--在这个函数之后,并不需要把SDA再次拉高。

--外部输入的低电平,并不算,不必讨论。追问之前有个 if(sda)如果SDA为低电平的话 就直接返回1不用管了吗?追答返回了,你还想管些什么事?

返回了,这次操作就完成了,你还纠结拉不拉高,有什么意义?
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
淄博古韵琴行在什么地方
如何获得比特币
万年湖云乡毛家幼儿园地址有知道的么?有点事
小红折了480只千纸鹤,小红给小兰40只后,两个
大连坤鼎建筑装饰装修工程有限公司怎么样?
完字能组什么词
为什么黄色的衣服夏天会有小虫子?
上司故意冷淡该怎么办
高压包电路图,场效应管是irfp260n,别用ne55
四川南充联通怎么退订5元流量包?
16岁有什么简单一点又懒散的工作吗?赚点零钱
《爱书如命的人》答案
坐火车从沈阳出发要到甘肃的兰州市要多长时间
华为mateg96615和v9哪个性价比好
1939年农历3月初六是什么星座
推荐资讯
寻找健身高手
好看的古代言情小说,女主性格淡然,文笔清新情
大闸蟹是属于河蟹还是湖蟹?
广州有种虫子好恶心,长条的,黑黄条纹相间,
为什么aj4鞋底那么硬?我觉得穿上不舒服呀,
全国电台收听率最高的有哪些电台?
( )x( )≈2000
在苏洲去无锡太湖一日游怎样报团
佳能尼康在风格上有什么不同
怎么认识简谱符号
手机里有thumbnail是什么原因
如何说一口庄重严肃的天津话?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?