引言:(这 句出自何立民的《I2C总线应用系统设计》)原述:“应答信号在第9个时钟上出现,接收器输出低电平为应答信号(A),输出高电平则为非应答信号 (/A)”,“由于某种原因,被控器不产生应答时,如被控器正在进行其它处理无法接收总线上的数据时,必须释放总线,将数据线置高电平,然后主控器可通过产生一个停止信号信号来比终止数据传输。”“当主控器接收数据时接收到最后一个数据字节后,必须给被控器发送一个非应答位(/A),使被控器发送器释放数 据线,以便主控制(注:应当是主控器,不是主控制)发送停止信号从而终止数据传输。”
一直以来都有个疑惑,看下面这段代码:
bit IIC_WaitAck()
{
bit AckBit;
SCL = 1;
IIC_Delay(5); //5us延时;
AckBit = SDA;
SCL = 0;
IIC_Delay(5);
return AckBit();
}
usigned char PCF_8591_Read(uchar addr)
{
unsigend char dat;
IIC_Start();
IIC_SendByte(0x90); //器件寻址,同时发送写命令
IIC_WaitAck(); //等待应答;
IIC_SendByte(addr); //读取的A/D通道地址;
IIC_WaitAck();
IIC_Start(); //结束写,转为读取
IIC_SendByte(0x91); //器件寻址同时