初整IIC,到网上找了些程序,发现都差不多,但有地方不明白:<br /><br />I2CWAITACK函数定义为BIT型,而调用语句却是"I2CWaitAck();"<br /><br />RETURN ;起什么作用~~~<br /><br /><br />如果没有应答,主器件不是应该重新发吗,下边的这个程序怎么能重新发<br /><br /><br /><br />#define true 1<br />#define false 0<br /><br />bit I2CWaitAck(void);<br />void I2CReadDate(void);<br /><br /><br />/*********读取ACK信号*********/<br />bit I2CWaitAck(void) //返回为:1=有ACK,0=无ACK<br />{<br /> uchar errtime=255;<br /> SCL=0;<br /> SDA=1;<br /> I2CWait();<br /> SCL=1;<br /> I2CWait();<br /> while(SDA)<br /> {<br /> errtime--;<br /> if(!errtime)<br /> SCL=0;<br /> return false;<br /> }<br /> SCL=0;<br /> return true;<br />}<br /><br /><br />/******读SD2300实时数据寄存器******/<br />void I2CReadDate(void)<br />{<br /> uchar n;<br /> I2CStart();<br /> I2CStop();<br /> I2CStart();<br /> I2CSendByte(0x64); //从年开始读取数据<br /> I2CWaitAck();<br /> I2CSendByte(0x00); <br /> I2CWaitAck();<br /> I2CStart();<br /> I2CSendByte(0x65); <br /> I2CWaitAck();<br /> for(n=0;n<7;n++)<br /> {<br /> date[n]=I2CReceiveByte();<br /> if (n!=6) //最后一个数据不应答<br /> {<br /> I2CAck();<br /> }<br /> }<br /> I2CNoAck();<br /> I2CStop();<br />}<br /> |
|