在 MikroC 中创建 250 毫秒的延迟

问题描述

我希望使用 MikroC 创建 250 毫秒延迟功能。在下面的代码中,我不明白第二部分中的 165 是做什么的。

void MSDelay(unsigned int itime);  // this is the prototype
void MSDelay(unsigned int itime)  { 
    unsigned int i;
    unsigned char j;
    for(i=0;i<itime;i++) {
         for(j=0;j<165;j++); }
    }
}

解决方法

MikroC 提供内置函数 Delay_ms 来产生简单的阻塞软件延迟。

 Delay_ms(250);

除非您有其他特定限制,否则这应该有效。

您展示的方法有点像黑客。对于具有特定时钟的某些特定 PIC,165 次迭代的空 for 循环可能需要大约 1 毫秒,因此外循环通过运行内循环 itimeitime 毫秒来简单地计算毫秒。

您不应该使用这样的方法,因为它高度特定于以特定时钟速度运行的特定 PIC,并且还取决于编译器,而不是简单地优化整个循环。无论您为哪个 PIC 构建,内置延迟功能都应该始终做正确的事情。

,

Mikroc 中已经提供了一个函数,它负责产生毫秒级的延迟,即 delay_ms() ,程序中的嵌套循环什么都不做,但它使微控制器忙碌了一些微秒或毫秒,从而防止程序在没有完成循环的情况下继续前进,而只是进入循环周期,微控制器只是执行特定指令,如 nop(在汇编中),这些指令需要一些指令周期,需要时间来执行(与 FSOC 成反比),因此无需更改程序中的任何内容,微控制器就会产生延迟。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...