在实现单片机功能的时候,经常会用到延时函数,那么延时函数的原理也是非常有必要了解的。一般我们写延时函数的时候,默认的晶振频率fosc=12MHZ,而机器周期T=12/fosc=1us。
这里我们来写一个10ms的延时函数:
void delay_10ms()
{unsigned char i,j,k;for(i=5;i>0;i--){for(j=0;j<4;j++){for(k=0;k<248;k++)}}
}
这大概就是一个十毫秒的延时函数,主要原理就是通过三层for循环的时间间隔来实现延时的目的。
循环次数=45248=4960,又因为每次循环都有两次循环判断条件,所以每次循环耗费两个机器周期,总耗费机器周期=4960*2=9920,12M晶振频率,一个机器周期为1us, 总共耗费9920个机器周期,9920us = 9.92ms,加上赋值等操作耗费的时间,大约为10ms,但是在有些资料上看到的延时函数的实际时间是偏大的,具体是为什么,目前还没想明白。。。
如果怕自己写的延时函数有问题的话,还可以使用烧录软件上提供的延时函数来进行计算,上面会自动提供代码,
这上面提供的应该比较准确。