C51延时函数问题求教
最近用stc89c52编程偶然间发现一个问题,关键代码如下:
delay(unsigned long ms)
{
delaytime=ms;
while{delaytime);
}
Timer0//1ms定时器
{
if(delaytime>0)
{
delaytime--;
}
}
void main
{
while(1)
{
P10=0;
delay (500);
P10=1;
delay (500);
}
}
运行时发现P10并不是0.5秒改变一次状态,经常提前或者滞后,不知道是什么原因,以前也是这么用的,可能是没注意到,十分困扰。但是做如下改动即可正常:
delay(unsigned long ms)
{
delaytime=ms;
start=1;
while{start);
}
Timer0//1ms定时器
{
if(start==1)
{
if(delaytime>0)
{
delaytime--;
}
else
start=0;
}
void main
{
while(1)
{
P10=0;
delay (500);
P10=1;
delay (500);
}
}
加上一个标志位,便没有任何问题。在这里请教各位其中的道理。