8051 中斷處理


正如我們所見,8051 中有五種不同的中斷。這些中斷是 INT0INT1、TO、T1、TI/RI。

每個機器週期有六個狀態。這些狀態是 S1 到 S6。所有中斷都在每個機器週期的 S5 狀態結束時進行取樣。當指令佔用多個機器週期時,則在下一個機器週期中輪詢取樣。當在第一個機器週期的 S5 狀態設定中斷標誌時,輪詢週期將找到它。中斷系統生成 LCALL 指令以呼叫相應的 ISS。

有一些條件。只有在不滿足這些條件中的任何一個時,才能執行該操作。這些條件如下:

  • 當優先順序相同或更高的中斷已經在進行時。

  • 當輪詢週期不是當前指令執行的最後一個機器週期時。

  • 噹噹前指令不是

    • RETI

    • 寫入 IP 暫存器

    • 寫入 IE 暫存器

當這些條件中的任何一個為真時,將不會生成到中斷服務子程式 (ISS) 的 LCALL。第二個條件表明在分支到 ISS 之前已完成當前執行。最後一個條件表明,在執行 ISS 之前,至少執行了 RETI 指令或對 IE 或 IP 暫存器的任何寫入指令之後的一條或多條指令。

當一個 ISS 正在執行時,微控制器可以被更高優先順序的中斷打斷。如果優先順序已經為 1,則微控制器無法被打斷。當它完成 ISS 執行後,才能發生新的中斷。

當呼叫一個 ISS 時,程式計數器 (PC) 值將被壓入堆疊。在執行 ISS 之後,執行 RETI 指令。因此,在執行 RETI 後,PC 值從堆疊中彈出以返回到切換控制的下一條指令。如果 ISS 以 RET 而不是 RETI 結束,則微控制器認為中斷仍在進行中。

8051 微控制器的單步操作

此 8051 支援程式的單步執行。我們可以使用外部中斷引腳作為按鍵輸入。讓我們考慮引腳 INT0 連線到一個按鍵。首先,當按鍵未按下時,中斷引腳值為 0,當按下按鍵時,值為 1,釋放按鍵後,它將再次變為 0。

此按鍵可以是單步按鍵。INT0 被程式設計為電平觸發中斷。中斷服務子程式 (ISS) 使用以下程式碼終止以進行單步操作。

P3.2 位用作 INT0 引腳。

L1:JNBP3.2, L1
L2:JBP3.2, L2
RETI

第一行表示它將處於 L1 狀態,直到 INT0 變為 1,第二行表示它將處於 L2 狀態,直到 INT0 變為 0。RETI 表示從 ISS 返回到主程式。

更新於:2020年6月27日

891 次瀏覽

開啟你的 職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.