延时函数delay的一点疑问

发布时间: 2024-08-16
来源: 电子工程世界

延时函数delay的一点疑问


void main()

{

    


          while(1)

          {

            

             P2=0xfe; //1111 1110

            // delay(60000);

          }                  


}


代码的结果是D1一直亮,这个结果是可以解释的,因为有一个无限循环的while,导致P2不间断的被设置0xFE,这个值的意思就是让D1亮,一时设置一时亮,一直设置一直亮,很好理解。


但是下面的代码是加了delay函数的


void main()

{

    


          while(1)

          {

            

             P2=0xfe; //1111 1110

             delay(60000);

          }                  


}


结果也是D1一直亮,这里我就想不明白,CPU是怎么执行这个的。现在想到的一种解释就是delay的时间很短,短到肉眼感觉不出来。


我做过几个实验,0xfd是让D2亮 0xFE是让D1亮


          while(1)

          {

            

             P2=0xfd; //1111 1110

             delay(5000);

             P2=0xfe;

             delay(5000);

          }    

能感觉到闪烁


          while(1)

          {

            

             P2=0xfd; //1111 1110

             delay(2500);

             P2=0xfe;

             delay(2500);

          }


能感觉到闪烁


          while(1)

          {

            

             P2=0xfd; //1111 1110

             delay(2000);

             P2=0xfe;

             delay(2000);

          }    

    

能感觉到闪烁

          while(1)

          {

            

             P2=0xfd; //1111 1110

             delay(1500);

             P2=0xfe;

             delay(1500);

          }    


能感觉到闪烁

          while(1)

          {

            

             P2=0xfd; //1111 1110

             delay(1000);

             P2=0xfe;

             delay(1000);

          }    


肉眼感觉不到闪烁


那么这个delay(1000)用多长时间呢?

经过调试


0.00019550

0.00470500

发现是0.0046秒

也就是说两个灯切换亮,时间少于这个值就不会感觉出来。


          while(1)

          {

            

             P2=0xfe; //1111 1110

             delay(60000);

          }  

我delay(60000),换算过来就是0.276秒,这个时间已经能感觉出来了,为什么D1始终不闪烁?


我delay(100),我甚至调试过,发现流程并不会跨越过这个耗时操作。


void main()

{

          while(1)

          {

            

             P2=0xfe; //1111 1110

             delay(1500);

             P2=0xff; //1111 1111

             delay(1500);

          }                  


}

同一个灯,要有亮灭的过程才会感觉闪烁。


文章来源于: 电子工程世界 原文链接

本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。