我说说经验。。。。
如果是STC的,其官网上的技术支持一栏就有24C的程序,也可以用“STC15新ISP专用软件v6.15 “里的延时程序来生成。
STC的10、11、12系列改变一个IO的状态,一般是3T或4T,15系列新版会减少一个T,按前者说,比如:
P10 = 0; //4T 24MHZ时是166ns
P10 = 1; //4T 24MHZ时是166ns
这两句就可以输出一次低、高电平,5V时,上升、下降沿大约是10ns(普源DS1052E测量)。
所以,访问I2C,要加比较多的延时,如果加NOP,则24个NOP就是1us,我一般不这样,用的是下面的程序:
void I2C_Delay(unsigned char n) //调用4T,返回6T
{
while(--n); //编译后是DJNZ Rn,rel 4T, 延时就是4*n T
}
比如要2us,就是48T, I2C_Delay(10); //大约50T
呵呵,一家之言,可以参考。
|