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一定是要有應答系統的,而且,應答是不能死等的,要有一個時間限制的,不然容易卡死
|