1、如果单片机采用delay函数来进行延时,即采用空等待方式来延时,但是单片机只有一个内核,不能分身去处理别的事情。采用这种方式延时,单片机就只能等待延时时间到达之后,才能去处理其他事情,如果对程序的功能产生影响,就不能采用这种方法。
2、可以采用定时器来记录延时时间,在定时器来计算时间的期间,单片机可以处理其他事情,等计时时间到了之后,再来处理延时之后的事情。如果程序中有多个地方需要用到延时,单片机只有一个或少数定时器资源,可以采取这种思路,若程序需要延时10ms,可以用一个定时器计算1ms定时时间的参数,再配上开始计数使能标志、实际时间计算变量就可以解决。延时开始时,置位使能标志,实际时间计算变量加1,延时时间到了清零使能标志,实际时间计算变量归0去处理不同的事情,这样一个定时器就可以满足任意多处延时的需求。
3、也可以采用定时器中断的方式来达到延时的目的,在溢出中断里面给所有等待事件立标志位,然后主程序里面查询标志位。
4、单片机的定时器和中断打开了之后,如果软件没有关闭其是能控制寄存器,定时器溢出之后将会自动进入中断系统,此时单片机将会硬件清零定时器溢出标志位。此时还没有开始执行中断函数中的程序,定期器已经重新装载初值0x00(以最大定时时间设置)开始定时,当进入中断函数之后,重新给定时器赋初值,定时器又重新开始执行。在这个过程中,单片机执行的几个语句会浪费几个机器周期的时间,这会影响定时器的精度。只有重新给定时器赋初值,才会影响单片机定时器精度,
如果采用定时器模式2自动重新装载初值,就不会影响定时器精度。
5、单片机定时器精度,只要在进入中断服务程序的第一时间内,重新装载定时器初值,中断函数执行后面的语句就不会影响定时器中断的定时时间,除非定时器中断服务程序运行时间接近或者超过设定的定时时间。
一般在编写程序时,可以不再中断服务函数中执行的事情,就尽量不要在中断服务函数中编写。
|