4.2 中斷
4.2.1 中斷介紹
中斷系統是為使CPU具有對外界緊急事件的實時處理能力而設置的。
當中央處理機CPU正在處理某件事的時候外界發生了緊急事件請求,要求CPU暫停當前的工作,轉而去處理這個緊急事件,處理完完后,再回到原來被中斷的地方,繼續原來的工作,這樣的過程稱為中斷,實現這種功的部件稱為中斷系統,請示CPU中斷的請求源稱為中斷源。
微型機的中斷系統一般允許多個中斷源,當幾個中斷源同時向CPU請求中斷,要求為它服務的時候,這就存在CPU優先響應哪一個中斷源請求的問題。通常根據中斷源的輕重緩急排隊,優先處理最緊急事件的中斷請求源,即規定每一個中斷源有一個優先級別,CPU總是先響應優先級別最高的中斷請求。
當CPU正在處理一個中斷源請求的時候(執行相應的中斷服務程序),發生了另外一個優先級比它還高的中斷源請求;如果CPU能夠暫停對原來中斷源的服務程序,轉而去處理優先級更高的中斷請求源,處理完以后再回到原來低級中斷服務程序,這樣的過程稱為中斷嵌套。這樣的中斷系統稱為多級中斷系統,沒有中斷嵌套功能的中斷系統稱為單級中斷系統。
4.2.2 STC90C51RD系統中斷源介紹
STC90C51RC/RD+系列單片機提供了8個中斷請求源,它們分別是:外部中斷0(INT0)、定時器0中斷、外部中斷1(INT1)、定時器1中斷、定時器2中斷、串口(UART)中斷、外部中斷2(INT2)、外部中斷3(INT3)。
所有的中斷都具有4個中斷優先級,用戶可以用關總中斷允許位(EA/IE.7)或相應中斷的允許位,屏蔽所有的中斷請求,也可以打開相應的中斷允許位使CPU響應相應的中斷申請;每一個中斷源可以用軟件獨立地控制開中斷或關中斷狀態;每一個中斷的優先級別均可用軟件設置。高優先級的中斷請求可以打斷低優先級的中斷,反之,低優先級的中斷請求不可以打斷高優先級及同優先級的中斷。當兩個相同優先級的中斷同時產生時,將由查詢次序來決定系統先響應哪個中斷。
4.2.3 中斷的優先級與中斷結構圖
圖4-2-1 中斷優先級表
通過設置新增加的特殊功能寄存器IPH中的相應位,可將中斷優先級設為四級,如果設置IP或XICON,那么中斷優先級就只有兩級,與傳統8051單片機兩級中斷優先級完全兼容。
圖4-2-2 中斷結構圖
圖4-2-3 中斷相關寄存器
4.2.4 中斷服務函數
中斷服務函數的名字只要符合C語言標識符的命名規則,可以隨意取,需要注意的地方是: 中斷服務函數沒有返回值,沒有形參,也不需要單獨去聲明,并且函數名稱體的右邊需要使用interrupt關鍵字聲明,interrupt是中斷特有的關鍵字,在interrupt關鍵字后面可以增加數字,這個數字是根據中斷優先級編號來的(可以看4.2.3小節的中斷優先級表)。
使用C語言編程,中斷查詢次序號就是中斷號,C51所有的中斷服務函數編寫如下:
(硬件平臺說明:CPU是STC90C516RD 、晶振頻率12MHZ 、工作在12T模式下、一個機器周期為1us時間)
void EXTI0_IRQHandler(void) interrupt 0 //外部中斷0{ /*code block*/}void TIM0_IRQHandler(void) interrupt 1 //定時器0{ /*code block*/}void EXTI1_IRQHandler(void) interrupt 2 //外部中斷1{ /*code block*/}void TIM1_IRQHandler(void) interrupt 3 //定時器1{ /*code block*/}void UART_IRQHandler(void) interrupt 4 //串口{ /*code block*/}void TIM2_IRQHandler(void) interrupt 5 //定時器2{ /*code block*/}void EXTI2_IRQHandler(void) interrupt 6 //外部中斷2{ /*code block*/}void EXTI3_IRQHandler(void) interrupt 7 //外部中斷3{ /*code block*/}
4.2.5 中斷控制寄存器介紹
51單片機CPU對中斷源的開放或者屏蔽,每一個中斷源是否被允許中斷,是由內部的中斷允許寄存器IE(地址為A8H)和XICON(地址為C0H)控制的,寄存器IE的格式如下:
圖4-2-4
EA : CPU的總中斷允許控制位, EA=1,CPU開放中斷, EA=0, CPU屏蔽所有的中斷申請。EA的作用是使中斷允許形成兩級控制。即各中斷源首先受EA控制;其次還受各中斷源自己的中斷允許控制位控制。
ET2: 定時/計數器T2的溢出中斷允許位,ET2=1,允許T2中斷; ET2=0,禁止T2中斷。
ES : 串行口1中斷允許位。ES=1,允許串行口1中斷; ES=0,禁止串行口1中斷。
ET1: 定時/計數器T1的溢出中斷允許位。ET1=1,允許T1中斷; ET1=0,禁止T1中斷。
EX1 : 外部中斷1中斷允許位。EX1=1,允許外部中斷1中斷; EX1=0,禁止外部中斷1中斷。
ET0 : T0的溢出中斷允許位。ET0=1,允許T0中斷; ET0=0禁止T0中斷。
EX0 : 外部中斷0中斷允許位。 EX0=1,允許中斷; EX0=0禁止中斷。
4.2.6 配置定時器0使用中斷(8位模式)
下面代碼里配置51單片機的定時器0工作在8位定時器自動重裝載模式,并開啟了溢出中斷,在自動重裝載模式下,每次定時器溢出之后,會自動重裝載,就省去了手動賦重裝值的過程,比較方便,但是定時器的每次最大定時時間變短了,計數器到達255就會溢出。
程序里封裝了計算重裝值的函數,方便調用,程序開啟了溢出中斷,定時器時間到達后會進入到中斷服務函數,中斷服務函數里使用了一個計數變量,用于記錄定時器的超時次數,時間到達500毫秒時,就改變一次LED燈的狀態。
示例代碼:
(硬件平臺說明:CPU是STC90C516RD 、晶振頻率12MHZ 、工作在12T模式下、一個機器周期為1us時間)
#include 4.2.7 配置定時器1使用中斷(16位模式) 下面代碼里配置51單片機的定時器1工作在16位定時器模式。程序封裝了計算重裝值的函數,方便調用,程序里開啟了溢出中斷,在中斷服務函數里使用了一個計數變量,記錄定時器超時的次數,時間到達1秒鐘,就是改變一次LED燈的狀態。 示例代碼: (硬件平臺說明:CPU是STC90C516RD 、晶振頻率12MHZ 、工作在12T模式下、一個機器周期為1us時間) #include 4.2.8 外部中斷(EXTI)配置寄存器介紹 STC90C51有4個外部中斷源,分別是:外部中斷0(P3.2),外部中斷1(P3.3),外部中斷2(P4.3),外部中斷3(P4.2)。 圖4-2-5 外部中斷1和0的IO口 圖4-2-6 外部中斷2和3的IO口 外部中斷0和外部中斷1的相關配置位在TCON寄存器里,TCON寄存器位如下表所示: 圖4-2-7 外部中斷0和1的配置寄存器 IE1:外部中斷1請求源(INT1/P3.3)標志。 當發生外部中斷請求時 ,IE1會被CPU置1,在中斷服務函數里需要將IE1清0。 IT1:外部中斷1源中斷源類型選位。IT1=0,INT1/P3.3引腳上的低電平信號可觸發外部中斷1;IT1=1,外部中斷1為下降沿觸發方式。 IE0:外部中斷0請求源(INT0/P3.2)標志。 當發生外部中斷請求時 ,IE0會被CPU置1,在中斷服務函數里需要將IE0清0。 IT0:外部中斷0中斷源類型選擇位。IT0=0,INT0/P3.2引腳上的低電平可觸發外部中斷0;IT0=1,外部中斷0為下降沿觸發方式。 外部中斷2和外部中斷3的相關配置為在XICON寄存器里,XICON寄存器位如下表所示: 圖4-2-8 外部中斷2和3的配置寄存器 IE3 : 外部中斷3中斷請求標志位,中斷條件成立后,IE3=1,可由硬件自動清零。 IT3 : 當此位由軟件置位時(IT3=1),外部中斷3為下降沿觸發中斷;當此位由軟件清零時(IT3=0),為低電平觸發中斷。 IE2 : 外部中斷2中斷請求標志位,中斷條件成立后,IE2=1,可由硬件自動清零。 IT2 : 當此位由軟件置位時(IT2=1),外部中斷2為下降沿觸發中斷;當此位由軟件清零時(IT2=0),為低電平觸發中斷。 EX3 : 如被設置成1,允許外部中斷3中斷;如被清成0,禁止外部中斷3中斷。 EX2 : 如被設置成1,允許外部中斷2中斷;如被清成0,禁止外部中斷2中斷。 4.2.9 配置外部中斷0下降沿觸發示例 下面代碼配置外部中斷0采用下降沿觸發,在外部中斷0的服務函數里改變LED燈的狀態。 外部中斷0的復用IO是P3.2,在實驗板上實驗時,需要使用杜邦線把按鍵的一個引腳接在P3.2上,可以使用按鍵測試外部中斷0的觸發效果,由于實驗板上的紅外線遙控也是接的P3.2,為了不產生干擾,需要先將紅外線遙控的跳線帽拔掉,再使用按鍵測試。 示例代碼: (硬件平臺說明:CPU是STC90C516RD 、晶振頻率12MHZ 、工作在12T模式下、一個機器周期為1us時間) #include 4.2.10 中斷優先級配置 傳統8051單片機具有兩個中斷優先級,即高優先級和低優先級,可以實現兩級中斷嵌套。 STC90C51RC/RD+系列單片機通過設置新增加的特殊功能寄存器(IPH)中的相應位,可將中斷優先級設置為4個中斷優先級;如果設置IP,那么中斷優先級只有兩級,與傳統8051單片機兩級中斷優先級完全兼容。 一個正在執行的低優先級中斷能被高優先級中斷所中斷,但不能被另一個低優先級中斷所中斷。 上所述可歸納為下面兩條基本規則: 1. 低優先級中斷可被高優先級中斷所中斷,反之不能。 2. 任何一種中斷(不管是高級還是低級),一旦得到響應,不會再被它的同級中斷所中斷 中斷優先級的配置寄存器如下表所示: 圖4-2-10 PX3H,PX3: 外部中斷3優先級控制位: 當PX3H=0且PX3=0時,外部中斷3為最低優先級中斷(優先級0) 當PX3H=0且PX3=1時,外部中斷3為較低優先級中斷(優先級1) 當PX3H=1且PX3=0時,外部中斷3為較高優先級中斷(優先級2) 當PX3H=1且PX3=1時,外部中斷3為最高優先級中斷(優先級3) PX2H, PX2: 外部中斷2優先級控制位: 當PX2H=0且PX2=0時,外部中斷2為最低優先級中斷(優先級0) 當PX2H=0且PX2=1時,外部中斷2為較低優先級中斷(優先級1) 當PX2H=1且PX2=0時,外部中斷2為較高優先級中斷(優先級2) 當PX2H=1且PX2=1時,外部中斷2為最高優先級中斷(優先級3) PT2H, PT2: 定時器2中斷優先級控制位: 當PT2H=0且PT2=0時,定時器2中斷為最低優先級中斷(優先級0) 當PT2H=0且PT2=1時,定時器2中斷為較低優先級中斷(優先級1) 當PT2H=1且PT2=0時,定時器2中斷為較高優先級中斷(優先級2) 當PT2H=1且PT2=1時,定時器2中斷為最高優先級中斷(優先級3) PSH,PS: 串口1中斷優先級控制位: 當PSH=0且PS=0時,串口1中斷為最低優先級中斷(優先級0) 當PSH=0且PS=1時,串口1中斷為較低優先級中斷(優先級1) 當PSH=1且PS=0時,串口1中斷為較高優先級中斷(優先級2) 當PSH=1且PS=1時,串口1中斷為最高優先級中斷(優先級3) PT1H, PT1: 定時器1中斷優先級控制位: 當PT1H=0且PT1=0時,定時器1中斷為最低優先級中斷(優先級0) 當PT1H=0且PT1=1時,定時器1中斷為較低優先級中斷(優先級1) 當PT1H=1且PT1=0時,定時器1中斷為較高優先級中斷(優先級2) 當PT1H=1且PT1=1時,定時器1中斷為最高優先級中斷(優先級3) PX1H, PX1: 外部中斷1優先級控制位: 當PX1H=0且PX1=0時,外部中斷1為最低優先級中斷(優先級0) 當PX1H=0且PX1=1時,外部中斷1為較低優先級中斷(優先級1) 當PX1H=1且PX1=0時,外部中斷1為較高優先級中斷(優先級2) 當PX1H=1且PX1=1時,外部中斷1為最高優先級中斷(優先級3) PT0H, PT0: 定時器0中斷優先級控制位: 當PT0H=0且PT0=0時,定時器0中斷為最低優先級中斷(優先級0) 當PT0H=0且PT0=1時,定時器0中斷為較低優先級中斷(優先級1) 當PT0H=1且PT0=0時,定時器0中斷為較高優先級中斷(優先級2) 當PT0H=1且PT0=1時,定時器0中斷為最高優先級中斷(優先級3) PX0H, PX0: 外部中斷0優先級控制位: 當PX0H=0且PX0=0時,外部中斷0為最低優先級中斷(優先級0) 當PX0H=0且PX0=1時,外部中斷0為較低優先級中斷(優先級1) 當PX0H=1且PX0=0時,外部中斷0為較高優先級中斷(優先級2) 當PX0H=1且PX0=1時,外部中斷0為最高優先級中斷(優先級3) 中斷優先級控制寄存器IP和IPH的各位都由可用戶程序置“1”和清“0” 。但IP寄存器可位操作,所以可用位操作指令或字節操作指令更新IP的內容。而IPH寄存器的內容只能用字節操作指令來更新。 STC90C51RC/RD+系列單片機復位后IP和IPH均為00H,各個中斷源均為低優先級中斷。 4.2.11 配置外部中斷0的優先級示例 下面代碼初始化了外部中斷0和外部中斷1,在外部中斷0 的初始化代碼里,配置外部中斷0的優先級為最高,在外部中斷1的中斷服務函數里寫了一個死循環。 當外部中斷1產生中斷后,會卡死在中斷服務函數里,這時可以觸發外部中斷0 ,測試外部中斷0的中斷服務函數是否可以執行(結果是可以執行的,因為外部中斷0的優先級高于外部中斷1的優先級,可以打斷外部中斷1的服務函數)。 實驗上的測試過程說明: 外部中斷0的復用IO是P3.2, 外部中斷q的復用IO是P3.3,在實驗板上實驗時,需要使用杜邦線把按鍵1的引腳接在P3.2上,把按鍵2的引腳接在P3.3上,這樣可以使用按鍵測試外部中斷的觸發效果,由于實驗板上的紅外線遙控接的是P3.2,為了不產生干擾,需要先將紅外線遙控的跳線帽拔掉,再測試。圖4-2-9
上一篇:【51單片機】考試例程|匯編實現
下一篇:51單片機開發之串口通信
推薦閱讀
史海拾趣
德芯半導體深知人才是企業發展的核心。因此,公司注重人才隊伍的建設,吸引了一批具有豐富經驗和專業知識的資深工程師和管理人員。這些人才不僅為公司帶來了先進的技術和管理經驗,還為公司的發展提供了源源不斷的動力。公司設立技術委員會,布局先進封裝項目,推動公司在高端封裝技術上的突破。
隨著國內市場的逐漸飽和,淩志比高公司開始將目光投向海外市場。公司制定了國際化戰略,積極拓展海外市場,與多家國際知名企業建立了合作關系。通過不斷的市場拓展和品牌推廣,淩志比高逐漸在國際市場上獲得了認可。
隨著公司業務的不斷拓展和市場規模的逐步擴大,西安航天民芯吸引了眾多投資者的關注。多家知名投資機構紛紛入股公司,為公司的發展提供了強大的資本支持。這些資金的注入不僅加速了公司的技術研發和市場拓展步伐,也為公司的持續發展注入了新的活力。
這五個故事展示了西安航天民芯公司在電子行業中的發展歷程和取得的成就。通過不斷地技術創新和市場拓展,西安航天民芯已經逐漸成為了電子行業中的領軍企業之一,為行業的發展做出了積極的貢獻。
隨著技術實力的增強,Dae Ryung Electronic Co Ltd公司開始積極拓展市場。公司制定了國際化戰略,逐步進入國際市場。通過參加國際展會、與海外企業建立合作關系等方式,公司成功打開了海外市場的大門。同時,公司還針對不同地區的市場需求,推出定制化的產品和服務,進一步提升了市場競爭力。
多年來,Caddock公司一直致力于電阻材料技術的研究與創新。通過不斷的努力,公司的電阻器技術逐漸擴展到更低的溫度系數、更高的穩定性、更好的瞬態處理以及更高和更低的電阻率。這些技術進步使得Caddock公司的電阻器和電阻器網絡系列不斷豐富,滿足了市場的多樣化需求。
Captive Fastener公司深知產品質量是企業生存和發展的關鍵。公司建立了嚴格的質量管理體系,從原材料采購到生產加工、產品檢驗等各個環節都進行嚴格把關。此外,公司還定期對員工進行質量意識和技能培訓,確保每一道工序都符合質量標準。這些措施有效提升了公司的產品質量和客戶滿意度。
手冊上說vxWorks兼容由Windows系統格式化的FAT32文件系統,但是為什么我的始終不能識別呢? 我使用的是Tornado2.2, 16G ATA 電子盤在vxWorks下文件系統的初始化和使用都已經沒問題,并且已通過FTP傳輸測試。但是現在要求實現磁盤文件在Windows和vx ...… 查看全部問答∨ |
新手 求助各位大鳥 ...... 去年畢業 該如何發展 廣度和深度 應側重哪一個 ...... RT這個周日去了趟招聘會 ...... 也沒帶簡歷,就和那個我一直想進的企業的招聘人員聊了下 他說 去年畢業 經驗還是欠缺了點 , 我不知道 他們更看重的是 深度 還是 廣度 ,是應該從整個行業入手找到自己最得心應手的那個方向 還是應該專門鉆研 ...… 查看全部問答∨ |
全新 Spartan 3E 入門級開發板 和 Atlys Spartan?-6 FPGA 開發套件 具體資料可以在官網查到..www.digilent.cn/...或者去xilinx 的官網...下面只貼圖,有圖有真相..有意的話可以聯系我.182262214...絕對是全新的產品...不是的話,可以全額退給你...這個是 Spartan®-6 FPGA 開發套件 出售價 2600這個是 Spart ...… 查看全部問答∨ |
|
Code Composer Studio™ v5.1 開發環境下使用MSP430 推薦大家使用CCSv5,如下所示 [ 本帖最后由 hansonhe 于 2012-4-28 16:06 編輯 ]… 查看全部問答∨ |
主機 3706:帶有高性能DMM的六槽系統開關 3706-NFP:帶有高性能DMM的六槽系統開關,不帶前面板顯式和鍵盤 3706-S:六槽系統開關 3706-SNFP:不帶前面板顯式和鍵盤的六槽系統開關 插卡 3720:雙1×30多路復用器插卡(與3721-ST一起 ...… 查看全部問答∨ |
設計資源 培訓 開發板 精華推薦
- 半導體品牌知名度問卷調查
- 上演你的“ADI實驗室電路”DIY!
- 下載有禮|是德科技電子書 《通過了解測試精度的基礎知識, 提高良率并降低風險》,不做“差不多先生”
- 下載《Altera SoC深度體驗》,打分評論贏好禮
- 【已結束】 Qorvo、村田、NI直播【UWB最新技術、方案、市場、應用解析】(13:30開始入場)
- TI 最新CapTIvate™ 觸控微控制器技術直播開始報名嘍!報名參與有禮呦!
- 老T叔的藏書閣——一位老工程師多年的資料積累
- 有獎直播【Keysight World Tech Day 2023分論壇——汽車自動駕駛與新能源】
- #最能打國產芯#能打入汽車電子這片地的國產芯,有多少啦?
- 新年新挑戰:ST藍牙開發板免費申請評測+挑戰賽(littleshrimp帶隊)