ACK(应答SDA=0)和NACK(非应答SDA=1)的使用实际上是取决你的通讯协议的:
1. 如果是89C51要和其他设备通讯,要看通讯设备的通讯要求,下面是接触得较多的用法:
从机给ACK表示让主机继续发送数据,NACK表示不接收了,让主机给STOP信号。
2. 如果89C51和89C51之间通讯,特别是用模拟的方式,接收和发送都是由你自己控制。你可以在通讯过程忽略ACK/NACK,写的时候,从机(SLAVE)一直接收直到主机给出STOP信号,读的时候也要先写,这时候可以写一个读的长度让从机知道。(这个可以根据需要自己制定通讯协议)
不知道你所谓的变化和理解具体是什么,所以只是简单回答如上。