作者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