从for循环生成的延迟

时间:2012-08-19 21:51:28

标签: delay microcontroller 8051

//say delay_ms = 1

void Delay(const unsigned int delay_ms)

{
unsigned int x,y;
for(x=0;x<delay_ms;x++)
{
    for(y=0;y<120;y++);
}

}

我正在尝试将上面的C代码用于我的8051微控制器。我想知道上面产生的延迟时间是多少。我使用的是12MHz振荡器。

1 个答案:

答案 0 :(得分:0)

这是产生时间延迟的真正糟糕方式。

如果您查看编译器生成的汇编程序,那么从您使用的处理器变体的数据表中,您可以查找列表中每条指令所需的时钟周期。添加这些,您将获得此代码将产生的最短延迟时间。

如果在处理器上启用了中断,则延迟时间将延长延迟期间触发的任何中断处理程序的执行时间。这些将为每个延迟函数调用添加基本上随机的时间量,具体取决于每个中断的频率和处理要求。

8051内置硬件定时器/计数器,用于在用户可编程延迟后产生信号。它们不受中断处理的影响(它们的触发事件的服务可能会被另一个中断源延迟),因此延迟时间会更加可靠。