我想用MikroC创建250ms延迟函数。在下面的代码中,我不明白第二节的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
循环可能需要大约1ms,因此外循环通过将内环itime
运行itime
毫秒来简单地计数毫秒。
您不应该使用这样的方法,因为它高度特定于以特定时钟速度运行的特定PIC,而且还取决于编译器,而不是简单地优化整个循环。内置的延迟函数应该总是做正确的事情,无论你为哪个PIC构建。
Mikroc中已经提供了一个函数,它负责产生毫秒的延迟,即delay_ms((,程序中的嵌套循环什么都不做,但它会让微控制器忙碌几微秒或几毫秒,从而防止程序在没有完成循环的情况下进一步移动,而只是进入循环周期,微控制器只是用来执行特定的指令,如nop(在汇编中(,这些指令需要一些指令周期,需要时间来执行(与FSOC成反比(,因此在不改变程序中任何内容的情况下,微控制器会产生延迟。