在開始寫中斷函式之前,我們來一起回顧一下,微控制器的中斷系統。
中斷的意思(學習過微機原理與接**術的同學,沒學過微控制器,也應該知道),我們在這裡就不講了,首先來回憶下中斷系統涉及到哪些問題。
(1)中斷源:中斷請求訊號的**。(8051有3個內部中斷源t0,t1,序列口,2個外部中斷源int0,int1(這兩個低電平有效,上面的那個橫槓不知道怎麼加上去))
(2)中斷響應與返回:cpu採集到中斷請求訊號,怎樣轉向特定的中斷服務子程式,並在執行完之後返回被中斷程式繼續執行。期間涉及到cpu響應中斷的條件,現場保護,現場恢復。
(3)優先順序控制:中斷優先順序的控制就形成了中斷巢狀(8051允許有兩級的中斷巢狀,優先權順序為int0,t0,int1,t1,序列口),同乙個優先順序的中斷,還存在優先權的高低。優先順序是可以程式設計的,而優先權是固定的。
80c51的原則是①同優先順序,先響應高優先權②低優先順序能被高優先順序中斷③正在進行的中斷不能被同一級的中斷請求或低優先順序的中斷請求中斷。
80c51的中斷系統涉及到的中斷控制有中斷請求,中斷允許,中斷優先順序控制
(1)3個內部中斷源t0,t1,序列口,2個外部中斷源int0,int1
(2)中斷控制暫存器:定時和外中斷控制暫存器tcon(包括t0、t1,int0、int1),序列控制暫存器scon,中斷允許暫存器ie,中斷優先順序暫存器ip
具體的是什麼,包括哪些標誌位,在這裡不講了,所有書上面都會講。
在這裡我們講下注意的事項
(1)cpu響應中斷後,tf0(t0中斷標誌位)和tf1由硬體自動清0。
(2)cpu響應中斷後,在邊沿觸發方式下,ie0(外部中斷int0請求標誌位)和ie1由硬體自動清零;在電平觸發方式下,不能自動清楚ie0和ie1。所以在中斷返回前必須撤出int0和int1引腳的低電平,否則就會出現一次中斷被cpu多次響應。
(3)串列埠中斷中,cpu響應中斷後,ti(序列口傳送中斷請求標誌位)和ri(接收中斷請求標誌位)必須由軟體清零。
(4)微控制器復位後,tcon,scon給位清零。
c51語言允許使用者自己寫中斷服務子程式(中斷函式)
首先來了解程式的格式:
void 函式名() interrupt m [using n]
{}關鍵字 interrupt m [using n] 表示這是乙個中斷函式
m為中斷源的編號,有五個中斷源,取值為0,1,2,3,4,中斷編號會告訴編譯器中斷程式的入口位址,執行該程式時,這個位址會傳個程式計數器pc,於是cpu開始從這裡一條一條的執行程式指令。
n為微控制器工作暫存器組(又稱通用暫存器組)編號,共四組,取值為0,1,2,3
中斷號 中斷源
0 外部中斷0
1 定時器0
2 外部中斷1
3 定時器1中斷
4 序列口中斷
int0:0003h 0
t0: 000bh 1
int1:0013h 2
t1: 001bh 3
串列埠: 0023h 4
中斷向量(中斷入口位址)= 中斷號x8 +3
前面m意思很清楚,不同的m值表示這個函式是針對不同的中斷源,比如m為1是表示它是定時器0的中斷函式,
如void time0() interrupt 1{}
那麼後面的using n 又是什麼意思呢?在正在執行乙個特定任務時,有更緊急的事情需要cpu來處理,涉及到中斷優先權。高優先權中斷低優先權正在處理的程式,所以最好給每個優先程式分配不同的暫存器組。
cpu正在處理某個事件,突然另外乙個事件需要處理,於是進入中斷後,而你不想將現在執行的程式的各暫存器狀態入棧,那麼可以把這個中斷程式放入另乙個暫存器組,如切換到1組,然後退出中斷時,再切回到0組(原來的程式在0組)。
為了更好的了解這裡意思,你可以看看工作暫存器組的作用是什麼。
下面的注意事項**網路上其他朋友的文章(整理下,重複的去掉了,寫的非常好):
(1)中斷函式不能進行引數傳遞
(2)中斷函式沒有返回值
(3)在任何情況下都不能直接呼叫中斷函式
(4)中斷函式使用浮點運算要儲存浮點暫存器的狀態。
(5)如果在中斷函式中呼叫了其它函式,則被呼叫函式所使用的暫存器必須與中斷函式相同,被調函式最好設定為可重入的。
(6)c51編譯器對中斷函式編譯時會自動在程式開始和結束處加上相應的內容,具體如下:在程式開始處對acc、b、dph、dpl和psw入棧,結束時出棧。中斷函式未加using n修飾符的,開始時還要將r0~r1入棧,結束時出棧。如中斷函式加using n修飾符,則在開始將psw入棧後還要修改psw中的工作暫存器組選擇位。
(7)c51編譯器從絕對位址8m+3處產生乙個中斷向量,其中m為中斷號,也即interrupt後面的數字。該向量包含乙個到中斷函式入口位址的絕對跳轉。
(8)中斷函式最好寫在檔案的尾部,並且禁止使用extern儲存型別說明。防止其它程式呼叫。
(9)在設計中斷時,要注意的是哪些功能應該放在中斷程式中,哪些功能應該放在主程式中。一般來說中斷服務程式應該做最少量的工作,這樣做有很多好處。首先系統對中斷的反應面更寬了,有些系統如果丟失中斷或對中斷反應太慢將產生十分嚴重的後果,這時有充足的時間等待中斷是十分重要的。其次它可使中斷服務程式的結構簡單,不容易出錯。中斷程式中放入的東西越多,他們之間越容易起衝突。簡化中斷服務程式意味著軟體中將有更多的**段,但可把這些都放入主程式中。中斷服務程式的設計對系統的成敗有至關重要的作用,要仔細考慮各中斷之間的關係和每個中斷執行的時間,特別要注意那些對同乙個資料進行操作的isr.
微控制器 C語言函式 中斷函式(中斷服務程式)
在開始寫中斷函式之前,我們來一起回顧一下,微控制器的中斷系統。中斷的意思 學習過微機原理與接 術的同學,沒學過微控制器,也應該知道 我們在這裡就不講了,首先來回憶下中斷系統涉及到哪些問題。1 中斷源 中斷請求訊號的 8051有3個內部中斷源t0,t1,序列口,2個外部中斷源int0,int1 這兩個...
51微控制器 中斷
一 中斷的概念 cpu在處理某一事件a時,發生了另一事件b請求cpu迅速去處理 中斷發生 cpu暫時中斷當前的工作,轉去處理事件b 中斷響應和中斷服務 待cpu將事件b處理完畢後,再回到原來事件a被中斷的地方繼續處理事件a 中斷返回 這一過程稱為中斷 二 中斷源 在51微控制器中有5個中斷源 中斷號...
微控制器中斷原理
微控制器在自主執行的時候一般是在執行乙個死迴圈程式,在沒有外界干擾 輸入訊號 的時候它基本處於乙個封閉狀態。比如乙個電子時鐘,它會按時 分 秒的規律來自主執行並通過輸出裝置 如液晶顯示屏 把時間顯示出來。在不需要對它進行調校的時候它不需要外部干預,自主封閉地執行。如果這個時鐘足夠準確而又不掉電的話,...