最好从编译出来的汇编代码来比较
|
肯定delayus(55)比delayu(55)延时时间更长啊。 _nop_是空操作,占用一个指令周期,while(i--)还有判断、自减操作,是好几个指令周期 |
12m晶振下,你的delayu()执行一次就10us+了。 |
最好从编译出来的汇编代码来比较,看每个循环执行用了几个指令周期 |
肯定delayus(55)比delayu(55)延时时间更长啊。 _nop_是空操作,占用一个指令周期,while(i--)还有判断、自减操作,是好几个指令周期。 |
直接进入调试模式,看看执行一次需要多长时间,这样做演示函数不能理所当然的,要模拟。 |
你怎么知道是55us,仿真了吗? |
delayus(55)不一定是55us,delayu(55)更加不是55us了,在C语言中的延时程序很难控制到us,只是使用延时程序能够满足DS18B20的读写时序关系就能读出或写入数据,你使用两种不同的延时,肯定有一种不符合读写时序 |
循环的效果是一样的,前者没有写 _nop_() 后者则写,,,,,写了_nop_()更标准一些 |