《單片機(jī)的中斷系統(tǒng)》由會員分享,可在線閱讀,更多相關(guān)《單片機(jī)的中斷系統(tǒng)(23頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、微機(jī)原理及應(yīng)用 第 4章 MCS-51單片機(jī) 的中斷系統(tǒng) 4.1 中斷的概念 中斷是指在 CPU正在處理某項事務(wù)的時候, 如果外界或內(nèi)部發(fā)生了緊急事件,要求 CPU暫 停正在運行的工作轉(zhuǎn)而去處理這個緊急事件, 待處理完后再回到原來被中斷的地方,繼續(xù)原 來被打斷了的工作的過程。中斷是計算機(jī)中一 個很重要的概念,中斷技術(shù)的引入使計算機(jī)的 發(fā)展和應(yīng)用都大大地推進(jìn)了一步??梢哉f:沒 有中斷技術(shù),就沒有目前計算機(jī)的廣泛應(yīng)用。 中 斷 服 務(wù) 程 序 主 程 序 繼 續(xù) 主 程 序 低 級 中 斷 主 程 序 繼 續(xù) 主 程 序 高 級 中 斷 4.2 8051中斷系統(tǒng)結(jié)構(gòu)及中斷控制 MCS-51系列單片
2、機(jī)有 5個中斷源和 其相應(yīng)的控制寄存器。 1. 中斷源 產(chǎn)生中斷的請求源叫中斷源 。 MCS-51系列單片機(jī)的 5個中斷源 , 包括 2 個外部中斷源 和 3個內(nèi)部中斷源 。 MCS-51系列單片機(jī)能提供 兩個中斷優(yōu)先 級 , 實現(xiàn) 兩級中斷嵌套 。 振蕩器和時序 OSC 程序存儲器 4KB ROM 數(shù)據(jù)存儲器 4KB RAM 64KB總線 擴(kuò)展控制器 可編程 I/O 可編程全雙工 串行口 8051 CPU 2 16位 定時器 /計數(shù)器 外時鐘源 內(nèi)中斷 外中斷 控制 并行口 串行通信 外部事件計數(shù) 1 MCS-51單片機(jī)總體構(gòu)框圖 2個外部中斷源 是 外部中斷 0和外部中斷 1,相應(yīng)的中斷請
3、求信 號輸入端是 INT0和 INT1。 3個內(nèi)部中斷源 是 定時器 /計數(shù)器 0溢出中 斷, 定時器 /計數(shù)器 1溢 出中斷,串行口的發(fā) 送和接收中斷 (TI和 RI)。 外部中斷請求有兩種觸發(fā)方式: 電 平觸發(fā) 和 邊沿觸發(fā) 。 電平觸發(fā) 邊沿觸發(fā) 高 低 2. TCON寄存器 TCON是定時器 /計數(shù)器 0和 1( T0、 T1) 的控制寄存器 , 同時也用來 鎖存 T0、 T1的 溢出中斷申請標(biāo)志 和 外部中斷請求 標(biāo)志 。 TCON (88H) D7 D6 D5 D4 D3 D2 D1 D0 TF1 TF0 IE1 IT1 IE0 IT0 定時器 /計數(shù)器 1 定時器 /計數(shù)器 0
4、溢出中斷請求標(biāo) 志 ,由硬件置位。 INT1、 INT0 請求標(biāo)志, 由硬件置位。 INT1、 INT0觸發(fā)方式控制位, 由軟件置位或復(fù)位。 IT1=0時, INT1為電平觸發(fā), IT1=1為邊 沿觸發(fā); IT0同理 (對應(yīng) INT0)。 3. SCON寄存器 SCON為串行口控制寄存器 , 其中的 低 2位用作 串行口中斷請求 標(biāo)志 。 4 . 在 MCS-51單片機(jī)中斷系統(tǒng)中,中斷的 允 許 或 禁止 是由片內(nèi)的中斷允許寄存器 IE控制 的。 IE (A8H) D7 D6 D5 D4 D3 D2 D1 D0 EA ES ET1 EX1 ET0 EX0 CPU中斷允許標(biāo)志位。 EA=0時,關(guān)
5、中斷; EA=1時,開中斷。 串口 中斷允許標(biāo)志位。 EA=0時,關(guān)串口中斷; EA=1時,開串口中斷。 T1、 T0溢出中斷 允許標(biāo)志位。 ET1=0時,關(guān) T1中斷; ET1=1時,開 T1中斷。 ET0同理 (對應(yīng) T0)。 外部 中斷允許標(biāo)志位。 EX1=0時,關(guān) INT1中斷; EX1=1時,開 INT1中斷。 EX0同理 (對應(yīng) INT0)。 例:假設(shè)允許片內(nèi)定時器 /計數(shù)器中斷,禁 止其他中斷,設(shè)置相應(yīng)的 IE值。 MOV IE, #8AH 或 SETB ET0 SETB ET1 SETB EA 5 . MCS-51系列單片機(jī)的 中斷優(yōu)先級控制 是由 中斷優(yōu)先級寄存器 IP控制的
6、。 IP (B8H) D7 D6 D5 D4 D3 D2 D1 D0 PS PT1 PX1 PT0 PX0 串口中斷 T1中斷 外部中斷 1 T0中斷 外部中斷 0 優(yōu)先級可以用軟件進(jìn)行設(shè)置,單片機(jī)復(fù)位 后, IP中的各位均被清 0。 例:設(shè) 8031的片外中斷為高優(yōu)先級,片內(nèi) 中斷為低優(yōu)先級,設(shè)置 IP相應(yīng)的值。 MOV IP, #05H 或 SETB PX0 SETB PX1 CLR PS CLR PT0 CLR PT1 MCS-51單片機(jī)中斷系統(tǒng)應(yīng)遵循的原則: 1、低優(yōu)先級中斷可被高優(yōu)先級中斷請求所中斷,反之 則不能。 2、同級的中斷請求不能打斷已經(jīng)執(zhí)行的同級中斷。 中斷源 自然優(yōu)先級
7、外部中斷 0 最高 定時器 /計數(shù)器 0 外部中斷 1 定時器 /計數(shù)器 1 串行口 最低 中斷響應(yīng)條件: 必須要有中斷請求 中斷源的中斷允許位為 1(即 IE中的總允許位 EA 1,且 IE相應(yīng)的中斷允許位為 1) 無同級或高級中斷正在服務(wù) 現(xiàn)行指令執(zhí)行完最后一個機(jī)器周期。 4.3 中斷響應(yīng)過程 CPU在每個機(jī)器周期的 S5P2時刻采樣 各中斷源的中斷請求信號 , 并將它鎖存 在 TCON或 SCON中的相應(yīng)位 。 在下一個 機(jī)器周期對采樣到的中斷請求標(biāo)志進(jìn)行 查詢 。 如果查詢到中斷請求標(biāo)志 , 則按 優(yōu)先級高低進(jìn)行中斷處理 , 中斷系統(tǒng)將 通過硬件自動將相應(yīng)的中斷矢量地址裝 入 PC,
8、以便進(jìn)入相應(yīng)的中斷服務(wù)程序 。 4.4 中斷響應(yīng)時間 在不同的情況下 CPU響應(yīng)中斷的時間是不同 的 。 以外部中斷為例 , INT0和 INT1引腳的電平在 每個機(jī)器周期的 S5P2時刻經(jīng)反相鎖存到 TCON 的 IE0和 IE1標(biāo)志位 , CPU在下一個機(jī)器周期才 會查詢到新置入的 IE0和 IE1, 如果滿足響應(yīng)條 件 , CPU響應(yīng)中斷時要用兩個機(jī)器周期執(zhí)行一 條硬件長調(diào)用指令 “ LCALL”, 由硬件完成將中 斷矢量地址裝入程序指針 PC中 , 使程序轉(zhuǎn)入中 斷矢量入口 。 因此 , 從產(chǎn)生外部中斷到開始執(zhí) 行中斷程序至少需要三個完整的機(jī)器周期 。 4.5 中斷響應(yīng)后中斷請求的撤除
9、 中斷源提出中斷申請 , 在 CPU響應(yīng)此中斷請 求后 , 該中斷源之中斷請求在中斷返回之前應(yīng) 當(dāng)撤除 , 以免引起重復(fù)中斷 , 被再次響應(yīng) 。 對于 邊沿觸發(fā)的外部中斷 , CPU在響應(yīng)中斷 后由 硬件自動清除 相應(yīng)的中斷請求標(biāo)志 IE0和 IE1。 對于 電平觸發(fā)的外部中斷 , 必須 外加硬件 來 撤銷中斷請求 。 對于 定時器溢出中斷 , CPU在響應(yīng)中斷后就 由 硬件消除 了相應(yīng)的中斷請求標(biāo)志 TF0、 TF1。 對于 串行口中斷 , CPU在響應(yīng)中斷后并不自 動清除中斷請求標(biāo)志 RI或 TI, 因此必須在 中斷 服務(wù)程序中 用 軟件 來 清除 。 中斷系統(tǒng)應(yīng)用舉例: 外部中斷源的擴(kuò)展
10、 INT0 裝置 1 裝置 2 裝置 3 裝置 4 8051 P1.4 P1.5 P1.6 P1.7 ORG 0003H LJMP INT0 INT0: PUSH PSW PUSH ACC JB P1.7, DV1 JB P1.6, DV2 JB P1.5, DV3 JB P1.4, DV4 GB: POP ACC POP PSW RETI DV1: AJMP GB DV2: AJMP GB DV3: AJMP GB DV4: AJMP GB 設(shè)計一個程序,能夠?qū)崟r顯示 INT0引腳上出現(xiàn)的負(fù)跳變信 號的累計數(shù)。 主程序: ORG 0000H AJMP MAIN ORG 0003H AJMP
11、IP0 ORG 0030H MAIN: MOV SP, #60H SETB IT0 SETB EA SETB EX0 MOV R7, #00H LP: ACALL DISP AJMP LP 中斷服務(wù)子程序: IP0: INC R7 RETI 中斷程序舉例: 例: X1、 X2、 X3為 3個 故障輸入,當(dāng)系統(tǒng) 無 故障 時,它們?nèi)珵?低 電平, 3個燈不亮;當(dāng) 某部分出現(xiàn) 故障 時, 其對應(yīng)的輸入端由低 電平變?yōu)?高 電平,從 而引起單片機(jī)中斷, 并點亮對應(yīng)的發(fā)光二 極管。 主程序: ORG 0000H AJMP MAIN ORG 0003H AJMP SERVE MAIN: ORL P1, #0FFH ; P1口設(shè)初值,燈全滅 SETB IT0 ;選擇邊沿觸發(fā)方式 SETB EX0 ;允許 INT0中斷 SETB EA ;開 CPU中斷 SJMP $ ;等待中斷 中斷服務(wù)子程序: SERVE: JNB P1.0, L1 ;若 X1無故障 (P1.0=0),跳到 L1 CLR P1.3 ;點亮 LED1 L1: JNB P1.1, L2 ;若 X2無故障,跳到 L2 CLR P1.4 ;點亮 LED2 L2: JNB P1.2, L3 ;若 X3無故障,跳到 L3 CLR P1.5 ;點亮 LED3 L3: RETI