打印

关于I2C应答程序的问题

[复制链接]
3436|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
doliphin|  楼主 | 2011-2-8 10:08 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这是一个I2C程序中的应答检测部分,标注红色的那一行程序不懂,如果是因为数据传递错误而没有收到应答位还能认为是应经收到了吗?

void respons()        //应答;
{
uchar i=0;
scl=1;          //在SCL为高时,SDA被拉低;
delay();
while((sda==1)&&(i<255))i++;   //判别是否收到从机的应答,若一会收不到则自动认为已经收到了
scl=0;
delay();         //这些判别都是在一个时钟信号里的;
// sda=0;
}

相关帖子

沙发
yangyicheng| | 2011-2-11 14:03 | 只看该作者
此处为读ACK信号,也就是SDA=0时,为检测到返回信号。一般情况,通讯正常在<10us就会有返回信号,此处增加一个溢出判断功能,也就是i==255时,还没有检测到返回信号,程序也要退出通讯,防止没有ACK信号的时候出现死循环!

使用特权

评论回复
板凳
ayb_ice| | 2011-2-12 08:32 | 只看该作者
主要是为了防止死机,并没有考虑是否应答正确情况,并不完善

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

195

帖子

2

粉丝