打印

请教高手关于51响应定时器中断的过程。

[复制链接]
3005|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wchangtao|  楼主 | 2007-9-22 11:44 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    最近想用AT89c51做一个精确的计时器,需要用到51的定时器中断。为了定时精确要根据中断程序对计数器初值进行调整。有一个很重要的问题就是从定时器溢出中断到程序转到中断向量入口需要几个时钟周期,这期间的具体过程是怎样的?
    我查了好多课本和**,有的说最少需要3个时钟周期,有的根本就避而不谈。但是我用keil仿真的时候显示只需要两个时钟周期。我想找到51的数据手册可是上面没有关于这方面的介绍。
   恳请高手指点,多谢!

相关帖子

沙发
maychang| | 2007-9-22 12:00 | 只看该作者

从定时器溢出到程序转到中断向量入口需要几个时钟周期

与你当前执行的指令需要几个周期有关,正在执行乘法指令显然需要更多几个时钟等到该指令执行完毕才可以执行压栈操作。当然也与中断发生于多周期指令的哪个周期有关。另外,有些指令执行完毕并不能立即响应中断,必须再执行一条指令后才能够响应中断,这又会增加额外的周期。

使用特权

评论回复
板凳
wchangtao|  楼主 | 2007-9-22 13:11 | 只看该作者

最理想的情况

就想知道最理想的情况,中断发生后可以立即被响应的情况下有几个时钟周期延迟。多谢!

使用特权

评论回复
地板
diannaoza| | 2007-9-22 18:56 | 只看该作者

中断响应最长周期与最短周期

中断在每个机器周期的s6查询有中断发生否。

(若有中断则在紧接的下一个周期s1响应中断。)也就是说这条要执行完后才转入向量地址,这条指令有可能是1cy,2cy,4cy

中断响应后硬件会自动生成一条长调用指令“lcall"2cy
在每个机器周期查询用1cy

所以最短2cy+1cy=3cy

当在执行
mul,4cy 
ret,reti,ie,ip,2cy, 

;;若中断发生在子程序返回(ret)=2cy
;;接着发生mul=4cy
;;接着硬件lcall 0003中断矢量地址=2cy

所以"最长"2cy+4cy+2cy=8cy




使用特权

评论回复
5
HWM| | 2007-9-22 19:58 | 只看该作者

楼主不妨采用计数器初值自动重载的方式,当然这样一来只

使用特权

评论回复
6
computer00| | 2007-9-22 20:27 | 只看该作者

不如用52的定时器2来做.它有16位的重装模式.

不过像我这样的懒人,我不会象楼主那样那么辛苦的去弄清楚它到底有多少个周期,
我会先随便按照一个周期数来计算,然后做好了去实际测试,如果慢了,那么就把
初值增大点,如果快了,就把初值减小点,总之是试出来,而不是算出来。

使用特权

评论回复
7
wchangtao|  楼主 | 2007-10-31 09:46 | 只看该作者

多谢多谢!

多谢多谢!

使用特权

评论回复
8
一朝成名| | 2007-10-31 12:18 | 只看该作者

还是52的定时器2吧 多简单又方便啊

使用特权

评论回复
9
eleclike| | 2007-10-31 13:20 | 只看该作者

赞成用52的T2

赞成用52的T2 ,可以自动重装,16位

使用特权

评论回复
10
ayb_ice| | 2007-11-1 08:17 | 只看该作者

标准的51是3-9个机器周期

其实你的问题与这无关。。。

使用特权

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

本版积分规则

9

主题

21

帖子

0

粉丝