中斷及定時(shí)系統(tǒng)課程課件_第1頁(yè)
中斷及定時(shí)系統(tǒng)課程課件_第2頁(yè)
中斷及定時(shí)系統(tǒng)課程課件_第3頁(yè)
中斷及定時(shí)系統(tǒng)課程課件_第4頁(yè)
中斷及定時(shí)系統(tǒng)課程課件_第5頁(yè)
已閱讀5頁(yè),還剩77頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

項(xiàng)目6中斷及定時(shí)系統(tǒng)項(xiàng)目6中斷及定時(shí)系統(tǒng)16.1中斷系統(tǒng)6.1.1中斷的幾個(gè)概念概念1.中斷的定義 對(duì)于CPU來(lái)說(shuō),CPU在處理某一事件A時(shí),發(fā)生了另一事件B請(qǐng)求CPU迅速去處理(中斷發(fā)生);CPU暫時(shí)中斷當(dāng)前的工作,轉(zhuǎn)去處理事件B(中斷響應(yīng)和中斷服務(wù));待CPU將事件B處理完畢后,再回到原來(lái)事件A被中斷的地方繼續(xù)處理事件A(中斷返回),這一過(guò)程稱(chēng)為中斷。 所以我們把可以引起中斷的請(qǐng)求源稱(chēng)之為中斷源。單片機(jī)中也有一些可以引起中斷的事件,8051中一共有5個(gè)中斷源:兩個(gè)外部中斷,兩個(gè)定時(shí)/計(jì)數(shù)器中斷,一個(gè)串行口中斷。2.中斷的嵌套與優(yōu)先級(jí) 8051單片機(jī)5個(gè)中斷源有兩個(gè)優(yōu)先級(jí)項(xiàng)目6中斷及定時(shí)系統(tǒng)6.1中斷系統(tǒng)6.1.1中斷的幾個(gè)概念概念項(xiàng)目6中斷及23.中斷的響應(yīng)過(guò)程 五個(gè)中斷源,每個(gè)中斷產(chǎn)生后都到一個(gè)固定的地方去找處理這個(gè)中斷的程序,在去之前首先要保存下面將執(zhí)行的指令的地址,以便處理完中斷后回到原來(lái)的地方繼續(xù)往下執(zhí)行程序。中斷響應(yīng)過(guò)程可以分為以下幾個(gè)步驟:1)保護(hù)斷點(diǎn),即保存下一將要執(zhí)行的指令的地址,就是把這個(gè)地址送入堆棧;2)尋找中斷入口,根據(jù)5個(gè)不同的中斷源所產(chǎn)生的中斷,查找5個(gè)不同的中斷服務(wù)程序入口地址。在這5個(gè)入口地址處存放有中斷處理程序;3)執(zhí)行中斷處理程序;4)中斷返回:執(zhí)行完中斷處理程序后,就從中斷處返回到主程序,繼續(xù)執(zhí)行主程序。 中斷系統(tǒng)是計(jì)算機(jī)的重要組成部分。中斷系統(tǒng)可以提高CPU的工作效率,還可以提高實(shí)時(shí)數(shù)據(jù)的處理時(shí)效,所以實(shí)時(shí)控制、故障自動(dòng)處理往往采用中斷系統(tǒng),計(jì)算機(jī)與外圍設(shè)備間傳送數(shù)據(jù)及實(shí)現(xiàn)人機(jī)聯(lián)系也常采用中斷方式。項(xiàng)目6中斷及定時(shí)系統(tǒng)3.中斷的響應(yīng)過(guò)程項(xiàng)目6中斷及定時(shí)系統(tǒng)36.1.2中斷系統(tǒng)的結(jié)構(gòu)項(xiàng)目6中斷及定時(shí)系統(tǒng)6.1.2中斷系統(tǒng)的結(jié)構(gòu)項(xiàng)目6中斷及定時(shí)系統(tǒng)46.1.3中斷源和中斷標(biāo)志1.中斷源 MCS-51的5個(gè)中斷源為兩個(gè)外部中斷、兩個(gè)定時(shí)器中斷和一個(gè)串行口中斷。 1)外部中斷請(qǐng)求源:即外中斷0和1,經(jīng)由外部引腳引入的,在單片機(jī)上有兩個(gè)引腳,名稱(chēng)為、,也就是P3.2、P3.3這兩個(gè)引腳。 2)內(nèi)部中斷請(qǐng)求源:兩個(gè)定時(shí)器中斷和串行口中斷。8051內(nèi)部有兩個(gè)16位的定時(shí)/計(jì)數(shù)器,對(duì)內(nèi)部定時(shí)脈沖或者T0/T1引腳上輸入的外部計(jì)數(shù)脈沖計(jì)數(shù),當(dāng)定時(shí)時(shí)間到或計(jì)數(shù)脈沖滿時(shí),自動(dòng)向CPU提出中斷請(qǐng)求。串行口中斷分為串行口發(fā)送中斷和串行口接收中斷兩種,在串行口進(jìn)行發(fā)送/接收數(shù)據(jù)時(shí),每當(dāng)串行口發(fā)送/接收完一組數(shù)據(jù),單片機(jī)自動(dòng)使串行口控制寄存器SCON的RI或TI中斷標(biāo)志置位,并且自動(dòng)向CPU提出串行口中斷請(qǐng)求。項(xiàng)目6中斷及定時(shí)系統(tǒng)6.1.3中斷源和中斷標(biāo)志項(xiàng)目6中斷及定時(shí)系統(tǒng)5

80C51單片機(jī)的中斷系統(tǒng)提供了5個(gè)中斷源,具有2個(gè)中斷優(yōu)先級(jí),可實(shí)現(xiàn)兩級(jí)中斷嵌套。 80C51單片機(jī)的5個(gè)中斷源分別是:2個(gè)外部中斷(由、引腳輸入中斷請(qǐng)求信號(hào))、2個(gè)片內(nèi)定時(shí)器/計(jì)數(shù)器溢出中斷(T0、T1)和1個(gè)片內(nèi)串行口中斷。TCON、SCON是用來(lái)存放各中斷源的中斷申請(qǐng)標(biāo)志的寄存器;IE是用來(lái)設(shè)置是否允許中斷源中斷的寄存器;IP是用來(lái)設(shè)置中斷源優(yōu)先級(jí)別的寄存器;硬件查詢(xún)是相同優(yōu)先級(jí)的中斷源再進(jìn)行排隊(duì)的硬件電路。項(xiàng)目6中斷及定時(shí)系統(tǒng) 80C51單片機(jī)的中斷系統(tǒng)提供了5個(gè)中斷源,具有2個(gè)中斷6(1)定時(shí)器控制寄存器TCON(TimerControlRegister)IE0:外部中斷0請(qǐng)求標(biāo)志位。當(dāng)CPU檢測(cè)到引腳上出現(xiàn)下降沿信號(hào)或低電平信號(hào)時(shí),由內(nèi)部硬件置位IE0(IE0=1),向CPU請(qǐng)求中斷。IE1:外部中斷1請(qǐng)求標(biāo)志位。當(dāng)CPU檢測(cè)到引腳上出現(xiàn)下降沿信號(hào)或低電平信號(hào)時(shí),由內(nèi)部硬件置位IE1(IE1=1),向CPU申請(qǐng)中斷。TF0:定時(shí)器/計(jì)數(shù)器T0的溢出中斷請(qǐng)求標(biāo)志位。當(dāng)T0計(jì)數(shù)溢出時(shí),由內(nèi)部硬件置位TF0(TF0=1),向CPU申請(qǐng)中斷。TF1:定時(shí)器/計(jì)數(shù)器T1的溢出中斷請(qǐng)求標(biāo)志位。當(dāng)T1計(jì)數(shù)溢出時(shí),由內(nèi)部硬件置位TF1(TF1=1),向CPU申請(qǐng)中斷。IT0:外部中斷0觸發(fā)方式控制位。當(dāng)IT0=0時(shí),電平觸發(fā),低電平有效;當(dāng)IT0=1時(shí),邊沿觸發(fā),下降沿有效。IT1:外部中斷1觸發(fā)方式控制位。當(dāng)IT1=0時(shí),電平觸發(fā),低電平有效;當(dāng)IT1=1時(shí),邊沿觸發(fā),下降沿有效。項(xiàng)目6中斷及定時(shí)系統(tǒng)(1)定時(shí)器控制寄存器TCON(TimerControl7(2)串行口控制寄存器SCON(SerialControlRegister)TI:串行口發(fā)送中斷請(qǐng)求標(biāo)志位。當(dāng)串行口發(fā)送完一個(gè)數(shù)據(jù)幀時(shí),將TI置位(TI=1),向CPU申請(qǐng)中斷。RI:串行口接收中斷請(qǐng)求標(biāo)志位。當(dāng)串行口接收完一個(gè)數(shù)據(jù)幀時(shí),將RI置位(RI=1),向CPU申請(qǐng)中斷。項(xiàng)目6中斷及定時(shí)系統(tǒng)(2)串行口控制寄存器SCON(SerialControl86.1.4對(duì)中斷請(qǐng)求的控制1.對(duì)中斷允許的控制 計(jì)算機(jī)中斷系統(tǒng)有兩種不同類(lèi)型的中斷:一類(lèi)稱(chēng)為非屏蔽中斷,另一類(lèi)稱(chēng)為可屏蔽中斷。對(duì)非屏蔽中斷,用戶不能用軟件的方法加以禁止,一旦有中斷申請(qǐng),CPU必須予以響應(yīng)。對(duì)可屏蔽中斷,用戶則可以通過(guò)軟件方法來(lái)控制是否允許某中斷源的中斷,允許中斷稱(chēng)中斷開(kāi)放,不允許中斷稱(chēng)中斷屏蔽。MCS-51系列單片機(jī)的5個(gè)中斷源都是可屏蔽中斷項(xiàng)目6中斷及定時(shí)系統(tǒng)6.1.4對(duì)中斷請(qǐng)求的控制項(xiàng)目6中斷及定時(shí)系統(tǒng)9 EA:中斷允許總控制位。EA=0,中斷總禁止,禁止所有中斷;EA=1,中斷總允許,置1后,各中斷源的中斷允許由各個(gè)控制位進(jìn)行設(shè)置。 EX0、EX1:外部中斷允許控制位。EX0(EX1)=0,表示禁止外中斷INT0(INT1)的中斷申請(qǐng);EX0(EX1)=1,表示允許外中斷INT0(INT1)的中斷申請(qǐng)。 ET0、ET1:定時(shí)/計(jì)數(shù)中斷允許控制位。ET0(ET1)=0,表示禁止定時(shí)/計(jì)數(shù)器0(1)的中斷申請(qǐng);ET0(ET1)=1,表示允許定時(shí)/計(jì)數(shù)器0(1)的中斷申請(qǐng); ES:串行口中斷允許控制位。ES=0,禁止串口中斷;ES=1,允許串口中斷。MCS-51單片機(jī)各個(gè)中斷源均為可屏蔽中斷。 中斷允許寄存器IE的單元地址是A8H,各控制位可以位尋址,也可以字節(jié)尋址。例如可以采用位指令開(kāi)放外部中斷的溢出中斷:SETBEASETBEX0 若改為字節(jié)傳送指令,則僅需采用一條指令:MOVIE,#81H項(xiàng)目6中斷及定時(shí)系統(tǒng) EA:中斷允許總控制位。EA=0,中斷總禁止,禁止所有中10例:設(shè)允許定時(shí)器/計(jì)數(shù)器T1的溢出中斷的中斷請(qǐng)求,禁止其它中斷源的中斷請(qǐng)求,寫(xiě)出設(shè)置IE的指令。分析:根據(jù)設(shè)定條件,則IE寄存器的EA=1,ET1=1,其它位為0,IE的值應(yīng)為10001000B,即88H。用字節(jié)傳送指令可寫(xiě)為:MOVIE,#88H或MOV0A8H,#88H若改用位操作指令,則需兩條指令:SETBET1;允許T1溢出中斷SETBEA;CPU允許所有中斷源中斷項(xiàng)目6中斷及定時(shí)系統(tǒng)例:設(shè)允許定時(shí)器/計(jì)數(shù)器T1的溢出中斷的中斷請(qǐng)求,禁止其它中11(4)中斷優(yōu)先級(jí)寄存器IP(InterruptPriorityRegister)80C51單片機(jī)的5個(gè)中斷源,均可由程序設(shè)置為高優(yōu)先級(jí)中斷或低優(yōu)先級(jí)中斷,誰(shuí)的優(yōu)先級(jí)別高,就先響應(yīng)誰(shuí)。每個(gè)中斷源的中斷優(yōu)先級(jí)都通過(guò)中斷優(yōu)先級(jí)寄存器IP統(tǒng)一設(shè)置。項(xiàng)目6中斷及定時(shí)系統(tǒng)(4)中斷優(yōu)先級(jí)寄存器IP(InterruptPriori12PX0和PX1:PX0是外部中斷0的中斷優(yōu)先級(jí)控制位;PX1是外部中斷1的中斷優(yōu)先級(jí)控制位。PT0和PT1:PT0為定時(shí)器/計(jì)數(shù)器T0的溢出中斷優(yōu)先級(jí)控制位;PT1為定時(shí)器/計(jì)數(shù)器T1的溢出中斷優(yōu)先級(jí)控制位。PS:串行口中斷優(yōu)先級(jí)控制位。注意:當(dāng)某個(gè)中斷源的優(yōu)先級(jí)控制位為1時(shí),設(shè)置為高優(yōu)先級(jí)中斷;為0時(shí),設(shè)置為低優(yōu)先級(jí)中斷。項(xiàng)目6中斷及定時(shí)系統(tǒng)PX0和PX1:PX0是外部中斷0的中斷優(yōu)先級(jí)控制位;項(xiàng)目613 8051單片機(jī)共有5個(gè)中斷源,在單片機(jī)工作過(guò)程中,若出現(xiàn)三個(gè)或者更多的中斷請(qǐng)求源,那么同一優(yōu)先級(jí)別中的中斷源就不止一個(gè),這個(gè)時(shí)候也有中斷優(yōu)先級(jí)排隊(duì)的問(wèn)題,8051單片機(jī)對(duì)此有統(tǒng)一規(guī)定,如表6-1所示。可對(duì)中斷系統(tǒng)的規(guī)定概括為以下兩條基本規(guī)則: 1)低優(yōu)先級(jí)中斷系統(tǒng)的規(guī)定被高級(jí)中斷系統(tǒng)中斷,反之不能; 2)當(dāng)多個(gè)中斷源同時(shí)發(fā)出申請(qǐng)時(shí),級(jí)別高的優(yōu)先級(jí)先服務(wù)(先按高低優(yōu)先級(jí)區(qū)分,再按輔助優(yōu)先級(jí)區(qū)分)。高低中斷源同一級(jí)別的優(yōu)先級(jí)外部中斷0定時(shí)/計(jì)數(shù)器0溢出中斷外部中斷1定時(shí)/計(jì)數(shù)器1溢出中斷串行口中斷表6-18051各個(gè)中斷源中斷優(yōu)先級(jí)順序項(xiàng)目6中斷及定時(shí)系統(tǒng) 8051單片機(jī)共有5個(gè)中斷源,在單片機(jī)工作過(guò)程中,若出現(xiàn)14例:設(shè)80C51單片機(jī)的外部中斷為高優(yōu)先級(jí),內(nèi)部中斷為低優(yōu)先級(jí),寫(xiě)出設(shè)置IP的指令。分析:由給定的條件可知:IP寄存器中,PX1=1,PX0=1,其余位為0,即IP=00000101B=05H。用字節(jié)傳送指令設(shè)置:MOVIP,#05H或MOV0B8H,#05H用位操作指令設(shè)置:SETBPX0SETBPX1CLRPT0CLRPT1CLRPS項(xiàng)目6中斷及定時(shí)系統(tǒng)例:設(shè)80C51單片機(jī)的外部中斷為高優(yōu)先級(jí),內(nèi)部中斷為低優(yōu)156.1.5中斷處理過(guò)程 中斷處理過(guò)程可分為中斷響應(yīng)、中斷處理和中斷返回三個(gè)階段。1.中斷響應(yīng) 中斷響應(yīng)是CPU對(duì)中斷源中斷請(qǐng)求的響應(yīng),包括保護(hù)斷點(diǎn)和將程序轉(zhuǎn)向中斷服務(wù)程序的入口地址(通常稱(chēng)矢量地址)。CPU并非任何時(shí)刻都響應(yīng)中斷請(qǐng)求,而是在中斷響應(yīng)條件滿足之后才會(huì)響應(yīng)。 1)中斷響應(yīng)條件 (1)有中斷源發(fā)出中斷請(qǐng)求。(2)中斷總允許位EA=1。(3)申請(qǐng)中斷的中斷源允許。 滿足以上基本條件,CPU一般會(huì)響應(yīng)中斷,但CPU正在響應(yīng)同級(jí)或高優(yōu)先級(jí)的中斷、正在執(zhí)行RETI中斷返回指令以及訪問(wèn)專(zhuān)用寄存器IE和IP的指令時(shí),CPU不響應(yīng)中斷請(qǐng)求而在下一機(jī)器周期繼續(xù)查詢(xún),否則,CPU在下一機(jī)器周期響應(yīng)中斷。項(xiàng)目6中斷及定時(shí)系統(tǒng)6.1.5中斷處理過(guò)程項(xiàng)目6中斷及定時(shí)系統(tǒng)162)中斷響應(yīng)過(guò)程 中斷響應(yīng)過(guò)程包括保護(hù)斷點(diǎn)和將程序轉(zhuǎn)向中斷服務(wù)程序的入口地址。首先把中斷點(diǎn)的地址(斷點(diǎn)地址)壓入堆棧保護(hù),然后將對(duì)應(yīng)的中斷入口地址裝入程序計(jì)數(shù)器PC(由硬件自動(dòng)執(zhí)行),使程序轉(zhuǎn)向該中斷入口地址,執(zhí)行中斷服務(wù)程序。MCS-51系列單片機(jī)各中斷源的入口地址由硬件事先設(shè)定,分配如表6-2所示。 因?yàn)?個(gè)中斷源的入口地址之間,只相隔8個(gè)存儲(chǔ)單元,一般的中斷服務(wù)程序是容納不下的,使用時(shí)通常在這些中斷入口地址處存放一條絕對(duì)跳轉(zhuǎn)指令,使程序跳轉(zhuǎn)到存儲(chǔ)器其他的任何空間,并且將中斷服務(wù)程序安排在相應(yīng)的空間中。例如,若采用定時(shí)器T0中斷,其中斷入口地址為000BH,中斷服務(wù)程序名為T(mén)IME00,因此,指令形式為:ORG 000BH;T1中斷入口AJMP TIME00;轉(zhuǎn)向中斷服務(wù)程序中斷源入口地址外部中斷00003H定時(shí)/計(jì)數(shù)器0溢出中斷000BH外部中斷10013H定時(shí)/計(jì)數(shù)器1溢出中斷001BH串行口中斷0023H項(xiàng)目6中斷及定時(shí)系統(tǒng)2)中斷響應(yīng)過(guò)程中斷源入口地址外部中斷00003H定時(shí)/計(jì)數(shù)172.中斷處理中斷處理就是執(zhí)行中斷服務(wù)程序。中斷服務(wù)程序從中斷入口地址開(kāi)始執(zhí)行,到返回指令“RETI”為止,一般包括兩部分內(nèi)容,一是保護(hù)現(xiàn)場(chǎng),二是完成中斷源請(qǐng)求的服務(wù)。 通常,主程序和中斷服務(wù)程序都會(huì)用到累加器A、狀態(tài)寄存器PSW及其它一些寄存器,當(dāng)CPU進(jìn)入中斷服務(wù)程序用到上述寄存器時(shí),會(huì)破壞原來(lái)存儲(chǔ)在寄存器中的內(nèi)容,一旦中斷返回,將會(huì)導(dǎo)致主程序的混亂,因此,在進(jìn)入中斷服務(wù)程序后,一般要先保護(hù)現(xiàn)場(chǎng),然后,執(zhí)行中斷處理程序,在中斷返回之前再恢復(fù)現(xiàn)場(chǎng)。例如:TIME00:;中斷服務(wù)程序CLREA;關(guān)中斷PUSHPSW;保護(hù)現(xiàn)場(chǎng)PUSHACCPUSHB........;中斷處理PUSHB;恢復(fù)現(xiàn)場(chǎng)PUSHACCPUSHPSWSETBEA;開(kāi)中斷RETI;中斷返回項(xiàng)目6中斷及定時(shí)系統(tǒng)2.中斷處理項(xiàng)目6中斷及定時(shí)系統(tǒng)18編寫(xiě)中斷服務(wù)程序時(shí)還需注意以下幾點(diǎn): 1)各中斷源的中斷入口地址之間只相隔8個(gè)字節(jié),容納不下普通的中斷服務(wù)程序,因此,在中斷入口地址單元通常存放一條無(wú)條件轉(zhuǎn)移指令,可將中斷服務(wù)程序轉(zhuǎn)至存儲(chǔ)器的其它任何空間。 2)若要在執(zhí)行當(dāng)前中斷程序時(shí)禁止其它更高優(yōu)先級(jí)中斷,需先用軟件關(guān)閉CPU中斷,或用軟件禁止相應(yīng)高優(yōu)先級(jí)的中斷,在中斷返回前再開(kāi)放中斷。 3)在保護(hù)和恢復(fù)現(xiàn)場(chǎng)時(shí),為了不使現(xiàn)場(chǎng)數(shù)據(jù)遭到破壞或造成混亂,一般規(guī)定此時(shí)CPU不再響應(yīng)新的中斷請(qǐng)求。因此,在編寫(xiě)中斷服務(wù)程序時(shí),要注意在保護(hù)現(xiàn)場(chǎng)前關(guān)中斷,在保護(hù)現(xiàn)場(chǎng)后若允許高優(yōu)先級(jí)中斷,則應(yīng)開(kāi)中斷。同樣,在恢復(fù)現(xiàn)場(chǎng)前也應(yīng)先關(guān)中斷,恢復(fù)之后再開(kāi)中斷。項(xiàng)目6中斷及定時(shí)系統(tǒng)編寫(xiě)中斷服務(wù)程序時(shí)還需注意以下幾點(diǎn):項(xiàng)目6中斷及定時(shí)系統(tǒng)193.中斷返回 中斷返回是指中斷服務(wù)完后,計(jì)算機(jī)返回原來(lái)斷開(kāi)的位置(即斷點(diǎn)),繼續(xù)執(zhí)行原來(lái)的程序。中斷返回由中斷返回指令RETI來(lái)實(shí)現(xiàn)。該指令的功能是把斷點(diǎn)地址從堆棧中彈出,送回到程序計(jì)數(shù)器PC,此外,還通知中斷系統(tǒng)已完成中斷處理,并同時(shí)清除優(yōu)先級(jí)狀態(tài)觸發(fā)器。項(xiàng)目6中斷及定時(shí)系統(tǒng)3.中斷返回項(xiàng)目6中斷及定時(shí)系統(tǒng)204.中斷請(qǐng)求的撤除CPU響應(yīng)中斷請(qǐng)求后即進(jìn)入中斷服務(wù)程序,在中斷返回前,應(yīng)撤除該中斷請(qǐng)求,否則,會(huì)重復(fù)引起中斷而導(dǎo)致錯(cuò)誤。MCS-51各中斷源中斷請(qǐng)求撤消的方法各不相同,分別為:1)定時(shí)器中斷請(qǐng)求的撤除 對(duì)于定時(shí)器0或1溢出中斷,CPU在響應(yīng)中斷后即由硬件自動(dòng)清除其中斷標(biāo)志位TF0或TF1,無(wú)需采取其它措施。2)串行口中斷請(qǐng)求的撤除 對(duì)于串行口中斷,CPU在響應(yīng)中斷后,硬件不能自動(dòng)清除中斷請(qǐng)求標(biāo)志位TI、RI,必須在中斷服務(wù)程序中用軟件將其清除。例如:CLRTI;撤除發(fā)送中斷CLRRI;撤除接收中斷3)外部中斷請(qǐng)求的撤除 外部中斷可分為邊沿觸發(fā)型和電平觸發(fā)型,對(duì)于這兩種不同的中斷觸發(fā)方式,51單片機(jī)撤除它們的中斷請(qǐng)求的方法是不同的。 (1)對(duì)于邊沿觸發(fā)的外部中斷0或1,CPU在響應(yīng)中斷后由硬件自動(dòng)清除其中斷標(biāo)志位IE0或IE1,無(wú)需采取其它措施。 (2)對(duì)于電平觸發(fā)的外部中斷,其中斷請(qǐng)求撤除方法較復(fù)雜。因?yàn)閷?duì)于電平觸發(fā)外中斷,CPU在響應(yīng)中斷后,硬件不會(huì)自動(dòng)清除其中斷請(qǐng)求標(biāo)志位IE0或IE1,同時(shí),也不能用軟件將其清除,所以,在CPU響應(yīng)中斷后,應(yīng)立即撤除或引腳上的低電平。否則,就會(huì)引起重復(fù)中斷而導(dǎo)致錯(cuò)誤。而CPU又不能控制或引腳的信號(hào),因此,只有通過(guò)硬件再配合相應(yīng)軟件才能解決這個(gè)問(wèn)題。項(xiàng)目6中斷及定時(shí)系統(tǒng)4.中斷請(qǐng)求的撤除項(xiàng)目6中斷及定時(shí)系統(tǒng)21【例6.1】電路如圖6-3所示,按鍵控制信號(hào)燈,試?yán)脙蓚€(gè)外部中斷編程實(shí)現(xiàn)以下功能:K0單獨(dú)按下,黃燈亮;K1單獨(dú)按下,綠燈亮。項(xiàng)目6中斷及定時(shí)系統(tǒng)【例6.1】電路如圖6-3所示,按鍵控制信號(hào)燈,試?yán)脙蓚€(gè)外226.2定時(shí)/計(jì)數(shù)器6.2.1關(guān)于定時(shí)/計(jì)數(shù)器的幾個(gè)概念1.計(jì)數(shù)的概念 所謂計(jì)數(shù),就是計(jì)算事件發(fā)生的次數(shù)。2.定時(shí)的概念 生活中常見(jiàn)的定時(shí)有很多,如電視機(jī)定時(shí)關(guān)機(jī)、空調(diào)定時(shí)開(kāi)關(guān)、微波爐定時(shí)加熱等等。 單片機(jī)中的定時(shí)器和計(jì)數(shù)器是一個(gè)東西,只不過(guò)計(jì)數(shù)器是記錄的外界發(fā)生的事情,而定時(shí)器則是由單片機(jī)提供一個(gè)非常穩(wěn)定的計(jì)數(shù)源。這個(gè)計(jì)數(shù)源就是由單片機(jī)的晶振經(jīng)過(guò)12分頻后獲得的一個(gè)脈沖源。在晶振位12MHz的情況下,這個(gè)計(jì)數(shù)脈沖的時(shí)間間隔就是1。項(xiàng)目6中斷及定時(shí)系統(tǒng)6.2定時(shí)/計(jì)數(shù)器6.2.1關(guān)于定時(shí)/計(jì)數(shù)器的幾個(gè)概念項(xiàng)233.計(jì)數(shù)器的容量 8051單片機(jī)中有兩個(gè)計(jì)數(shù)器,分別稱(chēng)之為T(mén)0和T1,這兩個(gè)計(jì)數(shù)器都是16位,所以最大的計(jì)數(shù)量是65536,即0000H~FFFFH。 計(jì)數(shù)器的容量是16位,最大的計(jì)數(shù)量是65536,因此計(jì)到65536個(gè)就會(huì)產(chǎn)生溢出。問(wèn)題是我們現(xiàn)實(shí)生活中,經(jīng)常會(huì)有少于65536個(gè)計(jì)數(shù)值的要求,如定時(shí)100s? 比如說(shuō),一個(gè)容器可以裝1000滴水,再裝的話就溢出了?,F(xiàn)在要求裝只能100滴水,再裝的話就溢出了,怎么實(shí)現(xiàn)?對(duì)了,我們可以先裝900滴水就可以了。這種方式在單片機(jī)里面稱(chēng)為預(yù)置數(shù),我要計(jì)100,那我就先放進(jìn)65436,再來(lái)100個(gè)脈沖,就可以到65536了。 定時(shí)也是如此,每個(gè)脈沖是1,則計(jì)滿65536個(gè)脈沖需時(shí)65.536ms,如果我只要10ms怎么辦?10個(gè)ms為10000個(gè),所以只要在計(jì)數(shù)器里面放進(jìn)55536就可以了。項(xiàng)目6中斷及定時(shí)系統(tǒng)3.計(jì)數(shù)器的容量項(xiàng)目6中斷及定時(shí)系統(tǒng)246.2.2定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)

從上一節(jié)我們已經(jīng)得知,單片機(jī)中的定時(shí)/計(jì)數(shù)器都可以有多種用途,下面我們具體了解它們的內(nèi)部結(jié)構(gòu)。 8051單片機(jī)內(nèi)部有兩個(gè)16位的可編程定時(shí)器/計(jì)數(shù)器,稱(chēng)為定時(shí)器0(T0)和定時(shí)器1(T1),可編程選擇其作為定時(shí)器用或作為計(jì)數(shù)器用。此外,工作方式、定時(shí)時(shí)間、計(jì)數(shù)值、啟動(dòng)、中斷請(qǐng)求等都可以由程序設(shè)定,其邏輯結(jié)構(gòu)如圖6-7所示。項(xiàng)目6中斷及定時(shí)系統(tǒng)6.2.2定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)項(xiàng)目6中斷及定時(shí)系統(tǒng)256.2.3定時(shí)器/計(jì)數(shù)器的控制 上文提到的兩個(gè)特殊功能寄存器,TMOD和TCON,通過(guò)設(shè)置這兩個(gè)特殊功能寄存器來(lái)讓定時(shí)/計(jì)數(shù)器為我們服務(wù)。1.定時(shí)/計(jì)數(shù)器方式寄存器TMOD TMOD為T(mén)1、T2的工作方式寄存器,TMOD的低4位為T(mén)0的方式字段,高4位為T(mén)1的方式字段,它們的含義完全相同,其格式如下:項(xiàng)目6中斷及定時(shí)系統(tǒng)6.2.3定時(shí)器/計(jì)數(shù)器的控制項(xiàng)目6中斷及定時(shí)系統(tǒng)26GATE:門(mén)控位。用于控制T0或T1的啟動(dòng)。當(dāng)GATE=0時(shí),計(jì)數(shù)器的啟動(dòng)不受外部引腳信號(hào)或控制,只受定時(shí)器控制寄存器TCON中的啟動(dòng)位TR0或TR1的控制;當(dāng)GATE=1時(shí),計(jì)數(shù)器的啟動(dòng)不僅受TR0或TR1的控制,還要受外部引腳信號(hào)或控制。

C/T:功能選擇位。當(dāng)=0時(shí),定時(shí)功能,其計(jì)數(shù)脈沖為時(shí)鐘振蕩信號(hào)的12分頻,即對(duì)機(jī)器周期計(jì)數(shù);當(dāng)=1時(shí),計(jì)數(shù)功能,其計(jì)數(shù)脈沖是從T0(P3.4)或T1(P3.5)端輸入的外部脈沖。M1和M0:工作方式選擇位。定時(shí)器/計(jì)數(shù)器有4種工作方式,通過(guò)M1、M0的組合設(shè)置為不同的工作方式項(xiàng)目6中斷及定時(shí)系統(tǒng)GATE:門(mén)控位。用于控制T0或T1的啟動(dòng)。當(dāng)GATE=027M1M0工作方式說(shuō)明00方式013位定時(shí)器/計(jì)數(shù)器01方式116位定時(shí)器/計(jì)數(shù)器10方式2自動(dòng)重裝載8位定時(shí)器/計(jì)數(shù)器11方式3T0被拆為兩個(gè)8位的定時(shí)器/計(jì)數(shù)器;T1停止計(jì)數(shù)TMOD不能位尋址,只能用字節(jié)指令設(shè)置定時(shí)器工作方式,高4位定義T1,低4位定義T0。復(fù)位時(shí),TMOD所有位均置0。項(xiàng)目6中斷及定時(shí)系統(tǒng)M1M0工作方式說(shuō)明00方式013位定時(shí)器/計(jì)數(shù)器01282.定時(shí)器/計(jì)數(shù)器控制寄存器TCON(TimerControlRegister)項(xiàng)目6中斷及定時(shí)系統(tǒng)2.定時(shí)器/計(jì)數(shù)器控制寄存器TCON(TimerContr291)TF1:定時(shí)器1溢出標(biāo)志位。當(dāng)定時(shí)器1計(jì)數(shù)滿產(chǎn)生溢出時(shí),由硬件自動(dòng)置TF1=1。在中斷允許時(shí),向CPU發(fā)出定時(shí)器1的中斷請(qǐng)求,進(jìn)入中斷服務(wù)程序后,由硬件自動(dòng)清0。在中斷屏蔽時(shí),TF1可作查詢(xún)測(cè)試用,此時(shí)只能由軟件清0。2)TR1:定時(shí)器1運(yùn)行控制位。由軟件置1或清0來(lái)啟動(dòng)或關(guān)閉定時(shí)器1。當(dāng)GATE=1,且為高電平時(shí),TR1置1啟動(dòng)定時(shí)器1;當(dāng)GATE=0時(shí),TR1置1即可啟動(dòng)定時(shí)器1。3)TF0:定時(shí)器0溢出標(biāo)志位。其功能及操作情況同TF1。4)TR0:定時(shí)器0運(yùn)行控制位。其功能及操作情況同TR1。5)IE1:外部中斷1()請(qǐng)求標(biāo)志位。6)IT1:外部中斷1觸發(fā)方式選擇位。7)IE0:外部中斷0()請(qǐng)求標(biāo)志位。8)IT0:外部中斷0觸發(fā)方式選擇位。TCON中的低4位用于控制外部中斷,與定時(shí)器/計(jì)數(shù)器無(wú)關(guān)。當(dāng)系統(tǒng)復(fù)位時(shí),TCON的所有位均清0。TCON的字節(jié)地址為88H,可以位尋址,清溢出標(biāo)志位或啟動(dòng)定時(shí)器都可以用位操作指令。如SETBTR1、JBCTF1,LOOP等等。項(xiàng)目6中斷及定時(shí)系統(tǒng)1)TF1:定時(shí)器1溢出標(biāo)志位。當(dāng)定時(shí)器1計(jì)數(shù)滿產(chǎn)生溢出時(shí)306.2.4定時(shí)器/計(jì)數(shù)器的工作方式通過(guò)對(duì)定時(shí)器/計(jì)數(shù)器方式控制寄存器TMOD的介紹,已經(jīng)知道定時(shí)器/計(jì)數(shù)器有四種工作方式。1.工作方式0當(dāng)TMOD的M1、M0位為00時(shí),定時(shí)器/計(jì)數(shù)器就工作在方式0。方式0的計(jì)數(shù)器是由TL0的低5位與TH0的8位組成的13位計(jì)數(shù)器結(jié)構(gòu),TL0的高3位未用。當(dāng)TL0的低5位進(jìn)位時(shí),TH0加1;TH0的最高位進(jìn)位,產(chǎn)生溢出,使TF0=1,向CPU申請(qǐng)中斷。若CPU響應(yīng)中斷,系統(tǒng)自動(dòng)將TF0復(fù)位。圖6-9方式0中的13位計(jì)數(shù)器分配項(xiàng)目6中斷及定時(shí)系統(tǒng)6.2.4定時(shí)器/計(jì)數(shù)器的工作方式圖6-9方式0中的1331當(dāng)=0時(shí),多路開(kāi)關(guān)連接12分頻器輸出,T0對(duì)機(jī)器周期計(jì)數(shù),此時(shí)T0為定時(shí)器。其定時(shí)時(shí)間為:當(dāng)=1時(shí),多路開(kāi)關(guān)與T0(P3.4)相連,外部計(jì)數(shù)脈沖由T0腳輸入,當(dāng)外部信號(hào)電平發(fā)生由0到1的負(fù)跳變時(shí),計(jì)數(shù)器加1,此時(shí)T0為計(jì)數(shù)器。定時(shí)器初值計(jì)數(shù):設(shè)定時(shí)時(shí)間為t,計(jì)數(shù)初值為X,晶體振蕩器產(chǎn)生的振蕩信號(hào)的頻率為fosc,則定時(shí)時(shí)間的計(jì)算公式為:t=(計(jì)數(shù)最大值-X)×12/fosc方式0為13位計(jì)數(shù)器結(jié)構(gòu),其計(jì)數(shù)最大值為213=8192。設(shè)fosc為12MHz,經(jīng)12分頻后,每個(gè)計(jì)數(shù)脈沖的周期為1μs。當(dāng)計(jì)數(shù)初值X為0時(shí),定時(shí)時(shí)間最長(zhǎng),則方式0的最大定時(shí)時(shí)間為:tmax=(213-0)×12/fosc=8192×1μs=8.192ms項(xiàng)目6中斷及定時(shí)系統(tǒng)當(dāng)=0時(shí),多路開(kāi)關(guān)連接12分頻器輸出,T032計(jì)數(shù)器初值計(jì)算:設(shè)計(jì)數(shù)次數(shù)為C,計(jì)數(shù)初值為X,則計(jì)數(shù)次數(shù)的計(jì)算公式如下:C=計(jì)數(shù)最大值-X當(dāng)計(jì)數(shù)初值X為0時(shí),計(jì)數(shù)次數(shù)最多,則方式0的最大計(jì)數(shù)次數(shù)為:Cmax=213-0=8192項(xiàng)目6中斷及定時(shí)系統(tǒng)計(jì)數(shù)器初值計(jì)算:項(xiàng)目6中斷及定時(shí)系統(tǒng)33【例6.2】用定時(shí)器0的工作方式0實(shí)現(xiàn)1ms的定時(shí),在P1.0引腳上輸出周期為2ms的方波。設(shè)晶振頻率為12MHz。解:第一步,設(shè)置工作方式TMOD。根據(jù)題意用定時(shí)器0的工作方式0實(shí)現(xiàn)1ms的定時(shí),則:M1M0=00,T0工作在方式0;=0,此時(shí)T0為定時(shí)狀態(tài);GATE=0,此時(shí)定時(shí)器與外部中斷無(wú)關(guān);其余各位可以任意設(shè)置,這里取0值,即TMOD=00000000B=00H。第二步,計(jì)算初值,此時(shí)晶振頻率為12MHz。根據(jù)公式,得出得=1C18H=0001110000011000B因13位計(jì)數(shù)器中TL0的高3位未用,應(yīng)填寫(xiě)0,TH0占高8位,所以X的實(shí)際填寫(xiě)值應(yīng)為:=1110000011000=E018H即:TH0=E0H,TL0=18H。項(xiàng)目6中斷及定時(shí)系統(tǒng)【例6.2】用定時(shí)器0的工作方式0實(shí)現(xiàn)1ms的定時(shí),在P1.34第三步,程序采用查詢(xún)的方式,如下:ORG00HLJMPMAINORG0100HMAIN:MOVTMOD,#00H;設(shè)定時(shí)器0為工作方式0SETBTR0;啟動(dòng)定時(shí)器LOOP:MOVTH0,#0E0H;預(yù)置數(shù),裝入計(jì)數(shù)初值MOVTL0,#18HJNBTF0,$;T0沒(méi)有溢出,等待溢出CLRTF0CPLP1.0;P1.0取反輸出方波LJMPLOOPEND項(xiàng)目6中斷及定時(shí)系統(tǒng)第三步,程序采用查詢(xún)的方式,如下:項(xiàng)目6中斷及定時(shí)系統(tǒng)352.方式1 定時(shí)器工作于方式1時(shí),構(gòu)成一個(gè)16位定時(shí)器/計(jì)數(shù)器,其最大計(jì)數(shù)值為216=65536,其結(jié)構(gòu)與操作幾乎完全與方式0相同,只是將M1M0設(shè)為01,唯一差別是二者計(jì)數(shù)位數(shù)不同。作為定時(shí)器用時(shí),其定時(shí)時(shí)間為: 既然方式0和方式1的結(jié)構(gòu)與操作基本一樣,為什么還要用13位的方式0呢?為什么不都用16位方式1?這是為了和51機(jī)的前輩48系列兼容而設(shè)的一種工作式,當(dāng)然我們可以都用方式1,不用方式0。項(xiàng)目6中斷及定時(shí)系統(tǒng)2.方式1項(xiàng)目6中斷及定時(shí)系統(tǒng)36【例6.3】用定時(shí)器0的工作方式1實(shí)現(xiàn)50ms的定時(shí),在P1.0引腳上輸出周期為100ms的方波。設(shè)晶振頻率為12MHz。解:第一步,設(shè)置工作方式TMOD。根據(jù)題意用定時(shí)器0的工作方式1實(shí)現(xiàn)50ms的定時(shí),則:M1M0=01,T0工作在方式1;其余與例6.2相同,即TMOD=00000001B=01H。第二步,計(jì)算初值,此時(shí)晶振頻率為12MHz。根據(jù)公式,得出得=2^16-50000=15536=3CB0H即:TH0=3CH,TL0=B0H。項(xiàng)目6中斷及定時(shí)系統(tǒng)【例6.3】用定時(shí)器0的工作方式1實(shí)現(xiàn)50ms的定時(shí),在P137第三步,程序采用中斷的方式,如下:ORG0000HLJMPMAINORG000BHLJMPTIME00ORG0100HMAIN:MOVTMOD,#01H;設(shè)定時(shí)器0為工作方式1MOVTH0,#3CH;預(yù)置數(shù),裝入計(jì)數(shù)初值MOVTL0,#0B0HSETBEA;開(kāi)總中斷SETBET0;開(kāi)定時(shí)器中斷SETBTR0;啟動(dòng)定時(shí)器T0LOOP:SJMP$;等待中斷TIME00:CPLP1.0;P1.0取反輸出方波MOVTH0,#3CH;預(yù)置數(shù),重新裝入計(jì)數(shù)初值MOVTL0,#0B0HRETIEND項(xiàng)目6中斷及定時(shí)系統(tǒng)第三步,程序采用中斷的方式,如下:項(xiàng)目6中斷及定時(shí)系統(tǒng)383.方式2在例6.2中,當(dāng)定時(shí)時(shí)間到了以后,定時(shí)器的值變成了0,下一次將要計(jì)滿65536后才會(huì)溢出,而我們的要求是定時(shí)產(chǎn)生方波,所以我們要做溢出后做一個(gè)重置預(yù)置數(shù)的工作,如在中斷服務(wù)程序中重新裝入計(jì)數(shù)初值,做這樣的工作影響定時(shí)精度不說(shuō),還需要時(shí)間,一般來(lái)說(shuō)這點(diǎn)時(shí)間不算什么,可是有一些場(chǎng)合我們還是要計(jì)較的,所以就有了工作方式2,自動(dòng)再裝入預(yù)置數(shù)的工作方式。 方式2中16位定時(shí)/計(jì)數(shù)器被分割為兩個(gè),TL0(TL1)用作8位計(jì)數(shù)器,TH0(TH1)用以保持初值。TH0(TH1)作為一個(gè)8位的寄存器使用,存放計(jì)數(shù)器的初始值;TL0(TL1)作為一個(gè)8位加1計(jì)數(shù)器; 當(dāng)TL0(TL1)計(jì)數(shù)溢出時(shí),不僅溢出中斷標(biāo)志TF0(TF1)置1,而且還自動(dòng)把TH0(TH1)中的內(nèi)容重裝到TL0(TL1)中。 程序初始化時(shí),TL0(TL1)和TH0(TH1)由軟件賦予相同的初值。一旦TL0(TL1)計(jì)數(shù)溢出,TF0(TF1)將被置位,同時(shí),TH0(TH1)中的初值裝入TL0(TL1),從而進(jìn)入新一輪計(jì)數(shù),如此重復(fù)循環(huán)不止。用于定時(shí)工時(shí)方式時(shí),其定時(shí)時(shí)間是:項(xiàng)目6中斷及定時(shí)系統(tǒng)3.方式2項(xiàng)目6中斷及定時(shí)系統(tǒng)39【例6.4】用定時(shí)器0的工作方式2實(shí)現(xiàn)100s的定時(shí),在P1.0引腳上輸出周期為200s的方波。設(shè)晶振頻率為12MHz。解:第一步,設(shè)置工作方式TMOD。根據(jù)題意用定時(shí)器0的工作方式2實(shí)現(xiàn)100s的定時(shí),則:M1M0=10,T0工作在方式2;其余與例6.2相同,即TMOD=00000010B=02H。第二步,計(jì)算初值,此時(shí)晶振頻率為12MHz。根據(jù)公式,得出得=2^8-100=156=9CH即:TH0=9CH,TL0=9CH。第三步,程序采用中斷的方式,如下:ORG0000HLJMPMAINORG000BHCPLP1.0;P1.0取反輸出方波RETIORG0100HMAIN:MOVTMOD,#02H;設(shè)定時(shí)器0為工作方式1MOVTH0,#9CH;預(yù)置數(shù),裝入計(jì)數(shù)初值MOVTL0,#9CHMOVIE,#82H;開(kāi)中斷SETBTR0;啟動(dòng)定時(shí)器T0LOOP:SJMP$;等待中斷END項(xiàng)目6中斷及定時(shí)系統(tǒng)【例6.4】用定時(shí)器0的工作方式2實(shí)現(xiàn)100s的定時(shí),在P1406.2.4定時(shí)器/計(jì)數(shù)器的工作方式 上文提到,,通過(guò)對(duì)TMOD寄存器中M0、M1位進(jìn)行設(shè)置,可選擇4種工作方式,即方式0、方式1、方式2和方式3。在方式0、1和2時(shí),T0和T1的工作方式相同;在方式3時(shí),兩個(gè)定時(shí)器的工作方式不同,1.方式0方式0構(gòu)成一個(gè)13位定時(shí)器/計(jì)數(shù)器,其最大計(jì)數(shù)值為213=8192。項(xiàng)目6中斷及定時(shí)系統(tǒng)6.2.4定時(shí)器/計(jì)數(shù)器的工作方式項(xiàng)目6中斷及定時(shí)系統(tǒng)41項(xiàng)目6中斷及定時(shí)系統(tǒng)項(xiàng)目6中斷及定時(shí)系統(tǒng)426.1中斷系統(tǒng)6.1.1中斷的幾個(gè)概念概念1.中斷的定義 對(duì)于CPU來(lái)說(shuō),CPU在處理某一事件A時(shí),發(fā)生了另一事件B請(qǐng)求CPU迅速去處理(中斷發(fā)生);CPU暫時(shí)中斷當(dāng)前的工作,轉(zhuǎn)去處理事件B(中斷響應(yīng)和中斷服務(wù));待CPU將事件B處理完畢后,再回到原來(lái)事件A被中斷的地方繼續(xù)處理事件A(中斷返回),這一過(guò)程稱(chēng)為中斷。 所以我們把可以引起中斷的請(qǐng)求源稱(chēng)之為中斷源。單片機(jī)中也有一些可以引起中斷的事件,8051中一共有5個(gè)中斷源:兩個(gè)外部中斷,兩個(gè)定時(shí)/計(jì)數(shù)器中斷,一個(gè)串行口中斷。2.中斷的嵌套與優(yōu)先級(jí) 8051單片機(jī)5個(gè)中斷源有兩個(gè)優(yōu)先級(jí)項(xiàng)目6中斷及定時(shí)系統(tǒng)6.1中斷系統(tǒng)6.1.1中斷的幾個(gè)概念概念項(xiàng)目6中斷及433.中斷的響應(yīng)過(guò)程 五個(gè)中斷源,每個(gè)中斷產(chǎn)生后都到一個(gè)固定的地方去找處理這個(gè)中斷的程序,在去之前首先要保存下面將執(zhí)行的指令的地址,以便處理完中斷后回到原來(lái)的地方繼續(xù)往下執(zhí)行程序。中斷響應(yīng)過(guò)程可以分為以下幾個(gè)步驟:1)保護(hù)斷點(diǎn),即保存下一將要執(zhí)行的指令的地址,就是把這個(gè)地址送入堆棧;2)尋找中斷入口,根據(jù)5個(gè)不同的中斷源所產(chǎn)生的中斷,查找5個(gè)不同的中斷服務(wù)程序入口地址。在這5個(gè)入口地址處存放有中斷處理程序;3)執(zhí)行中斷處理程序;4)中斷返回:執(zhí)行完中斷處理程序后,就從中斷處返回到主程序,繼續(xù)執(zhí)行主程序。 中斷系統(tǒng)是計(jì)算機(jī)的重要組成部分。中斷系統(tǒng)可以提高CPU的工作效率,還可以提高實(shí)時(shí)數(shù)據(jù)的處理時(shí)效,所以實(shí)時(shí)控制、故障自動(dòng)處理往往采用中斷系統(tǒng),計(jì)算機(jī)與外圍設(shè)備間傳送數(shù)據(jù)及實(shí)現(xiàn)人機(jī)聯(lián)系也常采用中斷方式。項(xiàng)目6中斷及定時(shí)系統(tǒng)3.中斷的響應(yīng)過(guò)程項(xiàng)目6中斷及定時(shí)系統(tǒng)446.1.2中斷系統(tǒng)的結(jié)構(gòu)項(xiàng)目6中斷及定時(shí)系統(tǒng)6.1.2中斷系統(tǒng)的結(jié)構(gòu)項(xiàng)目6中斷及定時(shí)系統(tǒng)456.1.3中斷源和中斷標(biāo)志1.中斷源 MCS-51的5個(gè)中斷源為兩個(gè)外部中斷、兩個(gè)定時(shí)器中斷和一個(gè)串行口中斷。 1)外部中斷請(qǐng)求源:即外中斷0和1,經(jīng)由外部引腳引入的,在單片機(jī)上有兩個(gè)引腳,名稱(chēng)為、,也就是P3.2、P3.3這兩個(gè)引腳。 2)內(nèi)部中斷請(qǐng)求源:兩個(gè)定時(shí)器中斷和串行口中斷。8051內(nèi)部有兩個(gè)16位的定時(shí)/計(jì)數(shù)器,對(duì)內(nèi)部定時(shí)脈沖或者T0/T1引腳上輸入的外部計(jì)數(shù)脈沖計(jì)數(shù),當(dāng)定時(shí)時(shí)間到或計(jì)數(shù)脈沖滿時(shí),自動(dòng)向CPU提出中斷請(qǐng)求。串行口中斷分為串行口發(fā)送中斷和串行口接收中斷兩種,在串行口進(jìn)行發(fā)送/接收數(shù)據(jù)時(shí),每當(dāng)串行口發(fā)送/接收完一組數(shù)據(jù),單片機(jī)自動(dòng)使串行口控制寄存器SCON的RI或TI中斷標(biāo)志置位,并且自動(dòng)向CPU提出串行口中斷請(qǐng)求。項(xiàng)目6中斷及定時(shí)系統(tǒng)6.1.3中斷源和中斷標(biāo)志項(xiàng)目6中斷及定時(shí)系統(tǒng)46

80C51單片機(jī)的中斷系統(tǒng)提供了5個(gè)中斷源,具有2個(gè)中斷優(yōu)先級(jí),可實(shí)現(xiàn)兩級(jí)中斷嵌套。 80C51單片機(jī)的5個(gè)中斷源分別是:2個(gè)外部中斷(由、引腳輸入中斷請(qǐng)求信號(hào))、2個(gè)片內(nèi)定時(shí)器/計(jì)數(shù)器溢出中斷(T0、T1)和1個(gè)片內(nèi)串行口中斷。TCON、SCON是用來(lái)存放各中斷源的中斷申請(qǐng)標(biāo)志的寄存器;IE是用來(lái)設(shè)置是否允許中斷源中斷的寄存器;IP是用來(lái)設(shè)置中斷源優(yōu)先級(jí)別的寄存器;硬件查詢(xún)是相同優(yōu)先級(jí)的中斷源再進(jìn)行排隊(duì)的硬件電路。項(xiàng)目6中斷及定時(shí)系統(tǒng) 80C51單片機(jī)的中斷系統(tǒng)提供了5個(gè)中斷源,具有2個(gè)中斷47(1)定時(shí)器控制寄存器TCON(TimerControlRegister)IE0:外部中斷0請(qǐng)求標(biāo)志位。當(dāng)CPU檢測(cè)到引腳上出現(xiàn)下降沿信號(hào)或低電平信號(hào)時(shí),由內(nèi)部硬件置位IE0(IE0=1),向CPU請(qǐng)求中斷。IE1:外部中斷1請(qǐng)求標(biāo)志位。當(dāng)CPU檢測(cè)到引腳上出現(xiàn)下降沿信號(hào)或低電平信號(hào)時(shí),由內(nèi)部硬件置位IE1(IE1=1),向CPU申請(qǐng)中斷。TF0:定時(shí)器/計(jì)數(shù)器T0的溢出中斷請(qǐng)求標(biāo)志位。當(dāng)T0計(jì)數(shù)溢出時(shí),由內(nèi)部硬件置位TF0(TF0=1),向CPU申請(qǐng)中斷。TF1:定時(shí)器/計(jì)數(shù)器T1的溢出中斷請(qǐng)求標(biāo)志位。當(dāng)T1計(jì)數(shù)溢出時(shí),由內(nèi)部硬件置位TF1(TF1=1),向CPU申請(qǐng)中斷。IT0:外部中斷0觸發(fā)方式控制位。當(dāng)IT0=0時(shí),電平觸發(fā),低電平有效;當(dāng)IT0=1時(shí),邊沿觸發(fā),下降沿有效。IT1:外部中斷1觸發(fā)方式控制位。當(dāng)IT1=0時(shí),電平觸發(fā),低電平有效;當(dāng)IT1=1時(shí),邊沿觸發(fā),下降沿有效。項(xiàng)目6中斷及定時(shí)系統(tǒng)(1)定時(shí)器控制寄存器TCON(TimerControl48(2)串行口控制寄存器SCON(SerialControlRegister)TI:串行口發(fā)送中斷請(qǐng)求標(biāo)志位。當(dāng)串行口發(fā)送完一個(gè)數(shù)據(jù)幀時(shí),將TI置位(TI=1),向CPU申請(qǐng)中斷。RI:串行口接收中斷請(qǐng)求標(biāo)志位。當(dāng)串行口接收完一個(gè)數(shù)據(jù)幀時(shí),將RI置位(RI=1),向CPU申請(qǐng)中斷。項(xiàng)目6中斷及定時(shí)系統(tǒng)(2)串行口控制寄存器SCON(SerialControl496.1.4對(duì)中斷請(qǐng)求的控制1.對(duì)中斷允許的控制 計(jì)算機(jī)中斷系統(tǒng)有兩種不同類(lèi)型的中斷:一類(lèi)稱(chēng)為非屏蔽中斷,另一類(lèi)稱(chēng)為可屏蔽中斷。對(duì)非屏蔽中斷,用戶不能用軟件的方法加以禁止,一旦有中斷申請(qǐng),CPU必須予以響應(yīng)。對(duì)可屏蔽中斷,用戶則可以通過(guò)軟件方法來(lái)控制是否允許某中斷源的中斷,允許中斷稱(chēng)中斷開(kāi)放,不允許中斷稱(chēng)中斷屏蔽。MCS-51系列單片機(jī)的5個(gè)中斷源都是可屏蔽中斷項(xiàng)目6中斷及定時(shí)系統(tǒng)6.1.4對(duì)中斷請(qǐng)求的控制項(xiàng)目6中斷及定時(shí)系統(tǒng)50 EA:中斷允許總控制位。EA=0,中斷總禁止,禁止所有中斷;EA=1,中斷總允許,置1后,各中斷源的中斷允許由各個(gè)控制位進(jìn)行設(shè)置。 EX0、EX1:外部中斷允許控制位。EX0(EX1)=0,表示禁止外中斷INT0(INT1)的中斷申請(qǐng);EX0(EX1)=1,表示允許外中斷INT0(INT1)的中斷申請(qǐng)。 ET0、ET1:定時(shí)/計(jì)數(shù)中斷允許控制位。ET0(ET1)=0,表示禁止定時(shí)/計(jì)數(shù)器0(1)的中斷申請(qǐng);ET0(ET1)=1,表示允許定時(shí)/計(jì)數(shù)器0(1)的中斷申請(qǐng); ES:串行口中斷允許控制位。ES=0,禁止串口中斷;ES=1,允許串口中斷。MCS-51單片機(jī)各個(gè)中斷源均為可屏蔽中斷。 中斷允許寄存器IE的單元地址是A8H,各控制位可以位尋址,也可以字節(jié)尋址。例如可以采用位指令開(kāi)放外部中斷的溢出中斷:SETBEASETBEX0 若改為字節(jié)傳送指令,則僅需采用一條指令:MOVIE,#81H項(xiàng)目6中斷及定時(shí)系統(tǒng) EA:中斷允許總控制位。EA=0,中斷總禁止,禁止所有中51例:設(shè)允許定時(shí)器/計(jì)數(shù)器T1的溢出中斷的中斷請(qǐng)求,禁止其它中斷源的中斷請(qǐng)求,寫(xiě)出設(shè)置IE的指令。分析:根據(jù)設(shè)定條件,則IE寄存器的EA=1,ET1=1,其它位為0,IE的值應(yīng)為10001000B,即88H。用字節(jié)傳送指令可寫(xiě)為:MOVIE,#88H或MOV0A8H,#88H若改用位操作指令,則需兩條指令:SETBET1;允許T1溢出中斷SETBEA;CPU允許所有中斷源中斷項(xiàng)目6中斷及定時(shí)系統(tǒng)例:設(shè)允許定時(shí)器/計(jì)數(shù)器T1的溢出中斷的中斷請(qǐng)求,禁止其它中52(4)中斷優(yōu)先級(jí)寄存器IP(InterruptPriorityRegister)80C51單片機(jī)的5個(gè)中斷源,均可由程序設(shè)置為高優(yōu)先級(jí)中斷或低優(yōu)先級(jí)中斷,誰(shuí)的優(yōu)先級(jí)別高,就先響應(yīng)誰(shuí)。每個(gè)中斷源的中斷優(yōu)先級(jí)都通過(guò)中斷優(yōu)先級(jí)寄存器IP統(tǒng)一設(shè)置。項(xiàng)目6中斷及定時(shí)系統(tǒng)(4)中斷優(yōu)先級(jí)寄存器IP(InterruptPriori53PX0和PX1:PX0是外部中斷0的中斷優(yōu)先級(jí)控制位;PX1是外部中斷1的中斷優(yōu)先級(jí)控制位。PT0和PT1:PT0為定時(shí)器/計(jì)數(shù)器T0的溢出中斷優(yōu)先級(jí)控制位;PT1為定時(shí)器/計(jì)數(shù)器T1的溢出中斷優(yōu)先級(jí)控制位。PS:串行口中斷優(yōu)先級(jí)控制位。注意:當(dāng)某個(gè)中斷源的優(yōu)先級(jí)控制位為1時(shí),設(shè)置為高優(yōu)先級(jí)中斷;為0時(shí),設(shè)置為低優(yōu)先級(jí)中斷。項(xiàng)目6中斷及定時(shí)系統(tǒng)PX0和PX1:PX0是外部中斷0的中斷優(yōu)先級(jí)控制位;項(xiàng)目654 8051單片機(jī)共有5個(gè)中斷源,在單片機(jī)工作過(guò)程中,若出現(xiàn)三個(gè)或者更多的中斷請(qǐng)求源,那么同一優(yōu)先級(jí)別中的中斷源就不止一個(gè),這個(gè)時(shí)候也有中斷優(yōu)先級(jí)排隊(duì)的問(wèn)題,8051單片機(jī)對(duì)此有統(tǒng)一規(guī)定,如表6-1所示??蓪?duì)中斷系統(tǒng)的規(guī)定概括為以下兩條基本規(guī)則: 1)低優(yōu)先級(jí)中斷系統(tǒng)的規(guī)定被高級(jí)中斷系統(tǒng)中斷,反之不能; 2)當(dāng)多個(gè)中斷源同時(shí)發(fā)出申請(qǐng)時(shí),級(jí)別高的優(yōu)先級(jí)先服務(wù)(先按高低優(yōu)先級(jí)區(qū)分,再按輔助優(yōu)先級(jí)區(qū)分)。高低中斷源同一級(jí)別的優(yōu)先級(jí)外部中斷0定時(shí)/計(jì)數(shù)器0溢出中斷外部中斷1定時(shí)/計(jì)數(shù)器1溢出中斷串行口中斷表6-18051各個(gè)中斷源中斷優(yōu)先級(jí)順序項(xiàng)目6中斷及定時(shí)系統(tǒng) 8051單片機(jī)共有5個(gè)中斷源,在單片機(jī)工作過(guò)程中,若出現(xiàn)55例:設(shè)80C51單片機(jī)的外部中斷為高優(yōu)先級(jí),內(nèi)部中斷為低優(yōu)先級(jí),寫(xiě)出設(shè)置IP的指令。分析:由給定的條件可知:IP寄存器中,PX1=1,PX0=1,其余位為0,即IP=00000101B=05H。用字節(jié)傳送指令設(shè)置:MOVIP,#05H或MOV0B8H,#05H用位操作指令設(shè)置:SETBPX0SETBPX1CLRPT0CLRPT1CLRPS項(xiàng)目6中斷及定時(shí)系統(tǒng)例:設(shè)80C51單片機(jī)的外部中斷為高優(yōu)先級(jí),內(nèi)部中斷為低優(yōu)566.1.5中斷處理過(guò)程 中斷處理過(guò)程可分為中斷響應(yīng)、中斷處理和中斷返回三個(gè)階段。1.中斷響應(yīng) 中斷響應(yīng)是CPU對(duì)中斷源中斷請(qǐng)求的響應(yīng),包括保護(hù)斷點(diǎn)和將程序轉(zhuǎn)向中斷服務(wù)程序的入口地址(通常稱(chēng)矢量地址)。CPU并非任何時(shí)刻都響應(yīng)中斷請(qǐng)求,而是在中斷響應(yīng)條件滿足之后才會(huì)響應(yīng)。 1)中斷響應(yīng)條件 (1)有中斷源發(fā)出中斷請(qǐng)求。(2)中斷總允許位EA=1。(3)申請(qǐng)中斷的中斷源允許。 滿足以上基本條件,CPU一般會(huì)響應(yīng)中斷,但CPU正在響應(yīng)同級(jí)或高優(yōu)先級(jí)的中斷、正在執(zhí)行RETI中斷返回指令以及訪問(wèn)專(zhuān)用寄存器IE和IP的指令時(shí),CPU不響應(yīng)中斷請(qǐng)求而在下一機(jī)器周期繼續(xù)查詢(xún),否則,CPU在下一機(jī)器周期響應(yīng)中斷。項(xiàng)目6中斷及定時(shí)系統(tǒng)6.1.5中斷處理過(guò)程項(xiàng)目6中斷及定時(shí)系統(tǒng)572)中斷響應(yīng)過(guò)程 中斷響應(yīng)過(guò)程包括保護(hù)斷點(diǎn)和將程序轉(zhuǎn)向中斷服務(wù)程序的入口地址。首先把中斷點(diǎn)的地址(斷點(diǎn)地址)壓入堆棧保護(hù),然后將對(duì)應(yīng)的中斷入口地址裝入程序計(jì)數(shù)器PC(由硬件自動(dòng)執(zhí)行),使程序轉(zhuǎn)向該中斷入口地址,執(zhí)行中斷服務(wù)程序。MCS-51系列單片機(jī)各中斷源的入口地址由硬件事先設(shè)定,分配如表6-2所示。 因?yàn)?個(gè)中斷源的入口地址之間,只相隔8個(gè)存儲(chǔ)單元,一般的中斷服務(wù)程序是容納不下的,使用時(shí)通常在這些中斷入口地址處存放一條絕對(duì)跳轉(zhuǎn)指令,使程序跳轉(zhuǎn)到存儲(chǔ)器其他的任何空間,并且將中斷服務(wù)程序安排在相應(yīng)的空間中。例如,若采用定時(shí)器T0中斷,其中斷入口地址為000BH,中斷服務(wù)程序名為T(mén)IME00,因此,指令形式為:ORG 000BH;T1中斷入口AJMP TIME00;轉(zhuǎn)向中斷服務(wù)程序中斷源入口地址外部中斷00003H定時(shí)/計(jì)數(shù)器0溢出中斷000BH外部中斷10013H定時(shí)/計(jì)數(shù)器1溢出中斷001BH串行口中斷0023H項(xiàng)目6中斷及定時(shí)系統(tǒng)2)中斷響應(yīng)過(guò)程中斷源入口地址外部中斷00003H定時(shí)/計(jì)數(shù)582.中斷處理中斷處理就是執(zhí)行中斷服務(wù)程序。中斷服務(wù)程序從中斷入口地址開(kāi)始執(zhí)行,到返回指令“RETI”為止,一般包括兩部分內(nèi)容,一是保護(hù)現(xiàn)場(chǎng),二是完成中斷源請(qǐng)求的服務(wù)。 通常,主程序和中斷服務(wù)程序都會(huì)用到累加器A、狀態(tài)寄存器PSW及其它一些寄存器,當(dāng)CPU進(jìn)入中斷服務(wù)程序用到上述寄存器時(shí),會(huì)破壞原來(lái)存儲(chǔ)在寄存器中的內(nèi)容,一旦中斷返回,將會(huì)導(dǎo)致主程序的混亂,因此,在進(jìn)入中斷服務(wù)程序后,一般要先保護(hù)現(xiàn)場(chǎng),然后,執(zhí)行中斷處理程序,在中斷返回之前再恢復(fù)現(xiàn)場(chǎng)。例如:TIME00:;中斷服務(wù)程序CLREA;關(guān)中斷PUSHPSW;保護(hù)現(xiàn)場(chǎng)PUSHACCPUSHB........;中斷處理PUSHB;恢復(fù)現(xiàn)場(chǎng)PUSHACCPUSHPSWSETBEA;開(kāi)中斷RETI;中斷返回項(xiàng)目6中斷及定時(shí)系統(tǒng)2.中斷處理項(xiàng)目6中斷及定時(shí)系統(tǒng)59編寫(xiě)中斷服務(wù)程序時(shí)還需注意以下幾點(diǎn): 1)各中斷源的中斷入口地址之間只相隔8個(gè)字節(jié),容納不下普通的中斷服務(wù)程序,因此,在中斷入口地址單元通常存放一條無(wú)條件轉(zhuǎn)移指令,可將中斷服務(wù)程序轉(zhuǎn)至存儲(chǔ)器的其它任何空間。 2)若要在執(zhí)行當(dāng)前中斷程序時(shí)禁止其它更高優(yōu)先級(jí)中斷,需先用軟件關(guān)閉CPU中斷,或用軟件禁止相應(yīng)高優(yōu)先級(jí)的中斷,在中斷返回前再開(kāi)放中斷。 3)在保護(hù)和恢復(fù)現(xiàn)場(chǎng)時(shí),為了不使現(xiàn)場(chǎng)數(shù)據(jù)遭到破壞或造成混亂,一般規(guī)定此時(shí)CPU不再響應(yīng)新的中斷請(qǐng)求。因此,在編寫(xiě)中斷服務(wù)程序時(shí),要注意在保護(hù)現(xiàn)場(chǎng)前關(guān)中斷,在保護(hù)現(xiàn)場(chǎng)后若允許高優(yōu)先級(jí)中斷,則應(yīng)開(kāi)中斷。同樣,在恢復(fù)現(xiàn)場(chǎng)前也應(yīng)先關(guān)中斷,恢復(fù)之后再開(kāi)中斷。項(xiàng)目6中斷及定時(shí)系統(tǒng)編寫(xiě)中斷服務(wù)程序時(shí)還需注意以下幾點(diǎn):項(xiàng)目6中斷及定時(shí)系統(tǒng)603.中斷返回 中斷返回是指中斷服務(wù)完后,計(jì)算機(jī)返回原來(lái)斷開(kāi)的位置(即斷點(diǎn)),繼續(xù)執(zhí)行原來(lái)的程序。中斷返回由中斷返回指令RETI來(lái)實(shí)現(xiàn)。該指令的功能是把斷點(diǎn)地址從堆棧中彈出,送回到程序計(jì)數(shù)器PC,此外,還通知中斷系統(tǒng)已完成中斷處理,并同時(shí)清除優(yōu)先級(jí)狀態(tài)觸發(fā)器。項(xiàng)目6中斷及定時(shí)系統(tǒng)3.中斷返回項(xiàng)目6中斷及定時(shí)系統(tǒng)614.中斷請(qǐng)求的撤除CPU響應(yīng)中斷請(qǐng)求后即進(jìn)入中斷服務(wù)程序,在中斷返回前,應(yīng)撤除該中斷請(qǐng)求,否則,會(huì)重復(fù)引起中斷而導(dǎo)致錯(cuò)誤。MCS-51各中斷源中斷請(qǐng)求撤消的方法各不相同,分別為:1)定時(shí)器中斷請(qǐng)求的撤除 對(duì)于定時(shí)器0或1溢出中斷,CPU在響應(yīng)中斷后即由硬件自動(dòng)清除其中斷標(biāo)志位TF0或TF1,無(wú)需采取其它措施。2)串行口中斷請(qǐng)求的撤除 對(duì)于串行口中斷,CPU在響應(yīng)中斷后,硬件不能自動(dòng)清除中斷請(qǐng)求標(biāo)志位TI、RI,必須在中斷服務(wù)程序中用軟件將其清除。例如:CLRTI;撤除發(fā)送中斷CLRRI;撤除接收中斷3)外部中斷請(qǐng)求的撤除 外部中斷可分為邊沿觸發(fā)型和電平觸發(fā)型,對(duì)于這兩種不同的中斷觸發(fā)方式,51單片機(jī)撤除它們的中斷請(qǐng)求的方法是不同的。 (1)對(duì)于邊沿觸發(fā)的外部中斷0或1,CPU在響應(yīng)中斷后由硬件自動(dòng)清除其中斷標(biāo)志位IE0或IE1,無(wú)需采取其它措施。 (2)對(duì)于電平觸發(fā)的外部中斷,其中斷請(qǐng)求撤除方法較復(fù)雜。因?yàn)閷?duì)于電平觸發(fā)外中斷,CPU在響應(yīng)中斷后,硬件不會(huì)自動(dòng)清除其中斷請(qǐng)求標(biāo)志位IE0或IE1,同時(shí),也不能用軟件將其清除,所以,在CPU響應(yīng)中斷后,應(yīng)立即撤除或引腳上的低電平。否則,就會(huì)引起重復(fù)中斷而導(dǎo)致錯(cuò)誤。而CPU又不能控制或引腳的信號(hào),因此,只有通過(guò)硬件再配合相應(yīng)軟件才能解決這個(gè)問(wèn)題。項(xiàng)目6中斷及定時(shí)系統(tǒng)4.中斷請(qǐng)求的撤除項(xiàng)目6中斷及定時(shí)系統(tǒng)62【例6.1】電路如圖6-3所示,按鍵控制信號(hào)燈,試?yán)脙蓚€(gè)外部中斷編程實(shí)現(xiàn)以下功能:K0單獨(dú)按下,黃燈亮;K1單獨(dú)按下,綠燈亮。項(xiàng)目6中斷及定時(shí)系統(tǒng)【例6.1】電路如圖6-3所示,按鍵控制信號(hào)燈,試?yán)脙蓚€(gè)外636.2定時(shí)/計(jì)數(shù)器6.2.1關(guān)于定時(shí)/計(jì)數(shù)器的幾個(gè)概念1.計(jì)數(shù)的概念 所謂計(jì)數(shù),就是計(jì)算事件發(fā)生的次數(shù)。2.定時(shí)的概念 生活中常見(jiàn)的定時(shí)有很多,如電視機(jī)定時(shí)關(guān)機(jī)、空調(diào)定時(shí)開(kāi)關(guān)、微波爐定時(shí)加熱等等。 單片機(jī)中的定時(shí)器和計(jì)數(shù)器是一個(gè)東西,只不過(guò)計(jì)數(shù)器是記錄的外界發(fā)生的事情,而定時(shí)器則是由單片機(jī)提供一個(gè)非常穩(wěn)定的計(jì)數(shù)源。這個(gè)計(jì)數(shù)源就是由單片機(jī)的晶振經(jīng)過(guò)12分頻后獲得的一個(gè)脈沖源。在晶振位12MHz的情況下,這個(gè)計(jì)數(shù)脈沖的時(shí)間間隔就是1。項(xiàng)目6中斷及定時(shí)系統(tǒng)6.2定時(shí)/計(jì)數(shù)器6.2.1關(guān)于定時(shí)/計(jì)數(shù)器的幾個(gè)概念項(xiàng)643.計(jì)數(shù)器的容量 8051單片機(jī)中有兩個(gè)計(jì)數(shù)器,分別稱(chēng)之為T(mén)0和T1,這兩個(gè)計(jì)數(shù)器都是16位,所以最大的計(jì)數(shù)量是65536,即0000H~FFFFH。 計(jì)數(shù)器的容量是16位,最大的計(jì)數(shù)量是65536,因此計(jì)到65536個(gè)就會(huì)產(chǎn)生溢出。問(wèn)題是我們現(xiàn)實(shí)生活中,經(jīng)常會(huì)有少于65536個(gè)計(jì)數(shù)值的要求,如定時(shí)100s? 比如說(shuō),一個(gè)容器可以裝1000滴水,再裝的話就溢出了。現(xiàn)在要求裝只能100滴水,再裝的話就溢出了,怎么實(shí)現(xiàn)?對(duì)了,我們可以先裝900滴水就可以了。這種方式在單片機(jī)里面稱(chēng)為預(yù)置數(shù),我要計(jì)100,那我就先放進(jìn)65436,再來(lái)100個(gè)脈沖,就可以到65536了。 定時(shí)也是如此,每個(gè)脈沖是1,則計(jì)滿65536個(gè)脈沖需時(shí)65.536ms,如果我只要10ms怎么辦?10個(gè)ms為10000個(gè),所以只要在計(jì)數(shù)器里面放進(jìn)55536就可以了。項(xiàng)目6中斷及定時(shí)系統(tǒng)3.計(jì)數(shù)器的容量項(xiàng)目6中斷及定時(shí)系統(tǒng)656.2.2定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)

從上一節(jié)我們已經(jīng)得知,單片機(jī)中的定時(shí)/計(jì)數(shù)器都可以有多種用途,下面我們具體了解它們的內(nèi)部結(jié)構(gòu)。 8051單片機(jī)內(nèi)部有兩個(gè)16位的可編程定時(shí)器/計(jì)數(shù)器,稱(chēng)為定時(shí)器0(T0)和定時(shí)器1(T1),可編程選擇其作為定時(shí)器用或作為計(jì)數(shù)器用。此外,工作方式、定時(shí)時(shí)間、計(jì)數(shù)值、啟動(dòng)、中斷請(qǐng)求等都可以由程序設(shè)定,其邏輯結(jié)構(gòu)如圖6-7所示。項(xiàng)目6中斷及定時(shí)系統(tǒng)6.2.2定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)項(xiàng)目6中斷及定時(shí)系統(tǒng)666.2.3定時(shí)器/計(jì)數(shù)器的控制 上文提到的兩個(gè)特殊功能寄存器,TMOD和TCON,通過(guò)設(shè)置這兩個(gè)特殊功能寄存器來(lái)讓定時(shí)/計(jì)數(shù)器為我們服務(wù)。1.定時(shí)/計(jì)數(shù)器方式寄存器TMOD TMOD為T(mén)1、T2的工作方式寄存器,TMOD的低4位為T(mén)0的方式字段,高4位為T(mén)1的方式字段,它們的含義完全相同,其格式如下:項(xiàng)目6中斷及定時(shí)系統(tǒng)6.2.3定時(shí)器/計(jì)數(shù)器的控制項(xiàng)目6中斷及定時(shí)系統(tǒng)67GATE:門(mén)控位。用于控制T0或T1的啟動(dòng)。當(dāng)GATE=0時(shí),計(jì)數(shù)器的啟動(dòng)不受外部引腳信號(hào)或控制,只受定時(shí)器控制寄存器TCON中的啟動(dòng)位TR0或TR1的控制;當(dāng)GATE=1時(shí),計(jì)數(shù)器的啟動(dòng)不僅受TR0或TR1的控制,還要受外部引腳信號(hào)或控制。

C/T:功能選擇位。當(dāng)=0時(shí),定時(shí)功能,其計(jì)數(shù)脈沖為時(shí)鐘振蕩信號(hào)的12分頻,即對(duì)機(jī)器周期計(jì)數(shù);當(dāng)=1時(shí),計(jì)數(shù)功能,其計(jì)數(shù)脈沖是從T0(P3.4)或T1(P3.5)端輸入的外部脈沖。M1和M0:工作方式選擇位。定時(shí)器/計(jì)數(shù)器有4種工作方式,通過(guò)M1、M0的組合設(shè)置為不同的工作方式項(xiàng)目6中斷及定時(shí)系統(tǒng)GATE:門(mén)控位。用于控制T0或T1的啟動(dòng)。當(dāng)GATE=068M1M0工作方式說(shuō)明00方式013位定時(shí)器/計(jì)數(shù)器01方式116位定時(shí)器/計(jì)數(shù)器10方式2自動(dòng)重裝載8位定時(shí)器/計(jì)數(shù)器11方式3T0被拆為兩個(gè)8位的定時(shí)器/計(jì)數(shù)器;T1停止計(jì)數(shù)TMOD不能位尋址,只能用字節(jié)指令設(shè)置定時(shí)器工作方式,高4位定義T1,低4位定義T0。復(fù)位時(shí),TMOD所有位均置0。項(xiàng)目6中斷及定時(shí)系統(tǒng)M1M0工作方式說(shuō)明00方式013位定時(shí)器/計(jì)數(shù)器01692.定時(shí)器/計(jì)數(shù)器控制寄存器TCON(TimerControlRegister)項(xiàng)目6中斷及定時(shí)系統(tǒng)2.定時(shí)器/計(jì)數(shù)器控制寄存器TCON(TimerContr701)TF1:定時(shí)器1溢出標(biāo)志位。當(dāng)定時(shí)器1計(jì)數(shù)滿產(chǎn)生溢出時(shí),由硬件自動(dòng)置TF1=1。在中斷允許時(shí),向CPU發(fā)出定時(shí)器1的中斷請(qǐng)求,進(jìn)入中斷服務(wù)程序后,由硬件自動(dòng)清0。在中斷屏蔽時(shí),TF1可作查詢(xún)測(cè)試用,此時(shí)只能由軟件清0。2)TR1:定時(shí)器1運(yùn)行控制位。由軟件置1或清0來(lái)啟動(dòng)或關(guān)閉定時(shí)器1。當(dāng)GATE=1,且為高電平時(shí),TR1置1啟動(dòng)定時(shí)器1;當(dāng)GATE=0時(shí),TR1置1即可啟動(dòng)定時(shí)器1。3)TF0:定時(shí)器0溢出標(biāo)志位。其功能及操作情況同TF1。4)TR0:定時(shí)器0運(yùn)行控制位。其功能及操作情況同TR1。5)IE1:外部中斷1()請(qǐng)求標(biāo)志位。6)IT1:外部中斷1觸發(fā)方式選擇位。7)IE0:外部中斷0()請(qǐng)求標(biāo)志位。8)IT0:外部中斷0觸發(fā)方式選擇位。TCON中的低4位用于控制外部中斷,與定時(shí)器/計(jì)數(shù)器無(wú)關(guān)。當(dāng)系統(tǒng)復(fù)位時(shí),TCON的所有位均清0。TCON的字節(jié)地址為88H,可以位尋址,清溢出標(biāo)志位或啟動(dòng)定時(shí)器都可以用位操作指令。如SETBTR1、JBCTF1,LOOP等等。項(xiàng)目6中斷及定時(shí)系統(tǒng)1)TF1:定時(shí)器1溢出標(biāo)志位。當(dāng)定時(shí)器1計(jì)數(shù)滿產(chǎn)生溢出時(shí)716.2.4定時(shí)器/計(jì)數(shù)器的工作方式通過(guò)對(duì)定時(shí)器/計(jì)數(shù)器方式控制寄存器TMOD的介紹,已經(jīng)知道定時(shí)器/計(jì)數(shù)器有四種工作方式。1.工作方式0當(dāng)TMOD的M1、M0位為00時(shí),定時(shí)器/計(jì)數(shù)器就工作在方式0。方式0的計(jì)數(shù)器是由TL0的低5位與TH0的8位組成的13位計(jì)數(shù)器結(jié)構(gòu),TL0的高3位未用。當(dāng)TL0的低5位進(jìn)位時(shí),TH0加1;TH0的最高位進(jìn)位,產(chǎn)生溢出,使TF0=1,向CPU申請(qǐng)中斷。若CPU響應(yīng)中斷,系統(tǒng)自動(dòng)將TF0復(fù)位。圖6-9方式0中的13位計(jì)數(shù)器分配項(xiàng)目6中斷及定時(shí)系統(tǒng)6.2.4定時(shí)器/計(jì)數(shù)器的工作方式圖6-9方式0中的1372當(dāng)=0時(shí),多路開(kāi)關(guān)連接12分頻器輸出,T0對(duì)機(jī)器周期計(jì)數(shù),此時(shí)T0為定時(shí)器。其定時(shí)時(shí)間為:當(dāng)=1時(shí),多路開(kāi)關(guān)與T0(P3.4)相連,外部計(jì)數(shù)脈沖由T0腳輸入,當(dāng)外部信號(hào)電平發(fā)生由0到1的負(fù)跳變時(shí),計(jì)數(shù)器加1,此時(shí)T0為計(jì)數(shù)器。定時(shí)器初值計(jì)數(shù):設(shè)定時(shí)時(shí)間為t,計(jì)數(shù)初值為X,晶體振蕩器產(chǎn)生的振蕩信號(hào)的頻率為fosc,則定時(shí)時(shí)間的計(jì)算公式為:t=(計(jì)數(shù)最大值-X)×12/fosc方式0為13位計(jì)數(shù)器結(jié)構(gòu),其計(jì)數(shù)最大值為213=8192。設(shè)fosc為12MHz,經(jīng)12分頻后,每個(gè)計(jì)數(shù)脈沖的周期為1μs。當(dāng)計(jì)數(shù)初值X為0時(shí),定時(shí)時(shí)間最長(zhǎng),則方式0的最大定時(shí)時(shí)間為:tmax=(213-0)×12/fosc=8192×1μs=8.192ms項(xiàng)目6中斷及定時(shí)系統(tǒng)當(dāng)=0時(shí),多路開(kāi)關(guān)連接12分頻器輸出,T073計(jì)數(shù)器初值計(jì)算:設(shè)計(jì)數(shù)次數(shù)為C,計(jì)數(shù)初值為X,則計(jì)數(shù)次數(shù)的計(jì)算公式如下:C=計(jì)數(shù)最大值-X當(dāng)計(jì)數(shù)初值X為0時(shí),計(jì)數(shù)次數(shù)最多,則方式0的最大計(jì)數(shù)次數(shù)為:Cmax=213-0=8192項(xiàng)目6中斷及定時(shí)系統(tǒng)計(jì)數(shù)器初值計(jì)算:項(xiàng)目6中斷及定時(shí)系統(tǒng)74【例6.2】用定時(shí)器0的工作方式0實(shí)現(xiàn)1ms的定時(shí),在P1.0引腳上輸出周期為2ms的方波。設(shè)晶振頻率為12MHz。解:第一步,設(shè)置工作方式TMOD。根據(jù)題意用定時(shí)器0的工作方式0實(shí)現(xiàn)1ms的定時(shí),則:M1M0=00,T0工作在方式0;=0,此時(shí)T0為定時(shí)狀態(tài);GATE=0,此時(shí)定時(shí)器與外部中斷無(wú)關(guān);其余各位可以任意設(shè)置,這里取0值,即TMOD=00000000B=00H。第二步,計(jì)算初值,此時(shí)晶振頻率為12MHz。根據(jù)公式,得出得=1C18H=0001110000011000B因13位計(jì)數(shù)器中TL0的高3位未用,應(yīng)填寫(xiě)0,TH0占高8位,所以X的實(shí)際填寫(xiě)值應(yīng)為:=1110000011000=E018H即:TH0=E0H,TL0=18H。項(xiàng)目6中斷及定時(shí)系統(tǒng)【例6.2】用定時(shí)器0的工作方式0實(shí)現(xiàn)1ms的定時(shí),在P1.75第三步,程序采用查詢(xún)的方式,如下:ORG00HLJMPMAINORG0100HMAIN:MOVTMOD,#00H;設(shè)定時(shí)器0為工作方式0SETBTR0;啟動(dòng)定時(shí)器LOOP:M

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論