第四章 定時器、串行口及中斷系統(tǒng).ppt_第1頁
第四章 定時器、串行口及中斷系統(tǒng).ppt_第2頁
第四章 定時器、串行口及中斷系統(tǒng).ppt_第3頁
第四章 定時器、串行口及中斷系統(tǒng).ppt_第4頁
第四章 定時器、串行口及中斷系統(tǒng).ppt_第5頁
已閱讀5頁,還剩153頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、第4章定時器、串行口及中斷系統(tǒng),4.1 MCS-51單片機的中斷系統(tǒng) 4.2 MCS-51單片機片內(nèi)定時器/計數(shù) 4.3 MCS-51單片機片內(nèi)串行口,4.1 MCS-51單片機的中斷系統(tǒng),4.1.1 中斷的概念 4.1.1.1 中斷系統(tǒng)的基本概念 中斷是指CPU正在處理某任務(wù)的過程中, 由于計算機系統(tǒng)內(nèi)、外的某種原因,發(fā)生的某一事件請求CPU及時處理,于是CPU暫時中止當(dāng)前的工作,自動轉(zhuǎn)去處理所發(fā)生的事件。處理完該事件后,再返回到原來被中止的斷點處繼續(xù)工作,這樣的過程稱為中斷。,中斷系統(tǒng)是計算機的重要指標之一。可以解決快速CPU與慢速外設(shè)之間的矛盾,使之能并行工作??梢约皶r處理隨機參數(shù)及故障

2、,提高可靠性。,某人看書 執(zhí)行主程序 日常事務(wù) 電話鈴響 中斷信號INT=0 中斷請求 暫??磿?暫停執(zhí)行主程序 中斷響應(yīng) 書中作記號 當(dāng)前PC入棧 保護斷點 電話談話 執(zhí)行I/O程序 中斷服務(wù) 繼續(xù)看書 返回主程序 中斷返回,與中斷相關(guān)的概念: (1)中斷系統(tǒng):實現(xiàn)中斷功能的硬件系統(tǒng)和軟件系統(tǒng)統(tǒng)稱為中斷系統(tǒng)。 (2)中斷源:產(chǎn)生中斷的請求源稱為中斷源。 (3)中斷請求:中斷源向CPU提出的處理請求,稱為中斷請求或中斷申請。 (4)中斷響應(yīng)過程:CPU暫時中止自身的事物,轉(zhuǎn)去處理事件的過程,稱為CPU的中斷響應(yīng)過程。 (5)中斷服務(wù):對事件的整個處理過程,稱為中斷服務(wù)(或中斷處理)。 (6)中

3、斷返回:中斷處理完畢,在返回到原來被中止的地方,稱為中斷返回。,中斷系統(tǒng)的一般功能 中斷系統(tǒng)一般應(yīng)具有如下功能: 1. 實現(xiàn)中斷及返回 當(dāng)某中斷源發(fā)出中斷申請時,若允許響應(yīng),CPU必須在現(xiàn)行的指令執(zhí)行完后,把斷點處的PC值壓入堆棧保存,稱為保護斷點。(硬件自動完成) 保護現(xiàn)場響應(yīng)中斷后,將有關(guān)的寄存器內(nèi)容和狀態(tài)標志位壓入堆棧保存。 恢復(fù)現(xiàn)場執(zhí)行中斷服務(wù)程序后,恢復(fù)原保留的寄存器的內(nèi)容和標志位的狀態(tài),并執(zhí)行返回指令“RETI”(用戶編程實現(xiàn)),中斷及返回過程如下圖所示:,2實現(xiàn)優(yōu)先權(quán)排隊 優(yōu)先權(quán)給各中斷源規(guī)定一個優(yōu)先級別。 當(dāng)同時有多個中斷請求信號,先響應(yīng)優(yōu)先級別高的中斷請求。 高優(yōu)先級中斷請求

4、信號可中斷低優(yōu)先級中斷服務(wù)。 計算機按中斷源級別高低逐次響應(yīng)的過程稱優(yōu)先權(quán)排隊。 這個過程可以通過硬件電路來實現(xiàn),也可以通過程序查詢來實現(xiàn)。,3、實現(xiàn)中斷嵌套 當(dāng)CPU正在處理一個中斷請求的時候,外部又發(fā)生了一個優(yōu)先級比它高的中斷事件,請求CPU及時處理。于是,CPU暫時中斷當(dāng)前的中斷服務(wù)工作,轉(zhuǎn)而處理所發(fā)生的事件。處理完畢,再回到原來被中斷的地方,繼續(xù)原來的中斷處理工作。這樣的過程,稱為中斷嵌套,這樣的中斷系統(tǒng)稱為多級中斷系統(tǒng)。,MCS-51具有2個中斷優(yōu)先級,可以實現(xiàn)2級中斷嵌套。,4. 實現(xiàn)中斷的撤除 在響應(yīng)中斷后,返回主程序之前,中斷請求應(yīng)該撤除,否則,將影響對其它中斷申請的響應(yīng)。 M

5、CS-51中斷系統(tǒng)只能對一部分中斷申請,在響應(yīng)后自動撤除,使用中應(yīng)注意。 調(diào)用中斷服務(wù)程序與調(diào)用子程序的區(qū)別: 1、事先安排和隨機發(fā)生 2、軟件調(diào)用和硬件自動完成,4.1.2.2中斷系統(tǒng)的優(yōu)勢,中斷系統(tǒng)是計算機的重要組成部分,中斷的使用消除了CPU在查詢方式中的等待現(xiàn)象,大大提高了CPU的工作效率,改善了計算機的性能,具體表現(xiàn)在以下幾個方面: (1)有效地解決了快速CPU與慢速外設(shè)之間的通信矛盾,可使CPU與多個外設(shè)并行工作,大大提高了工作效率。 (2) 在實時控制系統(tǒng)中,外設(shè)對CPU的服務(wù)請求是隨機的。中斷系統(tǒng)可以及時處理控制系統(tǒng)中許多隨機產(chǎn)生的數(shù)據(jù)與信息,使系統(tǒng)具備實時處理的能力,提高了控

6、制系統(tǒng)的性能。 (3) 系統(tǒng)工作時會出現(xiàn)一些如電源斷電之類的突發(fā)故障,中斷系統(tǒng)可以使故障發(fā)生時自動運行處理程序,系統(tǒng)具備了處理故障的能力,提高了系統(tǒng)自身的可靠性。,4.1.2 MCS-51中斷系統(tǒng)的結(jié)構(gòu)及中斷控制,4.1.2.1 MCS-51中斷系統(tǒng)結(jié)構(gòu) MCS-51中斷系統(tǒng)的結(jié)構(gòu)如圖所示:,MCS-51的中斷系統(tǒng)有5個中斷源(MCS-52有 6個),2個優(yōu)先級。5個中斷源分別為: (1)2個外部中斷請求:外部中斷0 ()、外部中斷1(),分別由從P3.2、 P3.2引腳引入,低電平有效、脈沖下降沿有效可選。 (2)2個片內(nèi)定時器/計數(shù)器溢出中斷請求:定時器/計數(shù)器0溢出中斷(T0)、定時器/

7、計數(shù)器1溢出中斷(T1),分別在定時器T0、T1溢出時發(fā)出中斷申請。 (3)串行中斷(TXD/RXD):一次串行發(fā)送/接收完成后,發(fā)出中斷申請。 5個中斷均可由軟件設(shè)定為允許中斷或禁止中斷, 也可由軟件設(shè)定為高級中斷和低級中斷。,與中斷有關(guān)的特殊功能寄存器有4個,分別為中斷源寄存器(即專用寄存器TCON和SCON的相關(guān)位)、中斷允許控制IE和中斷優(yōu)先級控制IP。MCS-51單片機有5個中斷源,可提供兩個中斷優(yōu)先級,即可實現(xiàn)二級中斷嵌套。,4.1.2.2 MCS-51中斷控制,1、 中斷允許控制 CPU對中斷系統(tǒng)所有中斷,以及某個中斷源的開放和屏蔽是由中斷允許寄存器IE控制的。IE字節(jié)地址A8H

8、,位地址為AFHA8H,IE位結(jié)構(gòu)如下表所示:,各位的含義如下: EX0(IE.0):外部中斷0允許位。EX0=0,禁止外部中斷0中斷;EX0=1允許外部中斷0中斷。 ET0(IE.1):定時/計數(shù)器T0中斷允許位。ET0=0,禁止T0中斷;ET0=1,允許T0中斷。 EX1(IE.2):外部中斷1允許位。EX1=0,禁止外部中斷1中斷;EX1=1,允許外部中斷1中斷。 ET1(IE.3):定時/計數(shù)器T1中斷允許位。ET1=0,禁止T1中斷;ET1=1,允許T1中斷。 ES(IE.4):串行口中斷允許位。ES=0,禁止串行口中斷;ES=1允許串行口中斷。 EA (IE.7):CPU中斷允許(

9、總允許)位。EA=0,屏蔽所有的中斷請求;EA=1,開放中斷。 通過EA可以使中斷允許形成兩級控制,即各中斷源首先受EA位的控制其次受各中斷源各自的中斷允許控制位控制(IE低5位)。,2、中斷優(yōu)先級控制 MCS-51單片機有兩個中斷優(yōu)先級,即可實現(xiàn)二級中斷服務(wù)嵌套。每個中斷源的中斷優(yōu)先級都是由中斷優(yōu)先級寄存器IP中的相應(yīng)位的狀態(tài)來規(guī)定的,相應(yīng)位置“1”,為高優(yōu)先級。相應(yīng)位置“0”,為低優(yōu)先級。中斷優(yōu)先級控制寄存器IP的字節(jié)地址B8H,位地址BFHB8H,。IP位結(jié)構(gòu)如下表所示:,各位的含義如下: PX0(IP.0):外部中斷0優(yōu)先級控制位. PT0(IP.1):定時/計數(shù)器T0優(yōu)先級控制位.

10、PX1(IP.2):外部中斷1優(yōu)先級控制位. PT1(IP.3):定時/計數(shù)器T1優(yōu)先級控制位. PS(IP.4):串行口優(yōu)先級控制位. 對同時發(fā)生多個中斷申請時CPU按以下原則處理: 不同優(yōu)先級的中斷同時申請先高后低 相同優(yōu)先級的中斷同時申請事先規(guī)定 正處理低優(yōu)先級中斷又接到高級別中斷停低轉(zhuǎn)高 正處理高優(yōu)先級中斷又接到低級別中斷高不理低,同一優(yōu)先級中的中斷申請不止一個時,則有中斷優(yōu)先權(quán)排隊問題。同一優(yōu)先級的中斷優(yōu)先權(quán)排隊,由中斷系統(tǒng)硬件確定的自然優(yōu)先級形成,其排列如下表所示:,3、 中斷標志與方式控制寄存器 MCS-51單片機的5個中斷源的中斷請求信號分別鎖存在特殊功能寄存器TCON和SCO

11、N中。 1)TCON TCON為定時/計數(shù)器控制寄存器,字節(jié)地址為88H,其中的中斷源請求標志位如下表所示:,各位的含義如下: 定時器/計數(shù)器T1的溢出中斷請求標志位(TF1): 當(dāng)啟動T1計數(shù)后,若T1計數(shù)器產(chǎn)生溢出,會由硬件使TF1置1,向CPU發(fā)中斷請求。若CPU響應(yīng)中斷,會自動由硬件將TF1清零。 定時器/計數(shù)器T0的溢出中斷請求標志位(TF0):含義與TF1相同。 外部中斷1的中斷請求標志(IE1): 如果檢測到外部中斷引腳P3.3上存在有效的中斷請求信號,就由硬件將IE1置1。如果CPU響應(yīng)該中斷請求,則自動由硬件將IE1清零。 外部中斷0的中斷請求標志位(IE0):其含義與IE1

12、類同。,外部中斷1的中斷觸發(fā)方式控制位(IT1): IT1為1時,外部中斷1為邊沿觸發(fā)方式,若CPU檢測到外部中斷1的引腳P3.3有由高到低的跳變,就使IE1置1,請求中斷。 IT1為0時,外部中斷1為電平觸發(fā)方式,若CPU檢測到外部中斷1的引腳P3.3為低電平,則使IE1置1,請求中斷;如果P3.3為高電平,則使IE1置0。 外部中斷0的中斷觸發(fā)方式控制位(IT0):其含義與IT1類同。,2、SCON 兩個串行口發(fā)送接收中斷標志占用了SCON寄存器中的2位(TI和RI)。SCON是串行口控制寄存器,字節(jié)地址為98H。SCON寄存器的位格式如下表所示:,各位的含義如下: 串行口內(nèi)部發(fā)送中斷請求

13、標志位(TI): 當(dāng)串行口發(fā)送完一個字符后,由內(nèi)部硬件使發(fā)送中斷標志TI置位。產(chǎn)生中斷請求標志,CPU響應(yīng)中斷時,并不復(fù)位TI,TI必須由用戶在中斷服務(wù)程序中用軟件清0(如:CLR TI )。 串行口內(nèi)部接收中斷請求標志位(RI): 當(dāng)串行口接收到一個字符后,由內(nèi)部硬件使接收中斷請求標志位RI置位。產(chǎn)生中斷請求標志,同樣CPU響應(yīng)中斷時,并不復(fù)位RI,RI必須由用戶在中斷服務(wù)程序中用軟件清0(如:CLR RI ) 。,4.1.2.3 MCS-51中斷響應(yīng)及中斷處理過程 一個完整的中斷處理的基本過程應(yīng)該包括:中斷請求、中斷響應(yīng)、中斷處理以及中斷返回。,一、 中斷請求 中斷請求是中斷源(或者通過接

14、口電路)向CPU發(fā)出請求中斷的信號。 一般單片機提供有多條中斷請求線,當(dāng)中斷源有服務(wù)要求時,可通過中斷請求線,向CPU發(fā)出信號,請求CPU中斷。 中斷請求信號可以是電平信號,也可以是脈沖信號。應(yīng)該一直保持到CPU做出反應(yīng)。,二、 中斷響應(yīng) 中斷響應(yīng)是在滿足CPU的中斷響應(yīng)條件之后,CPU對中斷源中斷請求的回答。 1CPU的中斷響應(yīng)條件 (1) 有中斷源發(fā)出中斷申請; (2) 中斷總允許位EA1,即CPU允許所有中斷源申請中斷; (3) 申請中斷的中斷源的中斷允許位為1,即此中斷源可以向CPU申請中斷。,有下列任何一種情況存在,中斷響應(yīng)都會受到阻斷:,(1) CPU正在執(zhí)行一個同級或高一級的中斷

15、服務(wù)程序; (2) 當(dāng)前的機器周期不是正在執(zhí)行的指令的最后一個周期,即正在執(zhí)行的指令完成前,任何中斷請求都得不到響應(yīng); (3) 正在執(zhí)行的指令是返回(RETI)指令或者對專用寄存器IE、IP進行讀寫的指令,此時,在執(zhí)行RETI或者讀寫IE或IP之后,不會馬上響應(yīng)中斷請求。 由于存在中斷阻斷的情況而未被及時響應(yīng),待上述封鎖中斷的條件被撤消之后,由于中斷標志還存在,仍會響應(yīng)。,2中斷響應(yīng)過程 單片機響應(yīng)中斷時: 先置位相應(yīng)的優(yōu)先級狀態(tài)觸發(fā)器(該觸發(fā)器指示CPU開始處理的中斷的優(yōu)先級別,它為1屏蔽所有同級或低級中斷); 然后執(zhí)行一條硬件子程序調(diào)用,使程序轉(zhuǎn)移到相應(yīng)的入口:清零中斷請求標志(RI、TI

16、除外),由硬件將PC當(dāng)前值壓棧(不保護PSW),將中斷服務(wù)程序入口地址送PC。,MCS-51中斷入口地址和中斷輸入引腳是一一對應(yīng)的,從哪個中斷輸入引腳進入的中斷請求,它的中斷服務(wù)程序入口地址一定是某個固定值。 如從INT0(P3.2)引腳進入的中斷請求,轉(zhuǎn)向的中斷入口地址是0003H單元。,三、中斷處理 中斷處理(又稱中斷服務(wù))程序從入口地址開始執(zhí)行,直到返回指令“RETI”為止,這個過程稱為中斷處理。 各中斷源入口地址間只有幾個字節(jié),一般無法放下中斷服務(wù)程序,常在這幾個字節(jié)中放一條轉(zhuǎn)移指令轉(zhuǎn)至真正的中斷服務(wù)程序。 中斷服務(wù)一般包括三部分內(nèi)容: 保護現(xiàn)場 處理中斷源的請求 恢復(fù)現(xiàn)場 一般累加器

17、、PSW寄存器和一些其它寄存器需要保護現(xiàn)場,保護時要注意入棧和出棧的順序,要保證一一對應(yīng),“對稱”使用。否則容易造成現(xiàn)場破壞,甚至使程序發(fā)生“紊亂”。,四、 中斷返回 中斷返回是指執(zhí)行完中斷服務(wù)程序后,程序返回到斷點 ,繼續(xù)執(zhí)行原來的程序。 中斷返回由專門的中斷返回指令“RETI”實現(xiàn)。 注意:不能用子程序返回指令“RET”代替中斷返回指令“RETI”。 CPU執(zhí)行RETI指令后,先清零響應(yīng)中斷時置位的優(yōu)先級狀態(tài)觸發(fā)器,然后從堆棧中彈出兩個字節(jié)到PC,CPU從原來中斷處重新執(zhí)行被中斷的程序。,五、中斷響應(yīng)時間 不同的情況對中斷響應(yīng)的時間不同: (1) 最短的響應(yīng)時間,需要3個機器周期。 (2)

18、如果遇到中斷受阻的情況,響應(yīng)時間會更長一些。 (3)如果有兩個以上中斷源同時申請中斷,則響應(yīng)時間將更長。 一般情況下,可不考慮響應(yīng)時間,但在精確定時控制的場合需要考慮此問題。,六、 中斷請求的撤除 CPU響應(yīng)某中斷請求后,在中斷返回前,應(yīng)撤消該中斷請求。 (1)定時器0或1溢出中斷,CPU在響應(yīng)中斷后,中斷請求自動撤除。 (2)邊沿激活的外部中斷,CPU在響應(yīng)中斷后,硬件自動清除有關(guān)的中斷請求 。 (3)串行口中斷,CPU響應(yīng)中斷后,靠軟件來清除相應(yīng)的標志。 電平激活的外部中斷撤除方法較復(fù)雜(課本P97圖4-4)。,補:外部中斷擴展方法,89C51單片機有兩個外部中斷請求輸入端(INT0和IN

19、T1)。實際應(yīng)用中,若外部中斷源有兩個以上,則需要擴展外部中斷源。 利用定時器擴展外部中斷源 中斷加查詢擴展外部中斷源,利用定時器擴展外部中斷源,89C51單片機有兩個定時器,具有兩個內(nèi)部中斷標志和外部計數(shù)輸入引腳。 當(dāng)定時器設(shè)置為計數(shù)方式時,計數(shù)初值設(shè)置為滿量程FFH。一旦外部信號從計數(shù)器引腳輸入一個負跳變信號,計數(shù)器加1產(chǎn)生溢出中斷,從而轉(zhuǎn)去處理該外部中斷源的請求。 將外部中斷源信號接至T0(P3.4)或T1(P3.5)引腳;該定時器的溢出中斷標志及中斷服務(wù)程序作為擴充外部中斷源的標志和中斷服務(wù)程序。,中斷加查詢擴展外部中斷源,每一根中斷輸入線可以通過“線或”的關(guān)系連接多個外部中斷源,同時

20、利用輸入端口線作為各個中斷源的識別線。 中斷服務(wù)程序為一個中斷查詢程序。,DV1: 裝置1的中斷服務(wù)程序 AJMP EXIT DV2: 裝置2的中斷服務(wù)程序 AJMP EXIT DV3: 裝置3的中斷服務(wù)程序 AJMP EXIT DV4: 裝置4的中斷服務(wù)程序 AJMP EXIT,ORG 0003H LJMP INTRP;中斷服務(wù)入口 ORG 1000H INTRP:PUSH PSW PUSH A JBP1.0, DV1 JBP1.1, DV2 JBP1.2, DV3 JBP1.3, DV4 EXIT: POPA POP PSW RETI,【例4.1】若規(guī)定外部中斷1為邊沿觸發(fā)方式,高優(yōu)先級,

21、在中斷服務(wù)程序中將寄存器B的內(nèi)容進行半字節(jié)交換,B的初值設(shè)為21H。試編寫主程序與中斷服務(wù)程序。 ORG 0000H LJMP MAIN ORG 0013H ;中斷矢量 LJMP INTS ORG 0030H MAIN:SETB EA ;總中斷允許“開” SETB EX1 ;外部中斷1允許“開” SETB PX1 ;設(shè)置為高優(yōu)先級 SETB IT1 ;邊沿觸發(fā)方式 MOV B,#21H ;給 B 寄存器賦初值 HERE:SJMP HERE ;原地等待中斷申請 INTS:MOV A,B ;自B寄存器中取數(shù) SWAP A ;半字節(jié)交換 MOV B,A ;存回B RETI ;中斷返回 思考:此例中中

22、斷服務(wù)程序是否可以直接安排在中斷服務(wù)入口?,【例4.2】電路結(jié)構(gòu)如下圖所示,要求每次按動按鍵,使外接發(fā)光二極管LED改變一次亮滅狀態(tài), 輸入按鍵信號,P1.0輸出改變LED狀態(tài),對于外部中斷,可以有兩種方式:邊沿觸發(fā)方式和電平觸發(fā)方式。這里分兩種情況分別介紹。,(1)邊沿觸發(fā)方式:每次按鍵K1按下,產(chǎn)生的一次跳變,引起一次外部中斷0請求,在外部中斷0服務(wù)程序中,將P1.0的輸出狀態(tài)反轉(zhuǎn),為了避免開關(guān)抖動引起的多次中斷可以考慮利用軟件延時或者硬件去抖動法。,ORG 0000H ;復(fù)位入口 AJMP MAIN ORG 0003H ;中斷入口 AJMP PINT0 ORG 0100H ;主程序 MA

23、IN:MOV SP,#40H ;設(shè)棧底 SETB EA ;開總允許開關(guān) SETB EX0 ;開INT0中斷 SETB IT0 ;負跳變觸發(fā)中斷 H: SJMP H ;等待(執(zhí)行其它任務(wù)) ORG 0200H ;中斷服務(wù)程序 PINT0:CPL P1.0 ;改變LED LCALL Delay10ms;軟件延時去開關(guān)抖動 RETI ;返回主程序,(2) 電平觸發(fā): 為了避免一次按鍵引起多次中斷響應(yīng),應(yīng)該在每次按鍵按下引起的中斷服務(wù)程序中執(zhí)行完P(guān)1.0的電平反轉(zhuǎn)后先不退出中斷服務(wù)程序,而是利用軟件等待按鍵釋放,按鍵釋放后才結(jié)束中斷服務(wù)程序。,ORG 0000H ;復(fù)位入口 AJMP MAIN ORG

24、0003H ;中斷入口 AJMP PINT0 ORG0100H ;主程序 MAIN:MOV SP,#40H;設(shè)棧底 SETB EA ;開總允許開關(guān) SETB EX0 ;開INT0中斷 CLR IT0 ;低電平觸發(fā)中斷 H: SJMP H ;等待(執(zhí)行其它任務(wù)) ORG 0200H ;中斷服務(wù)程序 PINT0:CPL P1.0 ;改變LED WAIT:JNB P3.2,WAIT;等按鍵釋放 RETI ;返回主程序,有關(guān)中斷系統(tǒng)的程序包含中斷控制程序和中斷服務(wù)程序兩部分。 一、中斷初始化程序(中斷控制程序) 中斷初始化程序?qū)嵸|(zhì)上就是對TCON、SCON、IE和IP寄存器的管理和控制。 中斷初始化程

25、序一般不獨立編寫,而是包含在主程序中,中斷初始化程序需完成以下操作: 1開中斷; 2某一中斷源中斷請求的允許與禁止(屏蔽); 3確定各中斷源的優(yōu)先級別; 4若是外部中斷請求,則要設(shè)定觸發(fā)方式是電平觸發(fā)還是邊沿觸發(fā)。,例1 設(shè)規(guī)定外部中斷0為電平觸發(fā)方式,高優(yōu)先級,試寫出有關(guān)的初始化程序。解:可用兩種方法完成。 方法1,用位操作指令完成: SETB EA ;開中斷允許總控制位 SETB EX0 ;外中斷0開中斷 SETB PX0;外中斷0高優(yōu)先級 CLR IT0 ;電平觸發(fā) 方法2,用其它指令也可完成同樣功能: MOV IE,#81H;同時置位EA和EX0 ORL IP,#01H;置位PX0 A

26、NL TCON,#0FEH ;使IT0為0,二、中斷服務(wù)程序 中斷服務(wù)程序是一種為中斷源的特定情況要求服務(wù)的獨立程序段,以中斷返回指令RETI結(jié)束。 中斷服務(wù)程序的固定入口: 0003H、000BH、0013H、001BH、0023H 中斷服務(wù)程序和子程序一樣,在調(diào)用和返回時,也有一個保護斷點和現(xiàn)場的問題。 在中斷響應(yīng)過程中,斷點的保護主要由硬件電路自動實現(xiàn)。,單片機原理與應(yīng)用,中斷時,現(xiàn)場保護由中斷服務(wù)程序來完成。因此在編寫中斷服務(wù)程序時必須考慮保護現(xiàn)場的問題。現(xiàn)場一般包括累加器A、工作寄存器R0-R7以及程序狀態(tài)字PSW等。 在編寫中斷服務(wù)程序時還應(yīng)注意以下三點: (1) 各中斷源入口地址

27、之間只相隔8個字節(jié)。 (2) 在執(zhí)行當(dāng)前中斷程序時,如何禁止更高優(yōu)先級中斷源的中斷請求。 (3) 在多級中斷情況下,保護現(xiàn)場與中斷嵌套的安排。,單片機原理與應(yīng)用,三、 應(yīng)用舉例 在設(shè)計中斷服務(wù)程序時,是按中斷源的要求,根據(jù)中斷處理所要完成的任務(wù)來進行的。 保護現(xiàn)場和恢復(fù)現(xiàn)場一般采用 PUSH和POP指令來實現(xiàn)。PUSH和POP指令一般成對出現(xiàn),以保證寄存器的內(nèi)容不會改變。 要注意堆棧操作的“先進后出,后進先出”的原則。,單片機原理與應(yīng)用,例2 設(shè)在主程序中用到了寄存器PSW、ACC、B、DPTR,而在執(zhí)行中斷服務(wù)程序時需要用到這些寄存器。SERVICE:PUSHPSW;保護程序狀態(tài)字 PUSH

28、ACC;保護累加器A PUSHB;保護寄存器B PUSHDPL;保護數(shù)據(jù)指針低字節(jié) PUSHDPH;保護數(shù)據(jù)指針高字節(jié) ;中斷處理 POPDPH;恢復(fù)現(xiàn)場 POPDPL POP B POPACC POPPSW RETI,單片機原理與應(yīng)用,多個故障源進行顯示,例3 圖為多個故障顯示電路,當(dāng)系統(tǒng)無故障時,4個故障源輸入端X1X4全為低電平,顯示燈全滅;當(dāng)某部分出現(xiàn)故障,其對應(yīng)的輸入由低電平變?yōu)楦唠娖?,從而引起MCS51單片機中斷,中斷服務(wù)程序的任務(wù)是判定故障源,并用對應(yīng)的發(fā)光二極管LED1LED4進行顯示。,單片機原理與應(yīng)用,編程如下: ORG 0000H;程序開始 AJMP MAIN;轉(zhuǎn)主程序

29、ORG 0003H;外部中斷INT0入口地址 AJMP SERVICE ;轉(zhuǎn)中斷服務(wù)程序 MAIN:0RL P1,#0FFH;燈全滅,準備讀入 SETB IT0 ;選擇邊沿觸發(fā)方式 SETB EX0;允許INT0中斷 SETB EA;CPU開中斷 AJMP $;等待中斷,單片機原理與應(yīng)用,SERVICE:JNB P1.3,N1;若X1無故障轉(zhuǎn) CLR P1.4;若X1有故障,LED1亮 N1:JNB P1.2,N2;若X2無故障轉(zhuǎn) CLR P1.5;若X2有故障,LED2亮 N2:JNB P1.1,N3;若X3無故障轉(zhuǎn) CLR P1.6;若X3有故障,LED3亮 N3:JNB P1.0,N4;

30、若X4無故障轉(zhuǎn) CLR P1.7;若X4有故障,LED4亮 N4: RETI,單片機原理與應(yīng)用,這個程序主要分為主程序和中斷服務(wù)程序兩部分。 主程序主要完成初始化的工作 中斷服務(wù)程序主要檢測故障源是否發(fā)生,如果某故障源發(fā)生,則將相應(yīng)的指示燈點亮。 在此主程序和中斷服務(wù)程序中,沒有存在使用寄存器之間的干涉問題。因此,在中斷服務(wù)程序中不用保護現(xiàn)場和恢復(fù)現(xiàn)場。,4.2 MCS-51單片機片內(nèi)定時器/計數(shù)器,4.2.1 定時器/計數(shù)器的結(jié)構(gòu)及基本原理 4.2.1.1 定時器/計數(shù)器的結(jié)構(gòu)及其工作原理 MCS-51單片機的定時/計數(shù)器的結(jié)構(gòu)如下圖所示。,定時計數(shù)器結(jié)構(gòu)示意,MCS-51單片機內(nèi)部有兩個1

31、6位的可編程定時/計數(shù)器,稱為定時器0(T0)和定時器1(T1)。定時器0由兩個8位專用寄存器TH0(作T0的高8位)和TL0(作T0的低8位)組成,定時器1由兩個8位專用寄存器TH1和TL1組成。 定時/計數(shù)器本質(zhì)上是加1計數(shù)器,加1計數(shù)器的初值可以由程序設(shè)定,設(shè)置的初值不同,定時的時間或計數(shù)值就不同??梢酝ㄟ^軟件設(shè)置定時/計數(shù)器為定時工作方式和計數(shù)工作方式。 當(dāng)定時/計數(shù)器設(shè)置為定時工作方式時,加1計數(shù)器對內(nèi)部機器周期計數(shù),每個機器周期計數(shù)器加1,直至計滿溢出,發(fā)出定時器溢出中斷請求信號。這時,定時器的計數(shù)頻率是片內(nèi)振蕩器頻率的十二分之一,計數(shù)值N乘以機器周期Tcy就是定時時間t。,當(dāng)定時

32、/計數(shù)器設(shè)置為計數(shù)工作方式時,加1計數(shù)器對來自輸入引腳T0(P3.4)和T1(P3.5)的外部脈沖信號計數(shù),在每個機器周期的S5P2期間采樣外部脈沖,若前一個機器周期采樣到高電平,后一個機器周期采樣到低電平,則將觸發(fā)計數(shù)器加1,更新的計數(shù)值將在下一個機器周期的S3P1期間裝入計數(shù)器。因此,單片機檢測一個從高電平到低電平的下降沿需要2個機器周期,要使下降沿能被檢測到,就得保證被采樣高、低電平分別至少維持一個機器周期的時間,即外部輸入信號的頻率不超過晶振頻率的1/24。如:當(dāng)晶振頻率為12MHz時,最高計數(shù)頻率不超過0.5MHz,即計數(shù)脈沖的周期要大于2微秒。,4.2.1.2 定時/計數(shù)器的工作方

33、式寄存器和控制寄存器,MCS-51單片機的可編程定時/計數(shù)器,除了具有計數(shù)寄存器THx和TLx以外,還有兩個寄存器TMOD和TCON用來控制其工作模式或者反映其工作狀態(tài)。 1.工作方式寄存器TMOD TMOD為定時/計數(shù)器T0、T1的工作方式控制寄存器,字節(jié)地址89H,只能按字節(jié)對它尋址。TMOD的位結(jié)構(gòu)如下表所示:,定時器T1,定時器T0,TMOD (89H),D7 D6 D5 D4 D3 D2 D1 D0,工作模式寄存器TMOD的位定義,TMOD各位定義及具體的意義,GATE:門控位,決定定時器/計數(shù)器的啟動開關(guān)信號(圖中的K2)是否受外部中斷請求信號的影響。 GATE=0,只要用軟件使T

34、R0(或TR1)置1就可以啟動定時器,而不管INT0(或INT1)的電平是高還是低。 GATE=1,只有INT0(或INT1)引腳為高電平且由軟件使TR0(或TR1)置1時,才能啟動定時器工作。 門控位對定時計數(shù)器啟動開關(guān)信號的控制作用如下圖所示:,C/T :定時或計數(shù)功能選擇位 當(dāng)C/T=1時為計數(shù)方式; 當(dāng)C/T=0時為定時方式。 M1、M0:定時器/計數(shù)器工作方式選擇位,其值與工作方式對應(yīng)關(guān)系如下表所示。 系統(tǒng)復(fù)位時,寄存器TMOD的所有位被清零。,2. 控制寄存器TCON TCON是定時/計數(shù)器T0、T1的控制寄存器,字節(jié)地址88H,可以位尋址,TCON的位結(jié)構(gòu)如下表所示: 各位的含義

35、如下: TF1:定時器1溢出標志位。當(dāng)定時器1計滿數(shù)產(chǎn)生溢出時,由硬件自動置TF1為1,(在允許中斷的情況下)向CPU發(fā)出中斷請求信號。如果CPU響應(yīng)中斷則轉(zhuǎn)向中斷服務(wù)程序,硬件自動將該位清零。在中斷屏蔽時,CPU不響應(yīng)中斷無法用硬件將該位清零,可以用軟件對其清零。,TR1:定時器1運行控制位。使用軟件編程將TR1置1或清0可以控制定時/計數(shù)器的啟動與關(guān)閉。但是當(dāng)GATE1,需要同時滿足 為高電平的條件,將TR1置1才會啟動定時器1。 TF0:定時器0溢出標志位。其功能及操作情況同TF1。 TR0:定時器0運行控制位。其功能及操作情況同TR1。 TCON中的低4位IT0、IE0、IT1、IE1

36、與中斷有關(guān),已經(jīng)在上一節(jié)介紹過。 在系統(tǒng)復(fù)位時,寄存器TCON的所有位被清零。,4.2.2 定時器/計數(shù)器的四種工作方式,MCS-51單片機的定時器/計數(shù)器有4種工作方式,分別由TMOD寄存器中的M1、M0兩位的二進制編碼所決定,這里對這4種工作方式進行具體介紹。 4.2.2.1 方式0及其用法 當(dāng)M1 M0=00時,定時器/計數(shù)器設(shè)定為工作方式0,這時為13位的定時/計數(shù)器。其邏輯結(jié)構(gòu)如下圖所示。,在方式0下,T0和T1工作在13位的定時/計數(shù)器方式,計數(shù)器的這13位由THx的8位作高8位和TLx的低5位作低5位組成。當(dāng)TLx(x=0或1)的低5位計數(shù)溢出時就向高8位THx進位,THx溢出時

37、,置位TCON中的TFx標志,向CPU發(fā)出中斷請求,當(dāng)單片機進入中斷服務(wù)程序時,由內(nèi)部硬件自動清除該標志。 當(dāng) =0時(定時方式),多路開關(guān)與片內(nèi)振蕩器的12分頻輸出相連,工作在定時工作方式。其定時時間為: 定時時間=(213定時器初值)機器周期 根據(jù)上面的公式可以在已知定時時間的情況下求出所要設(shè)定的定時器初值。,當(dāng) =時(計數(shù)方式),多路開關(guān)與T0(P3.4)或T1(P3.5)相連,外部計數(shù)脈沖由引腳輸入,工作在計數(shù)工作方式。當(dāng)檢測到外部信號電平發(fā)生從到跳變時,計數(shù)器加1。 設(shè)x為計數(shù)器初值,則外部脈沖計數(shù)值為 N = 213x = 8192x x=8191時為最小計數(shù)值1,x=0時為最大計

38、數(shù)值8192,即計數(shù)范圍為18192。,非門控方式: 當(dāng)GATE0 控制權(quán)由 TRx 決定 TRx1 定時/計數(shù)開始 TRx 0 定時/計數(shù)停止,門控方式: 當(dāng)GATE1、TRx1 控制權(quán)由 INTx 決定 INTx1 定時/計數(shù)開始 INTx 0 定時/計數(shù)停止,啟動定時/計數(shù)方式:,定時器0模式0結(jié)構(gòu),應(yīng)用舉例 使用定時/計數(shù)器進行定時或計數(shù)之前,首先要通過軟件對它進行初始化。初始化包括下述步驟: 1.確定工作方式:對TMOD寄存器賦值; 2.置定時/計數(shù)器初值:對TH0、TL0或TH1、TL1寄存器賦初值,初值X的計算方法如下: 計數(shù)方式時:X = 213 N, N為計數(shù)值 定時方式時:

39、X = 213 - (t/T), t為定時值;T為機器周期 3.根據(jù)需要,開放定時器中斷:對IE寄存器賦值; 4.啟動定時/計數(shù)器:使TCON寄存器的TR0或TR1置位,或由加到引腳INTX上的外部信號電平啟動。,例:利用T0方式0產(chǎn)生寬度為2s,周期為2ms的定時負脈沖,由P1.7送出,系統(tǒng)采用12MHz的晶振。 解: 由于晶振為12MHz,機器周期為1s,這樣利用T0方式0產(chǎn)生周期為2ms定時的初值X為: X =213-t/T =213-210-3/(110-6) =8192-2000 =6192 =1830H =1100000110000B 則TH0=11000001B=0C1H,TL0

40、=00010000B=10H,初始化程序: MOV TMOD , #00H MOV TH0 , #0C1H MOV TL0 , #10H;初始化T0 MOV IE , #82H;開T0中斷 SETB TR0 ;啟動T0 T0溢出中斷服務(wù)程序:T0INT:CLR P1.7NOPSETBP1.7MOVTH0,#0C1H ;T0重置初值MOVTL0,#10HRETI,例:利用T0的工作模式0產(chǎn)生1ms定時,在P1.0引腳輸出周期為2ms的方波。設(shè)單片機晶振頻率fosc=12MHz。編程實現(xiàn)其功能。 解:要在P1.0引腳輸出周期為2ms的方波,只要使P1.0每隔1ms取反一次即可。 (1)選擇工作模式

41、: TMOD = 00H 即:M1M0=00,C/T=0,GATE=0,其余位為0,(2)計算1ms定時時T0的初值 (213X)1/12 10-612=110-3 s X=7193D=11100000 11000B T0的低5位:11000B=18H即 (TL0)=18H T0的高8位:11100000B=E0H即 (TH0)=E0H,(3)采用查詢方式的程序 程序清單: MOV TMOD,#00H ;設(shè)置T0為模式0 MOV TL0,#18H ;送初值 MOV TH0,#0E0H SETB TR0 ;啟動定時 LOOP:JBC TF0,NEXT ;查詢定時時間到否 SJMP LOOP NE

42、XT:MOV TL0,#18H ;重裝計數(shù)初值 MOV TH0,#0E0H CPL P1.0 ;取反 SJMP LOOP ;重復(fù)循環(huán),(4)采用定時器溢出中斷方式的程序 程序清單: 主程序 ORG 0000H RESET: AJMP MAIN ; 跳過中斷服務(wù)程序區(qū) ORG 000BH AJMP CTC0 ;中斷服務(wù)程序入口 ORG 0030H MAIN: MOV TMOD,#00H ;設(shè)置T0為模式0 MOV TL0,#18H ;送初值 MOV TH0,#0E0H SETB EA ;CPU開中斷 SETB ET0 ;T0中斷允許 SETB TR0 ;啟動定時 HERE:SJMP HERE ;

43、等待中斷,虛擬主程序,中斷服務(wù)程序 ORG 0120H CTC0: MOV TL0,#18H ;重新裝如初值 MOV TH0,#0E0H CPL P1.0 ;P1.0取反 RETI,【例4.3】定時器T0工作在方式0下最大的定時時間是多少?利用定時器T0的方式0產(chǎn)生定時脈沖,要求每隔5ms產(chǎn)生寬度為2 s的正脈沖,由P1.0輸出此定時序列脈沖信號(設(shè)時鐘頻率為12MHZ)。 解:由于時鐘頻率為12MHZ,機器周期為1s。 T0工作在方式0下最大的定時時間是: tmax = (8192 - T0初值) 機器周期 = (8192 - 0) 1s = 8.192ms,為了產(chǎn)生5ms的定時周期,先計算

44、出定時器T0初值。 因為:t = (8192 - T0初值) 機器周期 所以,當(dāng)t = 5ms時,則:(8192 - T0初值) 1s=5ms 解得:T0初值 = 3192 = 0 1100 0111 1000B (注意,這里一定要將其轉(zhuǎn)化為二進制數(shù)) 其中將 低5位 1 1000B=18H 賦給TL0 , 高8位 0110 0011B=63H 賦給TH0 。,定時時間到,要由P1.0送出寬度為2s的正脈沖,由 SETB P1.0指令的執(zhí)行時間為1個機器周期,當(dāng)晶振為12MHz時,這條指令的執(zhí)行時間為1s,需要補上一個單周期指令NOP,湊夠2s 。 這樣,每當(dāng)定時時間到時,利用T0產(chǎn)生中斷,在

45、中斷服務(wù)程序中,先執(zhí)行 SETB P1.0和NOP兩條指令,然后執(zhí)行CLR P1.0,最后重裝TH0和TL0的初值,就可以產(chǎn)生題目所要求的定時脈沖。 置T0為定時方式0,GATE=0,C/T=0, M1M0=00H, T1不用,可任意,一般取0,故TMOD=00H,并由TR0啟停T0。,參考程序如下: 方法一:采用查詢工作方式,編程如下: ORG 0000H AJMP MAIN ORG 0100H MAIN: CLR P1.0 MOV TMOD , #00H ;設(shè)定T0的工作方式 MOV TH0 , #63H ;給定時器T0送初值 MOV TL0 , #18H SETB TR0 ;啟動T0工作

46、 LOOP: JNB TF0 , $ ;$為當(dāng)前指令指針地址 CLR TF0 SETB P1.0 ;產(chǎn)生2個機器周期的正脈沖 NOP CLR P1.0 MOV TH0 , #63H ;重裝載TH0和TL0 MOV TL0 , #18H SJMP LOOP END,方法二:采用中斷工作方式,編程如下: ORG 0000H AJMP MAIN ORG 000BH AJMP T0INT ORG 0100H MAIN: CLR P1.0 MOV TH0 , #63H ;給定時器T0送初值 MOV TL0 , #18H MOV IE , #82H;開放T0中斷與中斷總開關(guān) SETB TR0;啟動T0 S

47、JMP $ ORG 0300H ;中斷服務(wù)程序 T0INT: SETB P1.0;產(chǎn)生2個機器周期的正脈沖 NOP CLR P1.0 MOV TH0 , #63H ;重裝載TH0和TL0 MOV TL0 , #18H RETI,4.2.2.2 方式1及其用法,當(dāng)M1M0=01時,定時器/計數(shù)器設(shè)定為工作方式1,這時由THx作為高8位、TLx作為低8位,組成了16位定時器/計數(shù)器。方式1除了計數(shù)位數(shù)與方式0不同外,其它均與工作方式0相同。 方式1邏輯結(jié)構(gòu)如圖所示,定時器0模式1結(jié)構(gòu),在定時模式下定時時間為: t =(216定時器初值)機器周期 計數(shù)模式請讀者結(jié)合方式0,自己分析,這里不再重復(fù)。

48、【例4.4】定時器T0工作在方式1下最大的計數(shù)周期是多少?用定時器T0的方式1產(chǎn)生50HZ的方波,由P1.0輸出此方波(設(shè)時鐘頻率為12MHZ)。 解:由于時鐘頻率為12MHZ,則機器周期為1s。 T0工作在方式1下最大的定時周期是: tmax=(216-T0初值)機器周期=(65536-0) 1s=65.536ms,由于周期為1/50Hz=20ms,則這種方波的正負脈沖寬度都為10ms。 由于晶振為12MHz,機器周期為1s,這樣利用T0方式1產(chǎn)生10ms定時的初值X為: X = 216 - t/T = 216 - 1010-3/(110-6) = 65536-10000 = 55536 =

49、 D8F0H =1101100011110000B 則TH0=11011000B=0D8H,TL0=11110000B=0F0H,采用中斷工作方式,編程如下: ORG 0000H AJMP MAIN ORG 000BH AJMP T0INT ORG 0100H MAIN: MOV TMOD , #01H MOV TH0 , #0D8H MOV TL0 , #0F0H MOV IE , #82H ;開放T0中斷與中斷總開關(guān) SETB TR0 SJMP $ ORG 0300H ;中斷服務(wù)程序 T0INT: CPL P1.0 MOV TH0 , #0D8H MOV TL0 , #0F0H RETI,

50、例:門控方式測量正脈沖寬度 解:INT1引腳輸入被檢測信號,記錄在正脈沖的時間內(nèi)包含機器脈沖個數(shù)。 1)設(shè)脈寬小于65.5ms 等待查詢INT1,正脈沖過后,讀出TH1、TL1。,START:MOV TMOD,#90H MOV TL1,#0H MOV TH1,#0H WAIT1:JBP3.3,WAIT1 SETB TR1 WAIT2 :JNBP3.3,WAIT2 WAIT3 : JBP3.3,WAIT3 CLRTR1 MOVR2,TL1 MOVR3,TH1 ,GATE=1門控,只有INT1=1才計數(shù),2)設(shè)脈寬大于65.5ms,中斷方式記錄TH1、TL1溢出中斷次數(shù)。,ORG 0000H AJ

51、MP START ORG 001BH INCR4;記錄溢出次數(shù) RETI ORG 0030H START:MOV TMOD,#90H MOV TL1,#0H MOV TH1,#0H WAIT1: JB P3.3,WAIT1 SETBTR1 SETBET1;開T1中斷 SETBEA,WAIT2: JNBP3.3,WAIT2 ;等待正脈沖到來 WAIT3: JBP3.3,WAIT3 ;等待正脈沖結(jié)束 CLRTR1;關(guān)閉T1 MOVIE,#00;關(guān)閉中斷 MOVR2,TL1;讀出T1 MOVR3,TH1 LCALL PPS;計算脈寬 HERE:SJMPHERE;其他任務(wù) PPS:;計算脈寬子程序,計

52、算脈寬的子程序的計算式如下: 脈寬t = (R4 216 + R3 R2 ) T(T為機器周期),4.2.2.3 方式2及其用法,當(dāng)M1M0=10時,定時器/計數(shù)器設(shè)定為工作方式2。其邏輯結(jié)構(gòu)如圖所示。,定時器0模式2結(jié)構(gòu),定時/計數(shù)器工作方式2具有自動重裝載功能。工作方式0和工作方式1的最大缺點就是計數(shù)溢出后,計數(shù)器為0,因而在循環(huán)定時或循環(huán)計數(shù)應(yīng)用時就存在需反復(fù)用軟件向THx和TLx預(yù)置計數(shù)初值的問題,給程序設(shè)計帶來不便,同時也會影響計時精度,工作方式2就針對這個問題而設(shè)置的。 在工作方式2中,16位計數(shù)器分為兩部分: TLx作為8位計數(shù)器進行計數(shù) THx保存8位初值并保持不變,作為預(yù)置寄

53、存器。,初始化時把相同的計數(shù)初值分別加載至TLx和THx中,當(dāng)計數(shù)溢出時,不需再像方式0和方式1那樣需要由軟件重新賦值,而是由硬件自動將預(yù)置寄存器THx的8位計數(shù)初值重新加載給TLx,繼續(xù)計數(shù),不斷循環(huán)。 除能自動加載計數(shù)初值之外,方式2的其他控制方法同方式0類似。 方式2的定時時間為: t =(28定時器初值)機器周期 計數(shù)模式請讀者結(jié)合方式0,自己分析,這里不再重復(fù)。,【例4.5】定時器T1工作在方式2下最大的定時時間是多少?用定時器T1的方式2從P1.0 腳輸出頻率=1KHz方波(設(shè)時鐘頻率為6MHZ)。 T1工作在方式1下最大的定時時間(晶振頻率為6MHZ)是: tmax=(28-T0

54、初值)機器周期=(256-0) 2s=512s 分析:fosc= 6MHz ,機器周期 = 2s 1KHz方波周期 =1ms, 半個方波周期 = 500s (28定時器初值)機器周期 = 定時時間 (256X) 2s= 500s 計算初值:X=6,采用中斷工作方式,編程如下: ORG 0000H AJMP MAIN ORG 001BH ;T1的中斷矢量 CPL P1.0 ;中斷服務(wù):P1.0取反 RETI ORG 0030H ;中斷返回 MAIN: MOV TMOD,#20H ;選T1方式2 MOV TH1, #6 ;賦重裝值 MOV TL1, #6 ;賦初值 SETB ET1 ;開T1中斷

55、SETB EA ;開總中斷 SETB TR1 ;啟動T1 HERE: AJMP HERE ;原地等待中斷 END,【例4.6】 利用T0的工作方式2擴展一個外部中斷源。 分析: 將T0設(shè)置為計數(shù)器方式,每計數(shù)一次產(chǎn)生一次溢出中斷。 按方式2工作,TH0、TL0的初值均為0FFH。 T0允許中斷,CPU開放中斷。這樣每來一個脈沖,都將產(chǎn)生一次定時器溢出中斷,類似于外部中斷。在定時計數(shù)器中斷服務(wù)程序中編寫該外部中斷的服務(wù)內(nèi)容即可。,參考程序如下: ORG 0000H AJMP MAIN ORG 000BH AJMP T0INT ORG 0100H MAIN: MOV TMOD,#06H ;置T0為

56、計數(shù)器方式2 MOV TL0,#0FFH ;置計數(shù)初值 MOV TH0,#0FFH SETB TR0 ;啟動T0工作 SETB EA ;CPU開中斷 SETB ET0 ;允許T0中斷 SJMP $ ;等待中斷 T0INT: ;編寫該中斷的服務(wù)程序 RETI,例: 利用定時器T1的模式2對外部信號計數(shù)。要求每計滿100次,將 P1.0端取反。 解:(1)選擇模式 外部信號由T1(P3.5)引腳輸入,每發(fā)生一次負跳變計數(shù)器加1,每輸入100個脈沖,計數(shù)器發(fā)生溢出中斷,中斷服務(wù)程序?qū)1.0取反一次。 T1計數(shù)工作方式模式2的模式字為 (TMOD)= 0110 0000B = 60H。 T0不用時,

57、TMOD的低4位可任取,但不能進入模式3,一般取0。,(2)計算T1的計數(shù)初值 X= 256 100 = 156 = 9CH 因此:TL1的初值為9CH, 重裝初值寄存器TH1=9CH。,(3)程序清單 ORG 0000H AJMP MAIN ORG 001BH ;中斷服務(wù)程序入口 CPL P1.0 RETI MAIN: MOV TMOD, #60H ;設(shè)置T1為模式2, 計數(shù)方式 MOV TL1, #9CH ;T1計數(shù)器初值 MOV TH1, #9CH MOV IE,#88H ; 定時器開中斷 SETB TR1 ;啟動T1計數(shù) HERE:SJMP HERE ;等待中斷,4.2.2.4 方式3及其用法,當(dāng)M1M0=11時,定時器/計數(shù)器設(shè)定為工作方式3。 工作方式3只適用于定時器T0。當(dāng)T0工作在方式3時,TH0和TL0被拆成2個獨立的8位計數(shù)器。 其中,TL0既可作為定時器,也可作為計數(shù)器使用,它占用定時器T0所使用的控制位:GATE,C/T,TR0,INT0和TF0;除了它的位數(shù)為8位外,其功能和操作與方式0或1完全相同。 TH0只能作定時器用,并且占據(jù)了定時器T1的控制位TR1和中斷標志位TF1,TH0計數(shù)溢出置位TF1,且TH0的啟動和關(guān)閉僅受TR1的控制。,T0模式3結(jié)構(gòu),T0模式3時T1結(jié)構(gòu),定時器T1無工作模式3,當(dāng)將定時器T0設(shè)定為方式3時,定時計數(shù)器

溫馨提示

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

最新文檔

評論

0/150

提交評論