1. 在8051系列单片机中,延时有两种方式:定时器延时和软件延时(执行的方式产生延时)定时器延时,是通过定时器计数而产生定时器中断,一个机器周期记一个数。而通过执行空语句来延时,则是在函数的某个需要延时的地方,不断的执行空语句,来达到延时的效果。
2. 两种延时方式都与外部晶振的频率和单片机的运行速度(即一个机器周期对应多少个时钟周期)有关。例如,对于STC89C52单片机而言,一个机器周期=12个时钟周期,那么如果外部晶振选择12.000M,则一个机器周期=12/12M=1us;而STC12系列单片机,一个机器周期=1个时钟周期,也就是说,一个机器周期=1/12M=0.0833us。
3. 定时器延时,相对来说比较准确。但是也会有误差,因为每次响应中断都是需要时间的。(但是每次相应中断的时间相差不大,所以相对来说还是比较精确的)。补充:定时器的工作方式中,8位自动重装要比在中断中手动重装精确。
软件延时:软件延时中的nop是精确的一个机器周期,因为它对应汇编指令的NOP。之所以暂时不精确,是因为c语言转化为汇编时,在循环语句上翻译成汇编占的机器周期不好确定,如果看汇编代码可以把软件延时做的很精确。
关于CPU占用率:如果在主函数中使用软件延时,那么在函数执行过程中,如果遇到需要延时的时候,CPU始终被延时函数占用,无法执行其他操作,大大降低了MCU的利用率;如果用定时器延时,则不存在这个问题。
由于水平有限,如果您发现参考答案中有错误或者有需要补充的,请将您的答案或者建议发送至:
master@eepw.com.cn