你的应答是错误的,SDA=1才是对的,这叫释放SDA端口
SDA=0了就无法检测电平状态了
有电脑,有开发板,不是复杂运算,仿真没有用,仿真要用在真正需要的地方IIC写入字节是可以很简单的,不需要那么复杂
void Write_Byte(unsigned char Byte) //写入器件的应答信号由从机给出
{
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; //给出一个上升沿,用于产生应答信号
Delay();
SDA=1;
while((SDA==1)&(k<1000)) //超时就不再等待应答
{
k++;
Delay();
} //等待SDA出现低电平,出现低电平就表示器件已经应答
SCL=0;
}
|