void Delay(unsigned char m)//延时函数 延时m=60, 为什么要延时60微妙,低于或远大于60微妙
{
unsigned char i;
for(i=m; i>0; i--);
}
void I2C_Start() //启动I2C总线
{
SDA=1;
SCL=1;
Delay(60); 为什么要在此调用延时函数
SDA=0;
Delay(60);
SCL=0; 最后又要 把时钟线设置低电平,为什么?
Delay(60);
}
这个问题,很简单,可是就不明白,为什么, 请问能理解的高手,指点下,谢谢了。
------解决方案--------------------
你仔细看看I2C的时序图就懂了
------解决方案--------------------
代码是在完成时序图 延时为了提供时间读写
------解决方案--------------------
仔细看24C02的数据手册,总线时钟频率最大通常是100KHz。SCL不能翻转太快,一个周期最短10μs,高/低电平保持时间至少5μs。指令直接执行得通常比这个快,所以需要延时。
计数值为60不代表时间就是60μs,具体是多少要按编译出来的汇编指令周期算。