打印

关于PIC16f887定时器0最少定时问题

[复制链接]
3304|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
sinc_mark|  楼主 | 2013-3-12 10:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在使用定时器0做一个相对比较准确的定时器,根据公式:
T=(256-A)*(4/F)*分频比
T:是你要设定的时间.
A:是对应要赋的值(就是我要得到的值),
使用内部的4M晶振,不分频,设想定时50US,的到的T为206,考虑到内部的开销,使用软件补偿后,A赋值为237,我的问题是,如果我想减少定时时间,比如说再提高10us,定时时间为40US,这样子A的赋值大概应该在247左右,但这样赋值后,发现定时器0已经不能使用了,请问各位大侠,50us左右就是定时器0的极限定时间隔了么?如果不是,可以怎么提高?谢谢!
沙发
kvdong| | 2013-3-12 11:44 | 只看该作者
定时器在主频一定的时候只存在定时的上限时间吧。
不明白你所谓的“但这样赋值后,发现定时器0已经不能使用了”是指的什么

使用特权

评论回复
板凳
sinc_mark|  楼主 | 2013-3-12 13:09 | 只看该作者
kvdong 发表于 2013-3-12 11:44
定时器在主频一定的时候只存在定时的上限时间吧。
不明白你所谓的“但这样赋值后,发现定时器0已经不能使用 ...

但这样赋值后,发现定时器0已经不能使用 --就是定时器没反应了!
哪请问定时器0的上限时间是多少?

使用特权

评论回复
地板
hpfily| | 2013-3-12 19:09 | 只看该作者
我也试过这样好像不行,如果时间太短,单片机就一直进入中断

使用特权

评论回复
5
lqlkmqj| | 2013-3-12 20:58 | 只看该作者
顶一下 ,感谢分享

使用特权

评论回复
6
yorkevin2012| | 2013-3-13 09:12 | 只看该作者
呵呵 单片机的主频也就是4M 就执行一条简单的指令也要1us了 还有进中断压栈和出中断出栈的时间 还有你中断程序中的源码运行时间,而你定时仅50us,那么你的程序大部分的时间在执行中断程序了,
这个与你设定定时器的极限严格意义上来说是无关的,其解决方案是提高主频,或是延长设定中断时间,另外最好精简中断程序,对50us的中断来说尽量用汇编来写节省空间和时间

使用特权

评论回复
7
kvdong| | 2013-3-13 10:22 | 只看该作者
如果出现你所说的定时器没反应的话,应该是其它地方没有设置好的因素吧。
定时时间在极限下可以设置成1指令周期——按你的主频应该是1US吧。不过这已经没什么意义了,所以还得具体分析你确切需要的定时时限。
定时在15个指令周期内就没必要用中断了,进出中断加判断中断时间就差不多了。

使用特权

评论回复
8
yewuyi| | 2013-3-13 11:20 | 只看该作者
定时器进出中断是要消耗时间的,这个时间一般用指令周期来计算。
1、进入中断时,MCU本身有一个中断响应时间,这个时间主要是中断现场的入栈和跳转中断入口等消耗的指令周期。
2、进入中断后,因为PIC16是单中断源芯片,所以需要用户代码查询相关标志来确定具体执行哪个中断函数?第一个查询的中断源相当于优先级最高,如果你把定时器0的中断标志查询代码放到了最后,则首先需要执行完前面的那些代码,这肯定也是需要消耗时间的,具体消耗的时间也就是前面需要执行多少条用户指令。
3、退出中断返回到主函数也有一定的指令开销,这主要是中断现场的出栈和跳回到起始点等指令的执行周期。
4、从以上分析可知,如果想有一个较快的定时中断响应速度可以从以下方面着手。
(1)尽量提高MCU的运行速度,如此则指令周期运行时间将降低。
(2)尽量优化用户代码以尽量减少中断现场的参数入栈数量,如此出栈指令周期也会减少。
(3)尽量优化用户代码,将定时器0的中断标志查询放到第一查询位置,在中断函数中尽量减少执行应用代码,最好就是置位一个标志就直接退出
(4)建议选择最新的PIC16F1XXX系列芯片,新型号芯片针对中断入栈有一些优化,一些固定入栈的寄存器操作已经不需要通过用户指令来完成,MCU可以自动入栈和出栈,这自然可以减少一些指令周期。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:教育,就是把娃围起来,一期一期的收钱。 医疗,就是把命围起来,一天一天的收钱。

47

主题

301

帖子

0

粉丝