16.3.5 非应答信号子函数
非应答信号子函数用于数据传输出现异常而无法完成时,在一个字节数据传送完毕后,在第9个时钟位上从器件输出高电平为非应答信号。非应答信号的产生有两种情况。
❑当从器件正在进行其他处理而无法接收总线上的数据时,从器件不产生应答,此时从器件释放总线,将数据线SDA置为高电平。这样,主器件可产生一个停止信号来终止总线数据传输。
❑当主器件接收来自从器件的数据时,接收到最后一个数据字节后,必须给从器件发送一个非应答信号,使从器件释放数据总线。这样,主器件才可以发送停止信号,从而终止数据传送。
非应答信号的时序如图16.6所示,在程序中,可以直接为SDA和SCL赋值来实现非应答信号的时序。
图 16.6 非应答信号时序
非应答信号子函数示例如下。
void NoAckic()//发送非应答位子程序
{
SDA=1;
Delays(1);
SCL=1;
Delays(1);
SCL=0;
Delays(1);
}