第四章 定時(shí)器、串行口及中斷系統(tǒng).ppt_第1頁(yè)
第四章 定時(shí)器、串行口及中斷系統(tǒng).ppt_第2頁(yè)
第四章 定時(shí)器、串行口及中斷系統(tǒng).ppt_第3頁(yè)
第四章 定時(shí)器、串行口及中斷系統(tǒng).ppt_第4頁(yè)
第四章 定時(shí)器、串行口及中斷系統(tǒng).ppt_第5頁(yè)
已閱讀5頁(yè),還剩153頁(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)介

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

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

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

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

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

6、制系統(tǒng)的性能。 (3) 系統(tǒng)工作時(shí)會(huì)出現(xiàn)一些如電源斷電之類(lèi)的突發(fā)故障,中斷系統(tǒng)可以使故障發(fā)生時(shí)自動(dòng)運(yùn)行處理程序,系統(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個(gè)中斷源(MCS-52有 6個(gè)),2個(gè)優(yōu)先級(jí)。5個(gè)中斷源分別為: (1)2個(gè)外部中斷請(qǐng)求:外部中斷0 ()、外部中斷1(),分別由從P3.2、 P3.2引腳引入,低電平有效、脈沖下降沿有效可選。 (2)2個(gè)片內(nèi)定時(shí)器/計(jì)數(shù)器溢出中斷請(qǐng)求:定時(shí)器/計(jì)數(shù)器0溢出中斷(T0)、定時(shí)器/

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

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

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

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

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

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

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

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

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

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

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

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

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

20、利用輸入端口線作為各個(gè)中斷源的識(shí)別線。 中斷服務(wù)程序?yàn)橐粋€(gè)中斷查詢程序。,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)先級(jí),

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

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

23、IN:MOV SP,#40H ;設(shè)棧底 SETB EA ;開(kāi)總允許開(kāi)關(guān) SETB EX0 ;開(kāi)INT0中斷 SETB IT0 ;負(fù)跳變觸發(fā)中斷 H: SJMP H ;等待(執(zhí)行其它任務(wù)) ORG 0200H ;中斷服務(wù)程序 PINT0:CPL P1.0 ;改變LED LCALL Delay10ms;軟件延時(shí)去開(kāi)關(guān)抖動(dòng) 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 ;開(kāi)總允許開(kāi)關(guān) SETB EX0 ;開(kāi)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ì)上就是對(duì)TCON、SCON、IE和IP寄存器的管理和控制。 中斷初始化程

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

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

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

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

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

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

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

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

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

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

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

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

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

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

39、X = 213 - (t/T), t為定時(shí)值;T為機(jī)器周期 3.根據(jù)需要,開(kāi)放定時(shí)器中斷:對(duì)IE寄存器賦值; 4.啟動(dòng)定時(shí)/計(jì)數(shù)器:使TCON寄存器的TR0或TR1置位,或由加到引腳INTX上的外部信號(hào)電平啟動(dòng)。,例:利用T0方式0產(chǎn)生寬度為2s,周期為2ms的定時(shí)負(fù)脈沖,由P1.7送出,系統(tǒng)采用12MHz的晶振。 解: 由于晶振為12MHz,機(jī)器周期為1s,這樣利用T0方式0產(chǎn)生周期為2ms定時(shí)的初值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;開(kāi)T0中斷 SETB TR0 ;啟動(dòng)T0 T0溢出中斷服務(wù)程序:T0INT:CLR P1.7NOPSETBP1.7MOVTH0,#0C1H ;T0重置初值MOVTL0,#10HRETI,例:利用T0的工作模式0產(chǎn)生1ms定時(shí),在P1.0引腳輸出周期為2ms的方波。設(shè)單片機(jī)晶振頻率fosc=12MHz。編程實(shí)現(xiàn)其功能。 解:要在P1.0引腳輸出周期為2ms的方波,只要使P1.0每隔1ms取反一次即可。 (1)選擇工作模式

41、: TMOD = 00H 即:M1M0=00,C/T=0,GATE=0,其余位為0,(2)計(jì)算1ms定時(shí)時(shí)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 ;啟動(dòng)定時(shí) LOOP:JBC TF0,NEXT ;查詢定時(shí)時(shí)間到否 SJMP LOOP NE

42、XT:MOV TL0,#18H ;重裝計(jì)數(shù)初值 MOV TH0,#0E0H CPL P1.0 ;取反 SJMP LOOP ;重復(fù)循環(huán),(4)采用定時(shí)器溢出中斷方式的程序 程序清單: 主程序 ORG 0000H RESET: AJMP MAIN ; 跳過(guò)中斷服務(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開(kāi)中斷 SETB ET0 ;T0中斷允許 SETB TR0 ;啟動(dòng)定時(shí) HERE:SJMP HERE ;

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

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

45、中斷服務(wù)程序中,先執(zhí)行 SETB P1.0和NOP兩條指令,然后執(zhí)行CLR P1.0,最后重裝TH0和TL0的初值,就可以產(chǎn)生題目所要求的定時(shí)脈沖。 置T0為定時(shí)方式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 ;給定時(shí)器T0送初值 MOV TL0 , #18H SETB TR0 ;啟動(dòng)T0工作

46、 LOOP: JNB TF0 , $ ;$為當(dāng)前指令指針地址 CLR TF0 SETB P1.0 ;產(chǎn)生2個(gè)機(jī)器周期的正脈沖 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 ;給定時(shí)器T0送初值 MOV TL0 , #18H MOV IE , #82H;開(kāi)放T0中斷與中斷總開(kāi)關(guān) SETB TR0;啟動(dòng)T0 S

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

48、【例4.4】定時(shí)器T0工作在方式1下最大的計(jì)數(shù)周期是多少?用定時(shí)器T0的方式1產(chǎn)生50HZ的方波,由P1.0輸出此方波(設(shè)時(shí)鐘頻率為12MHZ)。 解:由于時(shí)鐘頻率為12MHZ,則機(jī)器周期為1s。 T0工作在方式1下最大的定時(shí)周期是: tmax=(216-T0初值)機(jī)器周期=(65536-0) 1s=65.536ms,由于周期為1/50Hz=20ms,則這種方波的正負(fù)脈沖寬度都為10ms。 由于晶振為12MHz,機(jī)器周期為1s,這樣利用T0方式1產(chǎn)生10ms定時(shí)的初值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 ;開(kāi)放T0中斷與中斷總開(kāi)關(guān) SETB TR0 SJMP $ ORG 0300H ;中斷服務(wù)程序 T0INT: CPL P1.0 MOV TH0 , #0D8H MOV TL0 , #0F0H RETI,

50、例:門(mén)控方式測(cè)量正脈沖寬度 解:INT1引腳輸入被檢測(cè)信號(hào),記錄在正脈沖的時(shí)間內(nèi)包含機(jī)器脈沖個(gè)數(shù)。 1)設(shè)脈寬小于65.5ms 等待查詢INT1,正脈沖過(guò)后,讀出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門(mén)控,只有INT1=1才計(jì)數(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;開(kāi)T1中斷 SETBEA,WAIT2: JNBP3.3,WAIT2 ;等待正脈沖到來(lái) WAIT3: JBP3.3,WAIT3 ;等待正脈沖結(jié)束 CLRTR1;關(guān)閉T1 MOVIE,#00;關(guān)閉中斷 MOVR2,TL1;讀出T1 MOVR3,TH1 LCALL PPS;計(jì)算脈寬 HERE:SJMPHERE;其他任務(wù) PPS:;計(jì)算脈寬子程序,計(jì)

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

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

54、初值)機(jī)器周期=(256-0) 2s=512s 分析:fosc= 6MHz ,機(jī)器周期 = 2s 1KHz方波周期 =1ms, 半個(gè)方波周期 = 500s (28定時(shí)器初值)機(jī)器周期 = 定時(shí)時(shí)間 (256X) 2s= 500s 計(jì)算初值: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 ;開(kāi)T1中斷

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

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

57、TMOD的低4位可任取,但不能進(jìn)入模式3,一般取0。,(2)計(jì)算T1的計(jì)數(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, 計(jì)數(shù)方式 MOV TL1, #9CH ;T1計(jì)數(shù)器初值 MOV TH1, #9CH MOV IE,#88H ; 定時(shí)器開(kāi)中斷 SETB TR1 ;啟動(dòng)T1計(jì)數(shù) HERE:SJMP HERE ;等待中斷,4.2.2.4 方式3及其用法,當(dāng)M1M0=11時(shí),定時(shí)器/計(jì)數(shù)器設(shè)定為工作方式3。 工作方式3只適用于定時(shí)器T0。當(dāng)T0工作在方式3時(shí),TH0和TL0被拆成2個(gè)獨(dú)立的8位計(jì)數(shù)器。 其中,TL0既可作為定時(shí)器,也可作為計(jì)數(shù)器使用,它占用定時(shí)器T0所使用的控制位:GATE,C/T,TR0,INT0和TF0;除了它的位數(shù)為8位外,其功能和操作與方式0或1完全相同。 TH0只能作定時(shí)器用,并且占據(jù)了定時(shí)器T1的控制位TR1和中斷標(biāo)志位TF1,TH0計(jì)數(shù)溢出置位TF1,且TH0的啟動(dòng)和關(guān)閉僅受TR1的控制。,T0模式3結(jié)構(gòu),T0模式3時(shí)T1結(jié)構(gòu),定時(shí)器T1無(wú)工作模式3,當(dāng)將定時(shí)器T0設(shè)定為方式3時(shí),定時(shí)計(jì)數(shù)器

溫馨提示

  • 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)論