作者ruemann (树海游魂)
看板ASM
标题Re: [问题] 8051 中断问题
时间Fri Jul 24 19:09:25 2009
※ 引述《peterweli (Fang)》之铭言:
: 我现在要用两个中断 , int0和timer0 , int0优先
: 假如已经进入了timer0正在数
: 在timer0其间 , 使int0中断
: int0後 , 理论上会跳回timer0
: 有办法执行完int0後 , 不跳回timer0 ,跳到我指定的地方去吗?
你的叙述有点怪,是指说
1. timer0 中断发生
2. int0 中断发生
3. int0 reti
4. timer0 reti
这样吗?
不过这样的话,会有一个现象,就是根本不会跳到 int0 的中断才对
中断优先权是指当中断同时发生时,先处理那一个中断
而中断发生时,一般为了避免重覆发生中断,会在中断发生时,让其他中断不发生
所以,除非你在 timer0 中有把那个 bit 重设,不然不可能在 timer0 中断程式中
让 int0 中断产生
不过你有可能是想要做这样的动作:
1. timer0 计数,时间到後产生中断
2. int0 中断发生
3. int0 reti
4. timer0 不产生中断
也就是在 int0 产生後,让 timer0 的中断不再发生
如果是这样的话,那就是在 int0 的中断程式中,将 timer0 interrupt disable
如果要跳到特定的位置时,要把那个位置 push 进 stack 然後 reti,并记得把中断
前的位置 pop 掉
只看你的叙述,不太清楚你要做啥东西
--
我是路人甲
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 123.204.117.120
1F:推 peterweli:我是要做计时器,计时直到int0中断为止,所以int0後,不要 07/24 21:03
2F:→ peterweli:回到之前数到一半的timer0,所以才想他直接跳出不要回去. 07/24 21:05
3F:→ peterweli:感谢r大喔~ 07/24 21:14
4F:→ ruemann:那没有那麽麻烦,在int0中把timer0的interrupt disable 07/24 21:55
5F:→ ruemann:就可以了,至於要不要跳到特定的位址,我想是没有必要的 07/24 21:55
6F:→ peterweli:有可以直接将timer0 interrupt disable的指令吗?组合语 07/25 20:45
7F:→ peterweli:言有喔?课本好像没看到捏... 07/25 20:46
8F:→ ruemann:以8051为例,是把 ET0 清除(disable interrupt) 07/26 00:40
9F:→ ruemann:或是把 TR0 清除 (stop timer0) 07/26 00:40
10F:→ peterweli:恩恩 我会哩 谢谢r大唷~~ 07/27 19:48