单片机延时的实时性解决方法

1、如果单片机采用delay函数来进行延时,即采用空等待方式来延时,但是单片机只有一个内核,不能分身去处理别的事情。采用这种方式延时,单片机就只能等待延时时间到达之后,才能去处理其他事情,如果对程序的功能产生影响,就不能采用这种方法。

2、可以采用定时器来记录延时时间,在定时器来计算时间的期间,单片机可以处理其他事情,等计时时间到了之后,再来处理延时之后的事情。如果程序中有多个地方需要用到延时,单片机只有一个或少数定时器资源,可以采取这种思路,若程序需要延时10ms,可以用一个定时器计算1ms定时时间的参数,再配上开始计数使能标志、实际时间计算变量就可以解决。延时开始时,置位使能标志,实际时间计算变量加1,延时时间到了清零使能标志,实际时间计算变量归0去处理不同的事情,这样一个定时器就可以满足任意多处延时的需求。

3、也可以采用定时器中断的方式来达到延时的目的,在溢出中断里面给所有等待事件立标志位,然后主程序里面查询标志位。

4、单片机的定时器和中断打开了之后,如果软件没有关闭其是能控制寄存器,定时器溢出之后将会自动进入中断系统,此时单片机将会硬件清零定时器溢出标志位。此时还没有开始执行中断函数中的程序,定期器已经重新装载初值0x00(以最大定时时间设置)开始定时,当进入中断函数之后,重新给定时器赋初值,定时器又重新开始执行。在这个过程中,单片机执行的几个语句会浪费几个机器周期的时间,这会影响定时器的精度。只有重新给定时器赋初值,才会影响单片机定时器精度,
如果采用定时器模式2自动重新装载初值,就不会影响定时器精度。

5、单片机定时器精度,只要在进入中断服务程序的第一时间内,重新装载定时器初值,中断函数执行后面的语句就不会影响定时器中断的定时时间,除非定时器中断服务程序运行时间接近或者超过设定的定时时间。
一般在编写程序时,可以不再中断服务函数中执行的事情,就尽量不要在中断服务函数中编写。

  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值