1988|0

2015

帖子

0

TA的资源

纯净的硅(中级)

楼主
 

单片机延时的实时性解决方法 [复制链接]

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

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

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

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

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

 

 
点赞 关注

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表