看了I2C的经典程序,有点疑问.

[复制链接]
3112|3
 楼主| 俺从头来 发表于 2007-2-9 13:05 | 显示全部楼层 |阅读模式
I2c, AC, ck, AI, cw
初整IIC,到网上找了些程序,发现都差不多,但有地方不明白:<br /><br />I2CWAITACK函数定义为BIT型,而调用语句却是&quot;I2CWaitAck();&quot;<br /><br />RETURN&nbsp;;起什么作用~~~<br /><br /><br />如果没有应答,主器件不是应该重新发吗,下边的这个程序怎么能重新发<br /><br /><br /><br />#define&nbsp;true&nbsp;&nbsp;1<br />#define&nbsp;false&nbsp;0<br /><br />bit&nbsp;&nbsp;I2CWaitAck(void);<br />void&nbsp;I2CReadDate(void);<br /><br /><br />/*********读取ACK信号*********/<br />bit&nbsp;I2CWaitAck(void)&nbsp;&nbsp;//返回为:1=有ACK,0=无ACK<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;errtime=255;<br />&nbsp;&nbsp;&nbsp;&nbsp;SCL=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;SDA=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;I2CWait();<br />&nbsp;&nbsp;&nbsp;&nbsp;SCL=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;I2CWait();<br />&nbsp;&nbsp;&nbsp;&nbsp;while(SDA)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errtime--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!errtime)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCL=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;SCL=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;<br />}<br /><br /><br />/******读SD2300实时数据寄存器******/<br />void&nbsp;I2CReadDate(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;n;<br />&nbsp;&nbsp;&nbsp;&nbsp;I2CStart();<br />&nbsp;&nbsp;&nbsp;&nbsp;I2CStop();<br />&nbsp;&nbsp;&nbsp;&nbsp;I2CStart();<br />&nbsp;&nbsp;&nbsp;&nbsp;I2CSendByte(0x64);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//从年开始读取数据<br />&nbsp;&nbsp;&nbsp;&nbsp;I2CWaitAck();<br />&nbsp;&nbsp;&nbsp;&nbsp;I2CSendByte(0x00);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;I2CWaitAck();<br />&nbsp;&nbsp;&nbsp;&nbsp;I2CStart();<br />&nbsp;&nbsp;&nbsp;&nbsp;I2CSendByte(0x65);&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;I2CWaitAck();<br />&nbsp;&nbsp;&nbsp;&nbsp;for(n=0;n&lt7;n++)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;date[n]=I2CReceiveByte();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(n!=6)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//最后一个数据不应答<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I2CAck();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;I2CNoAck();<br />&nbsp;&nbsp;&nbsp;&nbsp;I2CStop();<br />}<br />
szzhengjin 发表于 2007-2-10 09:59 | 显示全部楼层

这个程序有问题

/*********读取ACK信号*********/<br />bit&nbsp;I2CWaitAck(void)&nbsp;&nbsp;//返回为:1=有ACK,0=无ACK<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;errtime=255;<br />&nbsp;&nbsp;&nbsp;&nbsp;SCL=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;SDA=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;I2CWait();<br />&nbsp;&nbsp;&nbsp;&nbsp;SCL=1;<br />&nbsp;&nbsp;&nbsp;&nbsp;I2CWait();<br />&nbsp;&nbsp;&nbsp;&nbsp;while(SDA)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;errtime--;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(!errtime)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SCL=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;false;-----这句有问题,其实是if语句内的,少了大括号<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;SCL=0;<br />&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;true;<br />}<br />
rclijia 发表于 2008-10-30 20:49 | 显示全部楼层

我也这想的

ACK函数的返回值都没用到啊!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

41

主题

436

帖子

0

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