打印

关于JNB TF0,$这条指令,问问大家,恳请哪位大虾给小弟解答一下

[复制链接]
6087|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
dqstar|  楼主 | 2007-8-20 18:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
JNB (中断标志位),$
这条指令,原地等待中断,
例如:
JNB TF0,$

有一个问题,当发生中断时,
执行完中断服务程序返回后,
糸统从哪里开始执行??
继续执行这一个指令,还是执行这条指令的下一条指令??

我用KEIL C51仿真的时候,如果用串行口仿真的输入框,手动将TF0置为1,执行中断服务程序,RETI返回后,从这个条指令的下一条指令开始执行

但是如果我不是手动置TF0,一直单步运行,或直接运行到光标处(光标设在中断服务程序里),RETI返回后,还在执行这条指令......

相关帖子

沙发
zpf111| | 2007-8-20 18:53 | 只看该作者

等待 TF0 变为 1(忘记了是变为1还是0),否则一直执行这条语句。

使用特权

评论回复
板凳
conwh| | 2007-8-20 19:00 | 只看该作者

既然用中断了,还检测它干什么。

使用特权

评论回复
地板
diannaoza| | 2007-8-20 19:31 | 只看该作者

同时开中断并查询中断位的问题?

开了中断,并在同时查询中断

jnb tf0,$
;;等中断。
当时间溢出置tf0=1,并进入了中断00bh
执行00bh后硬件自动清tf0为0.
接者再jnb tf0,$,此时当然还在运行此句。

原因:
jnb 为2周期指令。

而中断采样为每个周期的s5p2进行采样。自然比jnb更快执行。

所以中断完后,还会在这条语句:jnb tf0,$.


有见解的说说,谢谢!

使用特权

评论回复
5
dqstar|  楼主 | 2007-8-20 19:43 | 只看该作者

为什么手动将TF0置为1,中断返回后,执行下面一条语句?

为什么仿真时
手动将TF0置为1,中断返回后,执行下面一条语句?

我想让它先等待中断,中断后,执行中断服务程序,返回时,再往下执行

使用特权

评论回复
6
diannaoza| | 2007-8-20 19:46 | 只看该作者

手动将TF0置为1,中断返回后,执行下面一条语句?

我的理解为什么手动会产生,执行了jnb tf0,$,的下一条指令。

因为:你的手动执tf0=1时,不是在s5p2进行,你也不可能做到。
不知我说的对否.

使用特权

评论回复
7
dqstar|  楼主 | 2007-8-20 19:54 | 只看该作者

我觉得执行下一条语句是合理的

我认为:
TF0=1时,虽然要进入中断,但是糸统仍然要等当前这条指令 JNB TF0,$ 执行完,
此时,如果无中断服务程序,PC会指向下一条语句,所以进入中断时,压入堆栈的是这个语句的下一条语句的地址;
我觉得这样是合理的,不知道为什么它还在那里转

使用特权

评论回复
8
diannaoza| | 2007-8-20 20:45 | 只看该作者

统仍然要等当前这条指令 JNB TF0,$ 执行完

没错是执行完,此时也符合tf=0,因为没有发生中断。
执行完后接着就进入了000bh
执行后硬件自动清tf0为0
再返回(reti)
此时再执行你的jnb tf0,$
因为发了中断出来,此时的tf0=0.
所以不会执行下条语句。

我的理解如上。

使用特权

评论回复
9
dqstar|  楼主 | 2007-8-20 21:04 | 只看该作者

谢谢diannaoza

嗯,我还是不太明白,佑计可能和时序有关糸
不过还是要谢谢diannaoza

使用特权

评论回复
10
twz8858877| | 2007-8-20 21:37 | 只看该作者

diannaoza说的对

中断响应时会将下一条指令的入口地址压栈,由于JNB TF0,$的下一条指令入口地址就是该条指令,所以中断响应后还在原地。一般这条指令用在未开放中断的场合,或者需要软件清除中断标志的场合,如TF2、RI、TI等

使用特权

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

本版积分规则

15

主题

34

帖子

1

粉丝