|
你的應(yīng)答是錯(cuò)誤的,SDA=1才是對(duì)的,這叫釋放SDA端口
SDA=0了就無法檢測電平狀態(tài)了
有電腦,有開發(fā)板,不是復(fù)雜運(yùn)算,仿真沒有用,仿真要用在真正需要的地方IIC寫入字節(jié)是可以很簡單的,不需要那么復(fù)雜
void Write_Byte(unsigned char Byte) //寫入器件的應(yīng)答信號(hào)由從機(jī)給出
{
unsigned char i;
unsigned int k;
SCL=0;
Delay();
for(i=0;i<8;i++)
{
if(Byte&0x80)SDA=1;
else SDA=0;
Delay();
SCL=1;
Delay();
SCL=0;
Byte<<=1;
}
SCL=1; //給出一個(gè)上升沿,用于產(chǎn)生應(yīng)答信號(hào)
Delay();
SDA=1;
while((SDA==1)&(k<1000)) //超時(shí)就不再等待應(yīng)答
{
k++;
Delay();
} //等待SDA出現(xiàn)低電平,出現(xiàn)低電平就表示器件已經(jīng)應(yīng)答
SCL=0;
}
|
|