Re: [問題] 8051 中斷問題

看板ASM (組合語言)作者 (樹海游魂)時間15年前 (2009/07/24 19:09), 編輯推噓1(109)
留言10則, 2人參與, 最新討論串2/2 (看更多)
※ 引述《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

07/24 21:03, , 1F
我是要做計時器,計時直到int0中斷為止,所以int0後,不要
07/24 21:03, 1F

07/24 21:05, , 2F
回到之前數到一半的timer0,所以才想他直接跳出不要回去.
07/24 21:05, 2F

07/24 21:14, , 3F
感謝r大喔~
07/24 21:14, 3F

07/24 21:55, , 4F
那沒有那麼麻煩,在int0中把timer0的interrupt disable
07/24 21:55, 4F

07/24 21:55, , 5F
就可以了,至於要不要跳到特定的位址,我想是沒有必要的
07/24 21:55, 5F

07/25 20:45, , 6F
有可以直接將timer0 interrupt disable的指令嗎?組合語
07/25 20:45, 6F

07/25 20:46, , 7F
言有喔?課本好像沒看到捏...
07/25 20:46, 7F

07/26 00:40, , 8F
以8051為例,是把 ET0 清除(disable interrupt)
07/26 00:40, 8F

07/26 00:40, , 9F
或是把 TR0 清除 (stop timer0)
07/26 00:40, 9F

07/27 19:48, , 10F
恩恩 我會哩 謝謝r大唷~~
07/27 19:48, 10F
文章代碼(AID): #1AQPPefV (ASM)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1AQPPefV (ASM)