你的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;
} |