关于I2C应答程序的问题

[复制链接]
 楼主| 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

粉丝
快速回复 在线客服 返回列表 返回顶部