void Write_Byte(unsigned char byte) //写入器件的应答信号由从机给出
{
unsigned char i,temp;
unsigned int k;
temp=byte;
SCL=0;
Delay();
for(i=0;i<8;i++)
{
if(temp&0x80)SDA=1;
else SDA=0;
Delay();
SCL=1;
Delay();
SCL=0;
Delay();
temp=temp<<1;
}
SCL=1; //给出一个上升沿,用于产生应答信号
Delay();
SDA=1;
while((SDA==1)&&(k<1000))
{
k++;
Delay();
} //等待SDA出现低电平,出现低电平就表示器件已经应答
SCL=1;
SDA=0;
Delay();
}
对于应答的处理,每个人有每个人处理方式,或者是说场合不同,代码也会有所不同
对于无应答,有几种处理方法,看你代码应用场合来决定:
1,不理会有没有应答,直接写入下一个字节
2,返回一个IIC错误信息,可以是提示IIC错误,或者是有屏幕提示无应答之类的处理
3,重新启动IIC,再给一个启始信号,继续进行IIC通讯
不管是用那个方法,IIC一定是要有应答系统的,而且,应答是不能死等的,要有一个时间限制的,不然容易卡死
|