1. 程式人生 > >PIC微控制器入門_中斷系統詳解

PIC微控制器入門_中斷系統詳解

1.中斷的基本概念

當微控制器正在執行程式時,出現了某些特殊狀況,例如定時時間到、有鍵盤訊號輸入等,此時CPU須要暫時停止當前的程式,而轉去執行處理這些事件的程式,待執行完這些特定的程式之後,再返回到原先的程式去執行,這就形成了一次“中斷”。“中斷”加強了微控制器處理突發事件的能力,如果沒有中斷功能,對可能發生的特殊狀況的處理就必須採用定時查詢,這樣就會浪費大量的CPU時間。
因此,中斷是微控制器中很重要的一個概念,是提高工作效率的重要功能,中斷系統功能的好壞是衡量微控制器功能的重要指標。微控制器的“中斷源”與微控制器包含的外圍裝置有很大的關係,所謂“中斷源”就是引起中斷的原因或根源,就是中斷請求的來源。16F873/876內部集成了12個外圍裝置。
外圍裝置在工作過程中,都需要CPU參與控制、協調或交換資料等服務,而CPU正是通過中斷技術使得這些外圍裝置協調工作的。PIC微控制器作一次中斷處理的過程如下,當某一中斷源發出中斷請求時:
①假如CPU正在執行更重要的任務,則可採用遮蔽的方法暫時不響應該中斷請求
②如果可以響應該中斷請求,則CPU執行完當前指令後,必須把斷點處的程式計數器PC的值(即下一條指令的地址)壓入堆疊儲存起來(斷點保護),也可以把一些的重要暫存器內容也保護起來(現場保護)。然後再轉移到相應的中斷服務子程式中執行。
③在中斷服務子程式中,首先必須確定發出中斷請求的中斷源,然後再跳轉到與該中斷源相對應的程式分支中去執行中斷服務程式。
④當中斷服務程式執行畢後,必須先恢復被保護的暫存器的值(現場恢復),再將程式計數器PC的值從堆疊中恢復(斷點恢復) ,使CPU返回斷點處繼續執行被中斷的程式。

2.PIC16F876的中斷源

PIC16F876微控制器具備的中斷源如下表所示:

從上表可看出,各中斷源基本上都與各個外圍裝置模組相對應的:多數的外圍裝置對應著一箇中斷源(如定時/計數器TMR0),也有的外圍裝置對應二箇中斷源(如SCI同步/非同步接收/傳送器USART);有的外圍裝置沒有中斷源與之對應(如輸入/輸出埠 RA和RC);也有的中斷源沒有外圍裝置與之對應(例如外部中斷源INT)。
每一種中斷源對應了一箇中斷標誌位,記為XXXF,以及一箇中斷遮蔽位或叫中斷使能位,記為XXXE。中斷源產生的中斷訊號能否到達CPU,都受控於相應的中斷遮蔽位 每個中斷源申請中斷時,其中斷標誌位會自動置位,中斷標誌位的清0是由使用者程式完成的;而每個中斷遮蔽位的置位和清位均由使用者程式完成。

PIC16F876微控制器的中斷系統的邏輯電路如圖

圖中全部的的14箇中斷源按兩個梯隊並列排開,第一梯隊中只安排了3箇中斷源,其餘的中斷源全部安排到第二梯隊中。所有的中斷源都受“全域性中斷遮蔽位”(也稱總遮蔽位)GIE的控制第一梯隊的中斷源不僅受GIE的控制,還要受各自中斷遮蔽位的控制第二梯隊的中斷源不僅受到GIE和各自中斷遮蔽位的控制,還要受到一個外設中斷遮蔽位PEIE的控制

3.與中斷相關的暫存器

與中斷有關的特殊功能暫存器SFR共有6個,分別是:
選項暫存器OPTION_REG中斷控制暫存器INTCON第一外圍裝置中斷標誌暫存器PIR1第一外圍裝置中斷遮蔽暫存器PIE1(也稱中斷使能暫存器)第二外圍裝置中斷標誌暫存器PIR2第二外圍裝置中斷遮蔽暫存器PIE2
後5個SFR,共有40位,但僅使用了30位來控制中斷,分別與圖中的中斷邏輯電路輸入訊號成嚴格的對應關係。

3.1 選項暫存器OPTION _REG


該暫存器包含了與定時/計數器TMR0、分頻器和埠RB有關的控制位。RB埠引腳RB0和外部中斷INT複用一腳,與該腳有關的一個控制位含義如下:
INTEDG:外部中斷INT觸發訊號邊沿選擇位:1=選擇RB0/INT上升沿觸發;0=選擇RB0/INT下降沿觸發。

3.2 中斷控制暫存器INTCON


它將第一梯隊中的3箇中斷源的標誌位和遮蔽位,以及PEIE和GIE包含在其中:
RBIF:埠RB的引腳RB4~RB7電平變化中斷標誌位。1=RB4~RB7已經發生了電平變化;0=RB4~RB7尚未發生電平變化。 RBIE:埠RB的引腳RB4~RB7電平變化中斷遮蔽位。1=允許RB產生的中斷;0=遮蔽埠RB產生的中斷。
INTF:外部INT引腳中斷標誌位。1=外部INT引腳有中斷觸發訊號; 0=外部INT引腳無中斷觸發訊號。
INTE:外部INT引腳中斷遮蔽位。 l=允許外部INT引腳產生的中斷;0=遮蔽外部INT引腳產生的中斷。
T0IF:TMR0溢位中斷標誌位。1=TMR0已經發生了溢位;0=TMR0尚未發生溢位。
T0IE:TMR0溢位中斷遮蔽位。1=允許TMR0溢位後產生的中斷; 0=遮蔽TMR0溢位後產生的中斷。
PEIE:外設中斷遮蔽位。1=允許CPU響應來自第二梯隊中斷請求0=禁止CPU響應來自第二梯隊中斷請求。 
GIE:全域性中斷遮蔽位(總遮蔽位)。1=允許CPU響應所有中斷源產生的中斷請求;0=禁止CPU響應所有中斷源產生的中斷請求。 

3.3 第一外圍裝置中斷標誌暫存器PIR1


該暫存器中各中斷標誌位的含義如下:
TMR1IF:定時/計數器TMR1模組溢位中斷標誌位。1=發生了TMR1溢位; 0=未發生TMR1溢位。
TMR2IF:定時/計數器TMR2模組溢位中斷標誌位。1=發生了TMR2溢位; 0=未發生TMR2溢位。
CCP1IF:輸入捕捉/輸出比較/脈寬調製CCP1模組中斷標誌位。 輸入捕捉模式下:1=發生了捕捉中斷請求;0=未發生捕捉中斷請求。
輸出比較模式下1=發生了比較輸出中斷請求;0=未發生比較輸出中斷請求。脈寬調製模式下: 無用。 SSPIF同步串列埠(SSP)中斷標誌位。1=傳送/接收完畢產生的中斷請求;0=等待發送/接收。
TXIF序列通訊介面(SCI)傳送中斷標誌位。1=傳送完成,即傳送緩衝區空 0=正在傳送,即傳送緩衝區未空。
RCIF序列通訊介面(SCI)接收中斷標誌位。1=接收完成,即接收緩衝區滿0=正在接收,即接收緩衝區空。
ADIF模擬/數字(A/D)轉換中斷標誌位。1=發生了A/D轉換中斷;0=未發生A/D轉換中斷。
PSPIF:並行埠中斷標誌位,只有40腳封裝型號具備,對於28腳封裝型號總保持0。1=並行埠發生了讀/寫中斷請求;0=並行埠未發生讀/寫中斷請求。

3.4 第一外圍裝置中斷遮蔽暫存器PIE1


該暫存器中包含的中斷遮蔽位(使能位)的含義如下:
TMR1IE:定時器/計數器TMRl模組溢位中斷遮蔽位。l=開放TMRl溢位發生中斷;0=遮蔽TMRl溢位發生中斷。
TMR2IE:定時/計數器TMR2溢位中斷遮蔽位。1=開放TMR2溢位發生的中斷;0=遮蔽TMR2溢位發生的中斷。
CCP1IE:輸入捕捉/輸出比較/脈寬調製CCP1模組中斷遮蔽位。1=開放CCP1模組產生的中斷請求;0=遮蔽CCP1模組產生的中斷請求。 
SSPIE同步串列埠(SSP)中斷遮蔽位。1=開放SSP模組產生的中斷請求0=遮蔽SSP模組產生的中斷請求。
TXIE序列通訊介面(SCI)傳送中斷遮蔽位。1=開放SCI傳送中斷請求;0=遮蔽SCI傳送中斷請求。
RCIE序列通訊介面(SCI)接收中斷遮蔽位。1=開放SCI接收中斷請求;0=遮蔽SCI接收中斷請求。
ADIE模擬/數字(A/D)轉換中斷遮蔽位。1=開放A/D轉換器的中斷請求;0=遮蔽A/D轉換器的中斷請求。 
PSPIE:並行埠中斷遮蔽位,只有40腳封裝型號具備,對於28腳封裝型號總保持0。
1=開放並行埠讀/寫發生的中斷請求;0=遮蔽並行埠讀/寫發生的中斷請求。

3.5 第二外圍裝置中斷標誌暫存器PIR2


CCP2IF:輸入捕捉/輸出比較/脈寬調製CCP2模組中斷標誌位。輸入捕捉模式下:1=發生了捕捉中斷請求(必須用軟體清0);0=未發生捕捉中斷請求。輸出比較模式下:1=發生了比較輸出中斷請求(必須用軟體清0);0=未發生比較輸出中斷請求。脈寬調製模式下:無用 BCLIF:I2C匯流排衝突中斷標誌。當同步串列埠MSSP被配置成I2C匯流排的主控器模式時:1=發生了匯流排衝突;0=未發生匯流排衝突。
EEIF:EEPROM寫操作中斷標誌位。1=寫操作已經完成(必須用軟體清0);0=寫操作未完成或尚未開始進行。 

3.6 第二外圍裝置中斷遮蔽暫存器PIE2


CCP2IE:輸入捕捉/輸出比較/脈寬調製CCP2模組中斷遮蔽位。1=開放CCP2模組產生的中斷請求;
0=遮蔽CCP2模組產生的中斷請求。
EEIE:EEPROM寫操作中斷遮蔽位。1=開放EEPROM寫操作產生的中斷請求;0=遮蔽EEPROM寫操作產生的中斷請求。

4.中斷的處理

微控制器復位後,硬體會自動設定GIE=0,遮蔽所有的中斷源,假如要求微控制器能響應所有中斷,必須設定GIE=1。其實無論GIE或著其他中斷遮蔽位是否為1,當某中斷源的中斷條件滿足時,都會發出中斷請求,即相應的中斷標誌位都會置1。但是否能夠得到CPU的響應,則由該中斷源的中斷遮蔽位決定。
CPU響應中斷後,自動設定GIE=0,遮蔽所有中斷,以免發生重複中斷響應,然後自動把PC暫存器當前值壓入堆疊,並把PC值賦予地址0004H,從而轉向執行中斷服務子程式。 
進入中斷服務程式後,程式必須要確定發出請求的中斷源,這可以通過檢查各中斷源的標誌位來實現。確定了中斷源後,就用軟體把該中斷源的標誌位清0,否則,執行中斷返回指令重開中斷後,假如中斷標誌位仍然為1,則會引起CPU重複響應同一個中斷請求。
執行中斷返回指令RETFIE後,不僅會將保留在堆疊中的斷點地址彈回到PC暫存器中,使程式能返回到被中斷的程式處;而且還會自動設定GIE=1,重新開放所有的中斷源。

5.關於中斷部分的總結

⑴微控制器在任何情況下的復位,均會導致總遮蔽位和其他的中斷遮蔽位清0,即在預設狀態下,禁止CPU響應所有中斷。
⑵中斷標誌位的狀態與該所有的中斷遮蔽位無關,即不管是否允許CPU響應中斷源的中斷請求,只要滿足了中斷的條件,中斷標誌位就會被置成1。
⑶當系統開放某一中斷源時,中斷源就通過中斷標誌位向CPU申請中斷,只要將中斷標誌位置1,就會產生中斷響應。
⑷當CPU響應任一個中斷後,全域性中斷遮蔽位GIE將會自動清0;當中斷返回時它又會自動恢復為1。 
(5)如果在中斷服務期間若用軟體將自動清0的GIE重新置1,這時若再出現中斷請求,就會形成中斷的巢狀:即在響應某一中斷期間又響應了其他中斷。不過巢狀的級數不能超過堆疊的深度(8級),以免造成堆疊溢位。 ⑹如果同時發生多箇中斷請求,到底哪個中斷會優先得到處理,完全取決於在中斷服務子程式中檢查中斷源的順序,原因是各個中斷源之間不存在優先級別之分。 
⑺每一種中斷源受遮蔽的次數不完全相同,第一梯隊的中斷源受到二次遮蔽,而第二梯隊的中斷源受到三次遮蔽。
⑻ PIC系列微控制器的型號不同,資料儲存器RAM的佈局不完全相同,為工作暫存器W安排備份暫存器W_TEMP的方法也就不完全相同。