51使用while进行延时的问题

Posted 猫咪大王

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了51使用while进行延时的问题相关的知识,希望对你有一定的参考价值。

上周写了一个简单的IO口翻转的程序,但是很奇怪,在FPGA板子上怎么也跑不起来。

后面发现问题可能出在延时函数上。

void Delay(unsigned char t)
{
    while(--t);
}

while(--t)在有些编译中无法正确编译--t,编译器认为这样是可以优化的(这个是我们老大给出的可能回答)。所以它们就对它进行了优化。其实具体原因我也不是很清楚。

后面换成下面这种形式或者for循环一切就正常了。

void Delay(unsigned int t){
    while(t!=0){
        t=t-1; 
    }
}

当然啦,具体是不是编译器的原因,我也不是很清楚,因为调试看汇编代码是没有问题的。keil这边没问题,那应该就是仿真那边的问题了。

以上是关于51使用while进行延时的问题的主要内容,如果未能解决你的问题,请参考以下文章

51单片机C语言中delay函数是怎么定义和使用的?

请问51单片机定时器延时的调用是怎么调用的我有点不明白,谢谢

LED闪烁及流水灯——清翔51单片机(V3.0)

51单片机定时器0作为时间基准以及延时函数参考使用

单片机延时函数

求一个51单片机延时1秒的程序,用汇编!!