多谢大师们指教 |
向I2C总线写入一个字节时,在FOR循环中,每次左移一位,将SCL设置为高电平,必须延迟7微秒,然后将SCL拉低。 并重复下一个数位。 |
你的应答是错误的,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; } |
我们都是延时5US,不知道7US会不会影响,手册上是4.7和4US |
|