以往在写延时子程序时总是按单片机中的习惯,写两层循环:
void Delay(unsigned int t)
{
unsigned int i,j;
for( i = 0; i < 200; i ++ )
{
for( j = 0; j < t; j ++ );
}
}
这样写程序执行的时候好象根本不执行这段程序,不管延时再久,总是一下就过去,一点不占用时间,两层循环的方法不用在子程序中而直接用在主程序中也不行
后来用while循环的方法写的延时程序段可以放在主程序中,但不可以用在子程序中:
while(ti < t) {t ++;}
这个如果直接作为一个while循环语句出现在主程序里面,则可以起到延时的作用,但是如果把它放到Delay子程序中代替掉两层for循环,则仍然不起作用。
再后来使用单层的for循环,一切问题解决了。既可以单独使用,也可以使用在子程序中。
void Delay(volatile int t)
{
static volatile int ti;
for( ti = 0; ti < t; ti ++ );
}
你可以使用这个链接引用该篇文章 http://publishblog.blogchina.com/blog/tb.b?diaryID=4578658