延时1微秒,需要写几条_nop_()语句?| 已解决
STC15W4K48S4单片机,12MHZ主频,延时1微妙,需要写几条 _nop_(); 语句 STC-IPS软件有延时计算,输入主频时间,软件自动生成代码void Delay1us(void) //@12.000MHz
{
_nop_();
_nop_();
_nop_();
_nop_();
}
不想用函数,只想用 _nop_()语句来实现, 假如一条 _nop_()语句执行时间0.1微秒,那么10条_nop_()语句就可以延时1微秒。 12M主频,要12个NOP才是1us。
同理,24M主频,1us就要24个NOP。 谢谢 梁工,终于得到想要的答案了。 我想补充说明一下:
12M的时钟,1us有12个时钟周期。
一条汇编指令(单周期指令)NOP执行,分为三个步骤,分别是取指令、解码、执行。
4个时钟周期等于一个机器周期,一条NOP需要3个步骤*4个时钟周期 = 12个时钟周期。
所以一个NOP用时1us,一个NOP等于一个指令周期。C:\Users\a\Desktop\64b88767f23440518b86ada3567c60be.png 看时间周期几T的,12兆12T的就是1个nop void Delay1us(void) //@12.000MHz
{
_nop_();
_nop_();
_nop_();
_nop_();
}
图1是12M主频下一个nop的时间,
图2就是12M主频下实现1us的计算。
知其然,知其所以然,希望有用。
页:
[1]
2