IIC器件的手册一般都有时序图,根据时序图和对应的时间参数确定延时时间就可以了。
至于延时在单片机中的实现方式,一般通过for循环中自增或者自减实现短延时,也可以使用nop指令实现延时。
找现成的例程吧,自己搞多累。
放几个子功能你看下。
///***************************************/void i2c_Start(void){// SDA_OUT(); SDA_H; //SDA高 -> 低 SCL_H; //SCL高 delay_us(4); SDA_L; //SDA低 delay_us(4); SCL_L; //SCL低(待写地址/数据)}///***************************************/void i2c_Stop(void){// SDA_OUT();// SCL_L; //SCL低 SDA_L; //STOP:when CLK is high DATA change form low to high delay_us(4); SCL_H; //SCL高 SDA_H; //SDA高 delay_us(4);}
如果使用硬件的IIC,是不用管延时的,芯片会自动 处理,也是会根据从机的IIC时序进行通讯的。
如果是你的IO模拟的方式,延时是是速度是有关的,要根据你的IIC芯片上的时序图的要求进行延时,延时可以使用定时器进行
IIC芯片的时序图上是有时序的说明的
还有,要确定时序的延时时间,可以先使用逻辑分析仪测一下波形,这样更直观