16.3.5 非应答信号子函数

非应答信号子函数用于数据传输出现异常而无法完成时,在一个字节数据传送完毕后,在第9个时钟位上从器件输出高电平为非应答信号。非应答信号的产生有两种情况。

❑当从器件正在进行其他处理而无法接收总线上的数据时,从器件不产生应答,此时从器件释放总线,将数据线SDA置为高电平。这样,主器件可产生一个停止信号来终止总线数据传输。

❑当主器件接收来自从器件的数据时,接收到最后一个数据字节后,必须给从器件发送一个非应答信号,使从器件释放数据总线。这样,主器件才可以发送停止信号,从而终止数据传送。

非应答信号的时序如图16.6所示,在程序中,可以直接为SDA和SCL赋值来实现非应答信号的时序。

16.3.5 非应答信号子函数 - 图1

图 16.6 非应答信号时序

非应答信号子函数示例如下。


void NoAckic()//发送非应答位子程序

{

SDA=1;

Delays(1);

SCL=1;

Delays(1);

SCL=0;

Delays(1);

}