1、关于应答信号的一点知识
数据传输与应答信号ACK 发送到SDA线上的数据必须是8位的。每次传输可以发送的数据不受限制。每个字节后必须在时钟的第9个脉冲期间释放数据总线(SDA为高), 由接收器发送一个ACK(把数据总线的电平拉低)来表示数据成功接收。 IIC总线应答信号、主机拉高、释放总线、如果从机拉底表示有应答、如果从机不拉低、表面没有应答
void CheckACK(void)
{ unsigned short i=200;SDAC=0;SDA=1;// 先由主机把数据线拉高释放总线 再去检测数据线的电平高低SDAC=1; //Config SDAC as InputSCL=1; _delay(10); //Set SCL=1, Delay 10uswhile(i--){Test_Pc4C=0; //如果从机应答的话把这个引脚电平拉高Test_Pc4=1; if(!SDA) {//DeviceFlag=1; _tmpc0=0;//取消PC5引脚的复用功能Test_Pc5C=0; //如果从机应答的话把这个引脚电平拉高Test_Pc5=1;break;} //Break if Device Respounding_delay(100);//200*100uS=2ms Waiting Time} SCL=0; _delay(10); //Set SCL=0, Delay 10us
}