【问题标题】:create 250ms delay in MikroC在 MikroC 中创建 250ms 延迟
【发布时间】:2021-09-07 07:02:13
【问题描述】:

我希望使用 MikroC 创建 250 毫秒延迟功能。在下面的代码中,我不明白第 2 节中的 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++); }
    }
}

【问题讨论】:

  • 是的,我错了。谢谢我更新了
  • 无论何时实现这样的脏延迟循环,所有循环迭代器都必须是volatile

标签: c assembly delay pic18 mikroc


【解决方案1】:

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

 Delay_ms(250);

除非您有其他特定限制,否则这应该可以工作。

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

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

【讨论】:

  • 那个,再加上他的代码将被任何半合格的编译器优化出来。
  • @Blindy 我不确定这是否是 MikroC 编译器的问题,但总的来说,是的,这是一个明确的风险。
【解决方案2】:

Mikroc 中已经提供了一个函数,它负责产生毫秒的延迟,即 delay_ms() ,程序中的嵌套循环什么也不做,只是让微控制器忙了几微秒或几毫秒,从而阻止了程序在不完成循环的情况下进一步移动,而只是进入循环周期,微控制器只是执行特定指令,如 nop (在汇编中),这些指令需要一些指令周期,需要时间来执行(与 FSOC 成反比),因此在不改变程序中的任何内容的情况下,微控制器会产生延迟。

【讨论】:

    猜你喜欢
    • 2011-03-04
    • 1970-01-01
    • 2015-02-15
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多