8051 中斷處理
正如我們所見,8051 中有五種不同的中斷。這些中斷是 INT0、INT1、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 返回到主程式。
資料結構
網路
關係型資料庫管理系統
作業系統
Java
iOS
HTML
CSS
Android
Python
C 語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP