延时函数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);
}
}
同一个灯,要有亮灭的过程才会感觉闪烁。