0

//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 振荡器。

4

1 回答 1

0

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

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

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

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

于 2012-08-20T10:06:45.873 回答