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