中斷可以用下面的例子理解
工程師a在自己的位置做著自己的工作(寫**),工程師b有個問題需要請教工程師a,於是工程師b就會跑過來跟工程a請教。這時工程師a的寫**的工作會被打斷,開始回答工程b的問題,解答完問題後,工程師a又開始愉快的寫**。從工程師b打斷工程師a,到工程師a繼續寫**這者整個過程叫中斷。
1)工程師b的問題,稱為中斷源
2)工程師a停止當前的工作,準備解答稱為:中斷響應;
3)工程師a解答問題的過程稱為:中斷服務程式;
4)工程師a解答完繼續回到寫**的狀態稱為:中斷返回。
中斷系統
引起mcs-51中斷的中斷源有幾種呢?從以下的中斷系統中可以看到有5種中斷請求源,它們分別是ex0、et0、ex1、et1、es 對應著微控制器的p3^0~p3^5引腳,相關的暫存器有中斷允許暫存器ie、中斷優先順序控制暫存器ip、定時器/計數器控制暫存器tcon、序列口控制暫存器scon 。
ie暫存器:
暫存器位址為a8h,微控制器復位後數值為00h;暫存器裡面有8位,可以被位定址
當需要某中斷源需要進入中斷服務,需要開總中斷將ea位置1,並且將對應的中斷源置1(如果是串列埠需要將es置1;如果是外部中斷0需要ex0置1)
ip暫存器
暫存器位址為b8h,微控制器復位後數值為00h;暫存器裡面有8位,可以被位定址
ip暫存器將對應的中斷源置1,則該中斷源被設定為高優先順序。
在中斷系統中,不管高優先中斷等級或者是低優先順序中斷等級,在它們裡面都是按照一定的優先順序進行排列的進行響應的。這種優先順序稱之為自然優先順序。詳細可以參考上面的中斷系統圖
自然優先順序從高到低:外部中斷0->定時器/計數器t0中斷->外部中斷1->定時器/計數器t1中斷->序列中斷。
tcon暫存器
暫存器位址為88h,微控制器復位後數值為00h;暫存器裡面有8位,可以被位定址
外部中斷可以設定兩種中斷方式(低電平或負跳變),當檢測到有中斷(低電平或負跳變),中斷標誌位被置1,從而判斷中斷優先順序,進而中斷服務處理。
定時器/計數器在設定計數值後,開機進行計數。當計數溢位時,會將tf0或者tf1置1。
從上面可以知道,除外部中斷標誌0外,其他的都會由硬件自動清零。
注:
tcon還有t0與tr1兩位,這兩位是控制定時器/計數器開始計數,在後面的定時器中會詳細說明。
tr1:為1是定時器t1開始計數;0時不計數。
tr0:為1是定時器t0開始計數;0時不計數。
scon暫存器
暫存器位址為98h,微控制器復位後數值為00h;暫存器裡面有8位,可以被位定址
在序列通訊中,序列傳送與接收完一幀資料後,硬體將標誌位置1,向cpu申請中斷,cpu響應中斷是,並不能直接標誌位置0,需要中斷服務程式將它們置0。
ti與ri接到es中斷源上,因此它們是同乙個中斷源。
中斷向量
為了響應不同的中斷,將中斷服務函式的入口位址放在某個位址上,我們將這個位址成為中斷向量。
在c51中編譯器中,增加了乙個擴充套件字 interrupt,它是乙個函式的選項,當函式新增上這個選項定義成中斷函式。中斷函式的一般形式如下:
void 函式名() [interrupt n] [using n]
interrupt後面的n為中斷號
using 後面的n為工作暫存器組(8051中有4組暫存器組->0~3組)
總結:
1)c51中有5個中斷源(ex0、et0、ex1、et1、es),兩個優先等級,其中tx與rx共用乙個中斷源es;
2)相關的暫存器有中斷允許暫存器ie、中斷優先順序控制暫存器ip、定時器/計數器控制暫存器tcon、序列口控制暫存器scon 。
3)c51對函式進行擴充套件新增interrput,該關鍵字用於將函式定義成中斷服務函式,對應著中斷向量裡面內容。
如果覺得文章還不錯,那就掃碼關注吧!
C51程式設計15 中斷篇(定時器中斷2)
使用定時器 計數器中斷,需要將滿足以下的條件。1 中斷總允許開啟 ea 1 2 中斷源允許開啟 et0 1或者 et1 1 3 設定定時器計 計數器的工作方式 設定tmod 4 裝載定時器,設定計數器的初始計算值。5 開啟定時器 tcon中的tr0 1或者tr1 1 6 中斷服務函式 在滿足上面的條...
C51 中斷 個人筆記
控制各個中斷源的遮蔽與允許 各個中斷源的請求標誌位 有效訊號的規定 中斷號寫程式的時候要用 1.cpu同時接收到幾個中斷時,首先響應優先級別最高的中斷請求。2.正在進行的中斷過程不能被新的同級或低優先順序的中斷請求所中斷。3.正在進行的低優先順序中斷服務,能被高優先順序中斷請求所中斷。中斷源有中斷請...
89c51中斷系統及中斷控制
現代的計算機都具有實時處理功能,當外界有突發事件時,cpu能夠及時的做出處理,這就是靠中斷來實現的。當cpu正在處理某一命令時,這時外部發生了某一事件 如電平的變化,或者定時器 計數器溢位時 請求cpu去處理該事件,於是cpu停止處理當前的事件,並儲存當前停止時的位址,轉去處理所發生的事件,處理完畢...