|
void Write_Byte(unsigned char byte) //寫(xiě)入器件的應(yīng)答信號(hào)由從機(jī)給出
{
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; //給出一個(gè)上升沿,用于產(chǎn)生應(yīng)答信號(hào)
Delay();
SDA=1;
while((SDA==1)&&(k<1000))
{
k++;
Delay();
} //等待SDA出現(xiàn)低電平,出現(xiàn)低電平就表示器件已經(jīng)應(yīng)答
SCL=1;
SDA=0;
Delay();
}
對(duì)于應(yīng)答的處理,每個(gè)人有每個(gè)人處理方式,或者是說(shuō)場(chǎng)合不同,代碼也會(huì)有所不同
對(duì)于無(wú)應(yīng)答,有幾種處理方法,看你代碼應(yīng)用場(chǎng)合來(lái)決定:
1,不理會(huì)有沒(méi)有應(yīng)答,直接寫(xiě)入下一個(gè)字節(jié)
2,返回一個(gè)IIC錯(cuò)誤信息,可以是提示IIC錯(cuò)誤,或者是有屏幕提示無(wú)應(yīng)答之類(lèi)的處理
3,重新啟動(dòng)IIC,再給一個(gè)啟始信號(hào),繼續(xù)進(jìn)行IIC通訊
不管是用那個(gè)方法,IIC一定是要有應(yīng)答系統(tǒng)的,而且,應(yīng)答是不能死等的,要有一個(gè)時(shí)間限制的,不然容易卡死
|
|