找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2269|回复: 10
打印 上一主题 下一主题
收起左侧

怎么在一个单片机定时器添加另一个定时器?

[复制链接]
跳转到指定楼层
楼主
ID:478845 发表于 2019-7-12 09:20 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
     在网上查了一些资料,发现都是在说让两个定时器同时工作,但是会因为优先级的不一样,从而导致中断程序发生的时间不一样,所以我就想能不能在一个定时器中添加另一个定时器,或者说用一个的定时器去触发另一个定时器?如果能的话,应该怎样做?不能的话,又是因为什么呢?
     本人接触单片机时间不算太长,没有系统地学习过单片机知识,所以百思不得其解,而且网上的资料也大都是单个定时器的触发,没有太深入的说明。
     希望有哪位大神能够帮我解答疑惑。万分感谢。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:462827 发表于 2019-7-12 09:57 | 只看该作者
一个定时器可以分频复用成很多个“定时器”的呀
回复

使用道具 举报

板凳
ID:478845 发表于 2019-7-12 10:37 | 只看该作者
hantu 发表于 2019-7-12 09:57
一个定时器可以分频复用成很多个“定时器”的呀

是不是相当于在定时器中设置多个时间变量,并根据定定时器的溢出频率来对这些时间变量进行赋值?
这不就相当于把定时器当做计数器来使用了么?而且在中断程序中来对这些变量进行判断的话,不是会同时进行么?
回复

使用道具 举报

地板
ID:477484 发表于 2019-7-12 11:01 | 只看该作者
在一个定时器中添加另一个定时器?靠定时器工作时间?
回复

使用道具 举报

5#
ID:56665 发表于 2019-7-12 11:09 | 只看该作者
一个定时器可以产生很多软件定时器
回复

使用道具 举报

6#
ID:123289 发表于 2019-7-12 11:30 | 只看该作者
1、定时器是硬件独立工作的,所以各计数器彼此互不相干。
2、当计数计满时,发生溢出,产生溢出标记。这时是个关键点!!!描述如下:
2.1、溢出即申请中断,正常是会被响应的,但如果中断已被另一个高级中断响应,且响应还在执行中(高级的进入中断服务程序,还未RETI),则申请不会被受理,只能一直申请着,继续等待。
2.2、溢出后计数还是由硬件控制,继续进行的,不受影响,但是:只能从0开始向上计数,也即只能从0000向FFFFH逐一计数,通常你是想从某从数值开始起计的,如从4000H起,也就是中断响应后将计数器重新复位成4000H,但是现在中断不能被即时受理,于是就出问题了(不会从4000H起计)。
2.3、STC的片机考虑到了这一点,你可选择自动重装功能(注:标准51也有,但有限制只能8位。STC的可以是16位),当你选择“自动重装”时,在计数器溢出时,会被自动重装成4000H,也就不会出问题了。自动重装,能保证计数的起点永远不受干扰!
2.4、如果高级中断处理的时间太长(这在高手写的程序中,是不会发生的,你将来也要注意这一点。),超过了你的中断周期,很明显,这时你的计数器又计数了一个循环,即:上个溢出中断申请未被响应,新的中断申请又来了,这样你就丢失了一次中断。如果高级中断处理的时间更长,还会丢失更多个!
2.5、高级中断处理完成返回退出时,你的中断才有机会被响应,这时你计数到那里了,不知道。但中断被延时了!只要延时不超过一个周期,影响的只是本次中断,并不影响下一个(以脉冲为例来解释,就是本次脉冲变宽了,下次变窄了),不过总的时间(总的N个脉冲宽度还是一定的),还是准确的。
明白这一点,就会知道:
中断服务程序必须短,否则可能会影响其它同级或低中断。这是编程的要点,是不是高手,一看你的中断服务程序就知道了。
所有“卡机”都是未做好这一项工作引起的。手机也一样,电脑也一样。
回复

使用道具 举报

7#
ID:123289 发表于 2019-7-12 11:32 | 只看该作者
明白以上之后【在一个定时器中添加另一个定时器】就是“天真”的想法了。
回复

使用道具 举报

8#
ID:123289 发表于 2019-7-12 12:10 | 只看该作者
其实只要一个定时器就可以处理N个定时事件,方法如下:
1、设置N个寄存器R_N(或存储器,寄存器耗时少),和N个标记位B_N。
2、每次中断后对R_N-1,减至0时,将R_N复位成初始值(你定),并将标记位置B_N=1。
3、主程序中,查寻B_N,当B_N=1时,将其清0,并执行你要处理的事件。
记住:定时器中断服务程序,就是只做这些寄存器计数,标记位置1的事,所以处理不需要多少时间。而要做的事件,都放在主程序中去做,不要在中断服务程序中做!!!,中断服务程序,只做标记!!!记住这些,你离高手就不远了。当然也有不得矣的例外。

回复

使用道具 举报

9#
ID:160500 发表于 2019-7-12 13:03 | 只看该作者
在一个定时器中添加另一个定时器,软件定时器可以添加,硬件的本来就有,不用添加。用一个定时器去触发另一个定时器是可以的。
回复

使用道具 举报

10#
ID:496604 发表于 2019-7-12 20:35 | 只看该作者
定时器分等级,按照等级设置就行了
回复

使用道具 举报

11#
ID:93224 发表于 2019-7-12 21:16 | 只看该作者
直接操作另外一个定时器就可以了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表