在单片机中IIC中如果没有应答信号单片机如何处理

对了,在iic应答信号检测的过程,是不是先将两个脚置1(sda,scl),然后在一定时间里一直检测sda脚的电平状态,当sda为高时或者时间完了还没有检测到,到最后依旧为... 对了,在iic应答信号检测的过程,是不是先将两个脚置1(sda,scl),然后在一定时间里一直检测sda脚的电平状态,当sda为高时或者时间完了还没有检测到,到最后依旧为高,就说明没有应答?还有就是单片机是怎么运作的?
void respons() //应答
{
uchar i;
scl=1;
delay();
while((sda==1)&&(i<250))i++;
scl=0;
delay();
}
同时看看这个应答信号
展开
 我来答
百度网友8c5e32951
2011-09-29
知道答主
回答量:2
采纳率:0%
帮助的人:2.9万
展开全部
应答是接收设别自动产生的,不一定是从机。在IIC上除了开始,停止和重复开始外,所有数据都在在时钟的低电平变化的,也就是为高后,数据就应该稳定了。所以如果是模拟总线,应先有下降沿,再设为输入,然后读ACK,如果是从机的应答,是自动产生的,是作为数据通信正确的判断标志,为了可靠,是要判断的。主机的应答一般是程序控制的,如果要结束总线,可以给也可以不给应答;如果要继续读数据,就必须给出应答。
追问
void respons()  //应答
{
uchar i;
scl=1;
delay();
while((sda==1)&&(i<250))i++;
scl=0;
delay();
}
那请看看这个应答信号,谢谢了
追答
思路没有问题,但是C程序不规范。你的变量应该有个初值(时间可控),应该能返回不同的结果(不然谁知道是不是有应答呢)。
wooden954
2015-08-25 · TA获得超过1万个赞
知道大有可为答主
回答量:6135
采纳率:93%
帮助的人:804万
展开全部

IIC总线是每发送一个字节(8位)数据后,从动设备将主动将SDA引脚拉低,表示数据正常。

如果没有拉低,说明在发送过程中出现了总线时序错误,可能会导致意外情况,那么为了将这种意外降到最低,当没有应答信号时,应采取以下措施:

  1. 数据重新发送,以覆盖原来的错误

  2. 设置合理的超时时间,以在超时后允许系统重发。

  3. 对于重要数据,比如需要保存的系统参数,在无应答信号时,需要将数据读回进行校验,防止出现写错误。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
maige099
2011-09-25 · TA获得超过480个赞
知道答主
回答量:537
采纳率:0%
帮助的人:259万
展开全部
1.应答信号SDA是在SCL的上升沿变化为0的; 2.读操作的应答信号和写操作的应答信号都由从设备驱动。可参考“I2C总线协议规范”,网上搜一下即可。
追问
那你的意思是他们的应答信号是自己的硬件自动返回的吗?还是别的什么?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
428yyh
2011-09-25
知道答主
回答量:5
采纳率:0%
帮助的人:6.2万
展开全部
应答信号是从机自动产生的
追问
那我还写那个应答信号干什么用的?就是第九个时钟,我看他们的程序也没什么判定啊?为什么给我的感觉是要不要那个应答都没用!!!!!我感觉很蛋疼!擦
追答
一个好程序是很严谨的,iic如果不检查ack判断有无,就不知道数据是否写或读成功,从而影响可靠性,
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
爱芯工作室
2011-10-03 · 超过36用户采纳过TA的回答
知道小有建树答主
回答量:190
采纳率:0%
帮助的人:91.1万
展开全部
不处理它就可以了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式