第二章 8051 概述
2.4 MCS-51 的中斷結構
2.4.2 中斷如何動作
最低
2.4.2 中斷如何動作
在 IE 暫存器裡的中斷旗號會在每個機械週期的 S5P2 時間備取樣,
取樣進來的旗號會在下一個機械週期加以檢查(polling)。如果這些旗 號中有一個為”1”,會在這個週期裡發現,然後中斷系統會產生 LCALL 到其相對應的中斷服務程式,但是如果有下面所列的狀況時就不產生 中斷動作:
甲、 有相同或更高優先權的中斷正在處理時。
乙、 目前的週期(檢查,polling)不是正在執行的這個指令的 - 34 -
丙、 最後一個週期。
丁、 正在執行的指令是 RETI,或任何寫入 IE 或 IP 的指令。
以上所別的三個狀況都會禁止產生 LCALL 至中斷服務程式。條件 2 是保證目前正在執行的指令會在跳至服務程式前被完整的執行完。條 件 3 是保證在執行完 RETI 或寫至 IE,IP 的指令後會再執行一個指令 後才會被中斷。
檢查中斷旗號的週期,會在每個機械週期重複動作,且這個被檢查 的旗號是在前一個機械週期的 S5P2 時取樣進來的狀態。因此,如果有 一個中斷要求動作了,但是卻因上面所說三個狀況的關係而未被 8051 反應,當以上所列的狀況解除了,如果中斷的動作旗號沒有繼續維持,
則上面所要求的中斷不會被接受。換句話說,事實上中斷旗號一旦動 作,但沒有被接受,它也不會被記住,每一個檢查週期的值都是新的。
CPU 回應中斷要求的方法是,由硬體產生 LCALL 指令至中斷要求 的服務程式;在某些狀況下,硬體也會清除引起中斷的旗號,有些則 不會;UART 和 Timer2 的中斷旗號不會被清除,而必須要由使用者的軟 體加以清除。外部中斷旗號(IE0 和 IE1)只有在其為邊緣觸發模式時會 自動被硬體清除。在硬體產生 LCALL 時,會將程式計數器
- 35 -
(Program Counter)的值堆入堆疊(但沒有存 PSW),然後載入中斷源 之中斷向量位址,最後跳入中斷副程式,各中斷源之向量位址如下表 5:
圖 2-19 中斷源之向量位址 中 斷 源 中 斷 向 量
IE0 0003H
TF0 000BH
IE1 0013H
TF1 001BH
RI & TI 0023H TF2 &EXF2 002BH
中斷副程式的執行是由以上所列之位址開始,直到執行到 RETI 為 止。RETI 指令是告知 CPU 這個中斷已經結束,然後從堆疊區的頂端取 回兩個位元組的返回位址到程式計數器,以返回原來被中斷的程式。
請特別注意,RET 指令也會使中斷副程式返回被中斷的程式,但如 此會使得中斷系統認為中斷仍在動作中,而無法接受其它的中斷。
- 36 -
外部中斷源可規劃成準位動作(Level-activated)或邊緣動作 (Transition-activated),這個動作可透過規劃 TCON 的 IT1 或 IT0 位 元加以設定。如果 Itx=0,則外部中斷 x 就會在檢知 INTx 接腳的信號 為低電位(Low)時觸發。如果 Itx=1,則外部中斷 x 是使用邊緣觸發。
在這個模式下,如果在 INTx 接腳在上一個週期裡被檢知為高電位,下 一個週期檢知為低電位時,則中斷要求旗號 Iex 就被設定成 ”1” , 此 Iex 就對 CPU 提出中斷要求。
因為外部中斷輸入腳是在每個機械週期被取樣一次,因此輸入的高 電位或低電位信號必須至少維持 12 個振盪週期,以保證中斷被檢知。
如果外部中斷型式是邊緣觸發式時,外部中斷源必須維持高電位一 個週期,然後維持低電位也必須至少一個週期,以保證位準的轉移被 檢知到,外部中斷要求旗號 IEx 才會被設定為”1”。當中斷服務程式 被呼叫時,CPU 會自動將 IEx 清除。
如果外部中斷是用準位觸發型態時,外部中斷源必須維持中斷要求 信號確實被 CPU 接受而產生中斷為止。並且在中斷服務程式結束前,
中斷要求信號必須拿開,否則就會一直產生下去。
- 37 -