欢迎来到Doc100.Net免费学习资源知识分享平台!
您的位置:首页 > 程序异常 >

对郭天祥i2c应答函数的疑问解决办法

更新时间: 2014-01-05 03:14:22 责任编辑: Author_N1

 

对郭天祥I2C应答函数的疑问
程序如下:

/*函数:Response()
功能:等待从机应答
*/
void Response()
{
uchar i;

scl = 1;
Delay();
while ((1 == sda) && i < 250) i++;
scl = 0;
Delay();
}

main函数用到的函数都有定义

void main(void)
{
Init();
Start();
Write_Byte(0xa0);
Response();
Write_Byte(3);
Response();
Write_Byte(0xaa);
Response();
Stop();

//Wait(100);

Start();
Write_Byte(0xa0);
Response();
Write_Byte(3);
Response();

Start();
Write_Byte(0xa1);
Response();
P1 = Read_Byte();
Stop();
while (1);
}

问题是:1.这个等待从机应答函数不管从机是否把sda拉低,都能执行下去,那这个等待应答函数有什么作用???
2.每次写完一个字节后,都跟一个等待从机应答函数,然后继续写,假设从机就没有应答的话,特别是写地址的时候,就没有应答,那接下去的写数据给谁呢??

敬请各位解惑,谢谢。

--参考方法--
在从设备存在,且能够正确应答时,在延时等待期间,应答信号能够回来。此时,这个程序能够正常运行;
上述假定在大部分场合是对的,所以,有人敢用。
如果要用在实际项目中,肯定不行,因为,程序是错误的。
--参考方法--
郭天祥这个程序只是一个Demo程序,作为一个正式项目的程序,的确如楼主所说有不妥的地方。
一种可行的做法是,让Response函数返回i值:
倘若返回值为250,则认为Response超时,从机未给出正确的响应,通信异常,主机可以做出响应的出错处理,比如重新发送数据。
倘若返回值小于250,则认为从机给出了正确的响应,通信正常。
上一篇:上一篇
下一篇:下一篇

 

随机推荐程序问答结果

 

 

如对文章有任何疑问请提交到问题反馈,或者您对内容不满意,请您反馈给我们DOC100.NET论坛发贴求解。
DOC100.NET资源网,机器学习分类整理更新日期::2014-01-05 03:14:22
如需转载,请注明文章出处和来源网址:http://www.doc100.net/bugs/t/19915/
本文WWW.DOC100.NET DOC100.NET版权所有。