你的IIC寫入之后沒有把SDA拉高
本身就沒有SDA拉高的代碼,SDA怎么能拉高呢?
要有SDA=1;這個語句之后,才能讀取到SDA的電平數據
給你一個參考一下,順便問你一個問題,為什么要寫low呢?0不行嗎?它不比low少打兩鍵盤嗎?
void Write_Byte(unsigned char Byte) //寫入器件的應答信號由從機給出
{
unsigned char i;
unsigned int k;
for(i=0;i<8;i++)
{
if(Byte&0x80)SDA=1;
else SDA=0;
Delay();
SCL=1;
Delay();
SCL=0;
Delay();
Byte<<=1;
}
SCL=1;
Delay();
SDA=1;
while((SDA==1)&&(k<1000)) //超時就不再等待應答
{
k++;
Delay();
} //等待SDA出現低電平,出現低電平就表示器件已經應答
SCL=0;
} |