前言
單片機其本質上還是一個計算機,當前一條指令執行完畢,CPU再根據PC取出下一條指令的地址,并再得到再下條指令地址,依次執行每一條指令。這聽著不錯,所有的任務在有條不紊的按照順序執行,作為一個單核處理器的單片機,需要等待上一個任務結束才能進行下一個任務,但外界或內部發生更加重要的事情,我們不能再去等著上一個任務去執行完畢,單片機需要馬上去運行相應的程序以保證實時性,如當延時時間太長時(比如10s),相應的按鍵檢測便會失靈。但在大多數的控制場合,需要單片機立即做出反應,保證可靠性。通過引入中斷機制,使CPU具有對外界緊急事件的實時處理能力。
中斷這個概念可以說是所有微機的基礎,甚至可以說微機就是一條條執行指令+中斷。
中斷
當CPU正在處理某件事的時候外界發生了緊急事件請求,要求CPU暫停當前的工作,轉而去處理這個緊急事件,處理完以后,再回到原來被中斷的地方,繼續原來的工作,這樣的過程稱為中斷。
實現這種功能的部件稱為中斷系統,請示CPU中斷的請求源稱為中斷源。中斷系統一般允許多個中斷源,當幾個中斷源同時向CPU請求中斷,存在CPU優先響應哪一個中斷源請求的問題。通常規定每一個中斷源有一個優先級別。CPU總是先響應優先級別最高的中斷請求。
而中斷存在中斷嵌套的問題,當處理低優先級中斷時發生高優先級中斷,系統也會保存低優先級的狀態,去執行高優先級的程序,處理完以后,再回到原來被中斷的地方,繼續原來的工作。這樣的過程稱為中斷嵌套,不能嵌套的稱為單級中斷系統,反之為高級中斷系統。
STC89C51RCRD+系列單片機
IP寄存器和IE寄存器都可以支持位尋址,即可以單獨配置相應位的值如
EA = 1;
EX0 = 1;
STC89C51RCRD+系列單片機提供了8個中斷請求源,它們分別是:
中斷優先級 IP(B8H)
STC89C51RCRD+系列所有的中斷都具有4個中斷優先級,傳統的8051則只有兩個中斷優先級,這里我們按照兩個配置,不配置按照默認中斷查詢順序號查詢。配置方法為配置IP寄存器,八位寄存器,“1”表示高級中斷,“0”表示低級中斷。四級中斷可查看STC89C51RCRD+系列單片機數據手冊。
IP(B8H) |
說明 |
位地址 |
高優先級的中斷請求可以打斷低優先級的中斷,反之,低優先級的中斷請求不可以打斷高優先級及同優先級的中斷。當兩個相同優先級的中斷同時產生時,將由查詢次序來決定系統先響應哪個中斷。下圖為中斷查詢次序表。
中斷允許 IE(A8H)
通過軟件設置IE寄存器的值可以去屏蔽一些中斷和運行中斷,只有中斷運行被打開才能發生中斷。更像是中斷的開關,為1可以中斷。復位后IE中各中斷位均被清“0”,禁止所有中斷。
各個中斷除相應的中斷允許位,還有個“總閘”EA。
IE(A8H) |
說明 |
位地址 |
其他中斷
其具體的中斷需要查看配置相應的寄存器,下面以外部中斷為例進行配置,在學習單片機,嵌入式的路上,如果有元器件購買需求,可以去唯樣商城,學生還有優惠。
外部中斷
先對優先級及中斷運行配置
EA=1;
EX0=1;
//不配置優先級按照默認中斷查詢次序
其次對外部中斷的東西進行配置,比如說當外部中斷0引腳收到下降沿時,就觸發中斷。相應的配置(定時器/計數器及外部中斷控制寄存器 TCON)
TCON |
我們只用到了IE0,IT0兩位,而IE0更多的時候去讀取,而不是寫。因此IT0才是主要位置。當IT0=0,為低電平觸發方式;當IT0=1,為下降沿觸發方式。
因此我們配置
IT0 = 1;
至于低電平中斷和下降沿中斷的區別,在數據手冊中寫道
由于系統每個時鐘對外部中斷引腳采樣1次,所以為了確保被檢測到,輸入信號應該至少維持2個系統時鐘。如果外部中斷是僅下降沿觸發,要求必須在相應的引腳維持高電平至少1個系統時鐘,而且低電平也要持續至少一個系統時鐘,才能確保該下降沿被CPU檢測到。同樣,如果外部中斷是低電平可觸發,則要求必須在相應的引腳維持低電平至少2個系統時鐘,這樣才能確保CPU能夠檢測到該低電平信號。
個人感覺就是低電平中斷更慢一些。
這樣我們就可以在中斷函數中寫相應的控制邏輯。
void exint0() interrupt0{
//控制邏輯
}
ps:中斷十分好用!!!
審核編輯:湯梓紅
-
單片機
+關注
關注
6040文章
44592瀏覽量
636902 -
cpu
+關注
關注
68文章
10889瀏覽量
212392 -
中斷
+關注
關注
5文章
900瀏覽量
41591
發布評論請先 登錄
相關推薦
評論