为 for 循环设置时间

Set a time for the for loop

我想在 for 循环中定义时间:

int count;
int forfunctime;
for(count=0;count<5;count++)
{
    output_b(sutun[count]);
    output_c(UC[count]);
    delay_ms(1);
}
int count;
int forfunctime;
for(forfunctime=0;forfunctime<100;++forfunctime)
{
    for(count=0;count<5;count++)
    {
        output_b(sutun[count]);
        output_c(UC[count]);
        delay_ms(1);
    }
}

在第二个代码中,我可以通过包含 for 循环来使用 MIPS 指令处理时间来获得延迟,但是有没有更精确的方法?

我的目标是为 for 循环设置一个时间。 编辑:对于那些以后会用到这些信息的人:在编程PIC时,我们使用for循环来滚动矩阵显示中的行和列,但是如果我们想让这个循环在一段时间内保持活动状态,我们需要使用计时器。

您可以在进入循环之前保存当前时间,并在每次循环迭代时检查是否已经过了 10 秒,但实际上这不是最好的方法。如果您正在使用 windows 系统,请检查 waitable timer objects, for linux check alarm

I want to run the for loop written in the first code for 10 seconds.

微控制器通常提供定时器,您可以使用它们代替延迟循环。计时器至少有两个优点:1) 它们可以很容易地等待特定的时间量,以及 2) 与 delay 函数不同,它们不会阻止控制器做其他事情。使用计时器,您几乎可以说“10 秒后通知我。”

查看您的特定芯片的文档以查看可用的定时器以及如何使用它们,但是 here's a good overview of how to use timers on PIC controllers

由于不知道你用的是哪个PIC,所以无法准确回答这个问题,但可以给你画个大概的图。

你需要的是一个计时器。几乎每个微控制器上都有定时器。但是很可能您必须手动对其进行编程,通常是通过在内存中设置一些位来实现。 Here 是关于如何编写计时器的示例。

第一个也是最天真的解决方案是设置一个微控制器的定时器,并在每次退出循环时读取它的值,如下所示:

setTimer(); //Your work, not a predifined function
while (readTimer() < yourTimeConstant){ //againt, your work, not a predifined function
    for(count=0;count<5;count++){
            output_b(sutun[count]);
            output_c(UC[count]);  
            }
     }

如果您的微控制器支持事件,第二种更简洁的解决方案是使用事件。