《單片機(jī)系統(tǒng)設(shè)計(jì)及工程應(yīng)用》課件第4章_第1頁
《單片機(jī)系統(tǒng)設(shè)計(jì)及工程應(yīng)用》課件第4章_第2頁
《單片機(jī)系統(tǒng)設(shè)計(jì)及工程應(yīng)用》課件第4章_第3頁
《單片機(jī)系統(tǒng)設(shè)計(jì)及工程應(yīng)用》課件第4章_第4頁
《單片機(jī)系統(tǒng)設(shè)計(jì)及工程應(yīng)用》課件第4章_第5頁
已閱讀5頁,還剩113頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

4.151系列單片機(jī)的中斷系統(tǒng)4.2定時(shí)器/計(jì)數(shù)器習(xí)題44.1.1中斷的概念

所謂中斷,是指計(jì)算機(jī)在執(zhí)行某一程序的過程中,由于計(jì)算機(jī)系統(tǒng)內(nèi)部或外部的某種原因,CPU必須暫時(shí)停止現(xiàn)行程序的執(zhí)行,而自動(dòng)轉(zhuǎn)去執(zhí)行預(yù)先安排好的處理該事件的

服務(wù)子程序,待處理結(jié)束之后,再回來繼續(xù)執(zhí)行被暫停程序的過程。實(shí)現(xiàn)這種中斷功能的硬件系統(tǒng)和軟件系統(tǒng)統(tǒng)稱為中斷系統(tǒng)。4.151系列單片機(jī)的中斷系統(tǒng)中斷系統(tǒng)是計(jì)算機(jī)的重要組成部分。實(shí)時(shí)控制、故障自動(dòng)處理、計(jì)算機(jī)與外部設(shè)備間傳送數(shù)據(jù)及實(shí)現(xiàn)人機(jī)對話通常采用中斷方式。中斷系統(tǒng)需要解決以下基本問題:

(1)中斷源:中斷請求信號(hào)的來源。包括中斷請求信號(hào)的產(chǎn)生及該信號(hào)怎樣被CPU有效地識(shí)別。要求中斷請求信號(hào)產(chǎn)生一次,只能被CPU接收處理一次,不能一次中斷申請被CPU多次響應(yīng),這就涉及到中斷請求信號(hào)的及時(shí)撤除問題。

(2)中斷響應(yīng)與返回:CPU采集到中斷請求信號(hào)后,怎樣轉(zhuǎn)向特定的中斷服務(wù)子程序及執(zhí)行完中斷服務(wù)子程序怎樣返回被中斷的程序繼續(xù)執(zhí)行。中斷響應(yīng)與返回的過程中涉及到CPU響應(yīng)中斷的條件、現(xiàn)場保護(hù)、現(xiàn)場恢復(fù)等問題。

(3)優(yōu)先級(jí)控制:一個(gè)計(jì)算機(jī)應(yīng)用系統(tǒng),特別是計(jì)算機(jī)實(shí)時(shí)測控系統(tǒng),往往有多個(gè)中斷源,各中斷源的重要程度又有輕重緩急之分。與人處理問題的思路一樣,希望重要緊急的事件優(yōu)先處理,而且如果當(dāng)前處于正在處理某個(gè)事件的過程中,有更重要、更緊急的事件到來,就應(yīng)當(dāng)暫停當(dāng)前事件的處理,轉(zhuǎn)去處理新事件。這就是中斷系統(tǒng)優(yōu)先級(jí)控制所要解決的問題。中斷優(yōu)先級(jí)的控制形成了中斷嵌套。51系列單片機(jī)中斷系統(tǒng)原理及組成如圖4.1所示。圖4.1

51系列單片機(jī)中斷系統(tǒng)原理及組成圖4.1.2中斷源

中斷源是指向CPU發(fā)出中斷請求的信號(hào)來源,中斷源可以人為設(shè)定,也可以為響應(yīng)突發(fā)性隨機(jī)事件。51系列單片機(jī)有5個(gè)中斷源,見表4.1,其中兩個(gè)是外部中斷源,另外三個(gè)屬于內(nèi)部中斷。(注:52子系列有6個(gè)中斷源,增加了一個(gè)定時(shí)器/計(jì)數(shù)器T2的溢出中斷。)表4.1

MCS-51單片機(jī)的中斷源

1.外部中斷

外部中斷源有兩個(gè),外部中斷0(

)和外部中斷1(

)。外部中斷請求有兩種觸發(fā)方式:電平觸發(fā)及邊沿觸發(fā)。這兩種觸發(fā)方式可以通過對特殊功能寄存器TCON(TCON稱為定時(shí)器/計(jì)數(shù)器控制寄存器)編程來選擇。下面給出TCON的位定義格式,并對與中斷有關(guān)的位予以說明。

定時(shí)器/計(jì)數(shù)器控制寄存器TCON:地址為88H

IT0:外部中斷0的觸發(fā)方式控制位。若IT0被設(shè)置為0,則選擇外部中斷0為電平觸發(fā)方式,即IT0=0時(shí),低電平有效;若IT0被設(shè)置為1,則選擇外部中斷0為邊沿觸發(fā)方式,即IT0=1時(shí),負(fù)沿有效。

IT1:外部中斷1的觸發(fā)方式控制位。若IT1被設(shè)置為0,則選擇外部中斷1為電平觸發(fā)方式,即IT1=0時(shí),低電平有效;若IT1被設(shè)置為1,則選擇外部中斷1為邊沿觸發(fā)方式,即IT1=1時(shí),負(fù)沿有效。

IE0:外部中斷0的中斷請求標(biāo)志位。IE0=1,表示請求中斷;IE0=0,表示沒有請求中斷。當(dāng)IT0=0時(shí),外部中斷0為電平觸發(fā)方式。在這種方式下,CPU在每個(gè)機(jī)器周期的S5P2期間對(P3.2)引腳采樣。若為低電平,則認(rèn)為有中斷申請,隨即使IE0標(biāo)志置位,并以此向CPU請求中斷;若為高電平,則認(rèn)為無中斷申請,或中斷申請已撤除,隨即使IE0標(biāo)志復(fù)位。當(dāng)IT0=1時(shí),即外部中斷0為邊沿觸發(fā)方式時(shí),若第一個(gè)機(jī)器周期采樣到引腳為高電平,第二個(gè)機(jī)器周期采樣到

引腳為低電平時(shí),由硬件置位IE0,并以此向CPU請求中斷。當(dāng)CPU響應(yīng)中斷轉(zhuǎn)向中斷服務(wù)程序時(shí),由硬件自動(dòng)將IE0清零。

IE1:外部中斷1的中斷請求標(biāo)志位,其作用與IE0類似。當(dāng)IT1=0時(shí),外部中斷1為電平觸發(fā)方式。在這種方式下,CPU在每個(gè)機(jī)器周期的S5P2期間對(P3.3)引腳采樣,若為低電平,則認(rèn)為有中斷申請,隨即使IE1標(biāo)志置位,并以此向CPU請求中斷;若為高電平,則認(rèn)為無中斷申請,或中斷申請已撤除,隨即使IE1標(biāo)志復(fù)位。

當(dāng)IT1=1時(shí),即外部中斷1為邊沿觸發(fā)方式時(shí)。若第一個(gè)機(jī)器周期采樣到引腳為高電平,第二個(gè)機(jī)器周期采樣到

引腳為低電平時(shí),由硬件置位IE1,并以此向CPU請求中斷。當(dāng)CPU響應(yīng)中斷轉(zhuǎn)向中斷服務(wù)程序時(shí),由硬件自動(dòng)將IE1清零。若把外部中斷設(shè)置為邊沿觸發(fā)方式,CPU在每個(gè)機(jī)器周期都采樣。為了保證CPU能檢測到負(fù)跳變,輸入到引腳上的高電平與低電平至少應(yīng)保持1個(gè)機(jī)器周期。對于電平觸發(fā)的外部中斷,由外部中斷的輸入信號(hào)直接控制中斷請求標(biāo)志位IE0(IE1),CPU響應(yīng)中斷后不能由硬件自動(dòng)清除IE0(IE1)標(biāo)志,也不能由軟件清除IE0(IE1)標(biāo)志。因此,在中斷返回之前,需要外接電路來撤消中斷請求輸入引腳上的低電平,否則將再次中斷,導(dǎo)致一次中斷申請被CPU多次響應(yīng)而出錯(cuò)。圖4.2是電平觸發(fā)方式下外部中斷的請求、撤除電路。外部中斷請求信號(hào)通過D觸發(fā)器加到單片機(jī)X引腳上。當(dāng)外部中斷請求信號(hào)使D觸發(fā)器的CLK端發(fā)生負(fù)跳變時(shí),由

于D端接地,Q端輸出0,向單片機(jī)發(fā)出中斷請求。CPU響應(yīng)中斷后,利用一根口線,如P1.0作應(yīng)答線,用P1.0控制D觸發(fā)器的置1端。在中斷服務(wù)程序中用以下兩條指令來撤除中斷請求:

ANLP1.0#0FEH

ORLP1.0#01H第一條指令使P1.0為0,而P1口其他各位的狀態(tài)不變。由于P1.0與直接置1端相連,因此D觸發(fā)器Q=1,撤除了中斷請求信號(hào)。第二條指令將P1.0變成1,即置1端為1處于無效狀態(tài),使以后產(chǎn)生的新的外部中斷請求信號(hào)又能向單片機(jī)申請中斷。圖4.2外部中斷請求、撤除的電路

2.內(nèi)部中斷

內(nèi)部中斷是單片機(jī)芯片內(nèi)部產(chǎn)生的中斷。51系列單片機(jī)(51子系列)的內(nèi)部中斷有定時(shí)器/計(jì)數(shù)器T0、T1的溢出中斷,串行口的發(fā)送/接收中斷。當(dāng)定時(shí)器/計(jì)數(shù)器T0、T1計(jì)數(shù)溢出時(shí),由硬件自動(dòng)置位TCON的TF0(定時(shí)器/計(jì)數(shù)器T0的中斷標(biāo)志位)或TF1(定時(shí)器/計(jì)數(shù)器T1的中斷標(biāo)志位),向CPU申請中斷。CPU響應(yīng)中斷而轉(zhuǎn)向中斷服務(wù)程序時(shí),由硬件自動(dòng)將TF0或TF1清零,即CPU響應(yīng)中斷后能自動(dòng)撤除中斷請求信號(hào)。當(dāng)串行口發(fā)送完或接收完一幀信息時(shí),由接口硬件自動(dòng)置位SCON的TI(發(fā)送中斷請求標(biāo)志位)或RI(接收中斷請求標(biāo)志位),以此向CPU申請中斷,CPU響應(yīng)中斷后,接口硬件不能自動(dòng)將TI或RI清零,即CPU響應(yīng)中斷后不能自動(dòng)撤除中斷請求信號(hào),用戶必須采用軟件方法將TI或RI清零,來撤除中斷請求信號(hào)。4.1.3中斷控制

1.中斷允許控制

MCS-51單片機(jī)中沒有專設(shè)的開中斷和關(guān)中斷指令,對各中斷源的中斷開放或關(guān)閉是由內(nèi)部的中斷允許寄存器IE的各位來控制的。

中斷允許寄存器IE:地址為A8H

EX0:外部中斷0的中斷允許位。EX0=0,禁止外部中斷0中斷;EX0=1允許外部中斷0中斷。

ET0:定時(shí)器/計(jì)數(shù)器T0的溢出中斷允許位。ET0=0,禁止T0中斷;ET0=1,允許T0中斷。

EX1:外部中斷1的中斷允許位。EX1=0,禁止外部中斷1中斷;EX1=1,允許外部中斷1中斷。

ET1:定時(shí)器/計(jì)數(shù)器T1的溢出中斷允許位。ET1=0,禁止T1中斷;ET1=1,允許T1中斷。

ES:串行口中斷允許位。ES=0,禁止串行口中斷;ES=1允許串行口中斷。

ET2:定時(shí)器/計(jì)數(shù)器T2的溢出中斷允許位,只用于52子系列,51子系列無此位。ET2=0,禁止T2中斷;ET2=1,允許T2中斷。

EA:中斷允許總控位。EA=0,禁止所有的中斷請求;EA=1,開放所有的中斷請求,

但是否允許各中斷源的中斷的中斷請求,還要取決于各中斷源的中斷允許控制位的狀態(tài)。

注意:單片機(jī)系統(tǒng)復(fù)位后,IE中各中斷允許位均被清0,即禁止所有中斷。

2.中斷優(yōu)先級(jí)控制

51單片機(jī)的中斷源可設(shè)置為兩種中斷優(yōu)先級(jí):高優(yōu)先級(jí)(優(yōu)先級(jí))中斷和低優(yōu)先級(jí)(普通級(jí))中斷,從而可實(shí)現(xiàn)多級(jí)中斷嵌套。中斷響應(yīng)遵循如下規(guī)則:

(1)先高后低——對于不同優(yōu)先級(jí)的中斷源同時(shí)請求中斷時(shí),CPU首先響應(yīng)優(yōu)先級(jí)最高的中斷請求。

(2)約定順序——相同優(yōu)先級(jí)的中斷源同時(shí)請求中斷時(shí),按約定順序響應(yīng)。

(3)停低轉(zhuǎn)高——正在處理低優(yōu)先級(jí)中斷而又有高優(yōu)先級(jí)中斷源請求中斷時(shí),中斷正在進(jìn)行的操作,轉(zhuǎn)去響應(yīng)高優(yōu)先級(jí)中斷,處理完成后再返回繼續(xù)處理低優(yōu)先級(jí)中斷。

(4)高不理低——CPU正在處理高優(yōu)先級(jí)中斷而又有低優(yōu)先級(jí)中斷源請求中斷時(shí),繼續(xù)處理高優(yōu)先級(jí)中斷,而不理會(huì)低優(yōu)先級(jí)的中斷請求,待處理完高優(yōu)先級(jí)中斷后才響應(yīng)低

優(yōu)先級(jí)的中斷請求。

中斷響應(yīng)的上述規(guī)則,完全與現(xiàn)今社會(huì)中的上下級(jí)處理事務(wù)相類似。

專用寄存器IP為中斷優(yōu)先級(jí)控制寄存器,鎖存各中斷源優(yōu)先級(jí)控制位,IP中的每一位均可由軟件置1或清0,用來確定每個(gè)中斷源的中斷優(yōu)先級(jí)。置1表示對應(yīng)中斷源為高優(yōu)先級(jí)中斷,清0表示低優(yōu)先級(jí)。其格式如下:中斷優(yōu)先級(jí)控制寄存器IP:地址為B8H

PX0:外部中斷0的中斷優(yōu)先級(jí)控制位。

PT0:定時(shí)器/計(jì)數(shù)器T0的中斷優(yōu)先級(jí)控制位。

PX1:外部中斷1的中斷優(yōu)先級(jí)控制位。

PT1:定時(shí)器/計(jì)數(shù)器T1的中斷優(yōu)先級(jí)控制位。

PS:串行口的中斷優(yōu)先級(jí)控制位。

PT2:定時(shí)器/計(jì)數(shù)器T2的中斷優(yōu)先級(jí)控制位,只用于52子系列。

注意:

(1)當(dāng)系統(tǒng)復(fù)位后,IP全部清0,所有中斷源均設(shè)定為低優(yōu)先級(jí)中斷。

(2)如果幾個(gè)同一優(yōu)先級(jí)的中斷源同時(shí)向CPU申請中斷,則CPU通過內(nèi)部硬件查詢邏輯,按自然優(yōu)先級(jí)約定順序確定先響應(yīng)哪個(gè)中斷請求。自然中斷優(yōu)先級(jí)見表4.2。表4.2自然中斷優(yōu)先級(jí)4.1.4中斷響應(yīng)

1.中斷響應(yīng)的條件

單片機(jī)響應(yīng)中斷時(shí)必須同時(shí)滿足以下5個(gè)條件:

(1)有中斷源發(fā)出中斷請求。

(2)中斷總允許位EA=1(CPU開中斷)。

(3)申請中斷的中斷源對應(yīng)的中斷允許控制位為1。

(4)當(dāng)前指令執(zhí)行完。正在執(zhí)行RETI中斷返回指令或訪問專用寄存器IE和IP的指令時(shí),CPU執(zhí)行完該指令和緊隨其后的另一條指令后才會(huì)響應(yīng)中斷。

(5)CPU沒有響應(yīng)同級(jí)或高優(yōu)先級(jí)的中斷。

滿足以上基本條件,CPU才會(huì)響應(yīng)中斷。

2.中斷響應(yīng)過程

CPU響應(yīng)中斷后,由硬件自動(dòng)執(zhí)行如下的功能操作:

(1)保護(hù)斷點(diǎn),即把程序計(jì)數(shù)器PC的內(nèi)容壓入堆棧保存

(2)清內(nèi)部硬件可清除的中斷請求標(biāo)志位(IE0、IE1、TF0、TF1)。

(3)把被響應(yīng)的中斷服務(wù)程序入口地址送入PC,從而轉(zhuǎn)向相應(yīng)的中斷服務(wù)程序執(zhí)行。各中斷服務(wù)程序的入口地址見表4.3。表4.3

51系列單片機(jī)中斷入口地址

3.中斷響應(yīng)時(shí)間

所謂中斷響應(yīng)時(shí)間,是指CPU檢測到中斷請求信號(hào)到轉(zhuǎn)入中斷服務(wù)程序入口所需要的機(jī)器周期數(shù)。了解中斷響應(yīng)時(shí)間對設(shè)計(jì)實(shí)時(shí)測控系統(tǒng)有重要的指導(dǎo)意義。

51系列單片機(jī)響應(yīng)中斷的最短時(shí)間為3個(gè)機(jī)器周期。若CPU檢測到中斷請求信號(hào)時(shí)間正好是一條指令的最后一個(gè)機(jī)器周期,則不需等待就可以立即響應(yīng)。所謂響應(yīng)中斷,就

是由內(nèi)部硬件執(zhí)行一條長調(diào)用指令,需要2個(gè)機(jī)器周期,加上檢測需要1個(gè)機(jī)器周期,一共需要3個(gè)機(jī)器周期才開始執(zhí)行中斷服務(wù)程序。中斷響應(yīng)的最長時(shí)間由下列情況所決定:若中斷檢測時(shí)正在執(zhí)行RETI或訪問IE或IP指令的第一個(gè)機(jī)器周期,則包括檢測在內(nèi)需要2個(gè)機(jī)器周期(以上3條指令均需2個(gè)機(jī)器周期);若緊接著要執(zhí)行的指令恰好是執(zhí)行時(shí)間最長的乘除法指令,則其執(zhí)行時(shí)間均為4個(gè)機(jī)器周期;再用2個(gè)機(jī)器周期執(zhí)行一條長調(diào)用指令才轉(zhuǎn)入中斷服務(wù)程序。這樣,總共需要8個(gè)機(jī)器周期。

因此,中斷響應(yīng)時(shí)間一般為3~8個(gè)機(jī)器周期。4.1.5中斷系統(tǒng)的應(yīng)用

1.必要工作

為了使讀者對中斷系統(tǒng)的應(yīng)用有一個(gè)全面的了解,我們簡單歸納一下使用中斷系統(tǒng)時(shí)要做的工作:

(1)明確任務(wù),確定采用哪些中斷源。

(2)確定中斷源觸發(fā)方式。

(3)中斷優(yōu)先級(jí)分配。

(4)中斷源及中斷標(biāo)志位的撤除方法。

(5)中斷服務(wù)程序要完成的任務(wù)。

(6)中斷服務(wù)程序入口地址的設(shè)置。

(7)中斷允許設(shè)置。

2.相關(guān)寄存器

我們對中斷系統(tǒng)的設(shè)置實(shí)質(zhì)上就是對相關(guān)寄存器功能位的設(shè)置。與中斷系統(tǒng)相關(guān)的寄存器有:中斷允許寄存器IE、中斷優(yōu)先級(jí)控制寄存器IP、串行口控制寄存器SCON、

中斷標(biāo)志位及外中斷觸發(fā)方式設(shè)置借助于定時(shí)器/計(jì)數(shù)器控制寄存器TCON,各個(gè)寄存器相關(guān)位的功能及使用方法前面已有介紹,讀者只需按要求設(shè)置即可,這里不再贅述。

3.中斷系統(tǒng)應(yīng)用舉例

例4.1.1

利用中斷方式實(shí)現(xiàn)輸入/輸出。在圖4.3中,每按一次P按鈕便在的輸入端產(chǎn)生一個(gè)負(fù)脈沖,向CPU請求中斷,響應(yīng)中斷后,讀取開關(guān)S0~S3上的數(shù)據(jù),輸出到發(fā)光二極管L0~L3顯示。當(dāng)開關(guān)閉合時(shí),對應(yīng)的發(fā)光管點(diǎn)亮。

解主程序和中斷服務(wù)子程序如下:

ORG0000H

LJMPMAIN ;上電自動(dòng)轉(zhuǎn)向主程序

ORG0003H

LJMPINT0SUB;指向INT0的中斷服務(wù)子程序

ORG0040HMAIN: SETBIT0 ;選擇INT0為負(fù)沿觸發(fā)方式

SETBEX0 ;允許INT0中斷

SETBEA ;開CPU中斷

HERE: LJMPHERE ;等待中斷

;INT0的中斷服務(wù)子程序INT0SUB:MOVP1,#0FH;數(shù)據(jù)送P1口,設(shè)置P1.0~P1.3

;為輸入

MOVA,P1 ;讀S0~S3上的數(shù)據(jù)

SWAP A ;A的低4位與高4位交換

ORLA,#0FH

MOVP1,A ;數(shù)據(jù)送L0~L3

RETI ;中斷返回

END圖4.3利用中斷方式實(shí)現(xiàn)輸入/輸出

例4.1.2

利用中斷實(shí)現(xiàn)單步操作。

解可利用圖4.4的電路實(shí)現(xiàn)單步操作,把一個(gè)外部中斷(設(shè)為)設(shè)置為電平觸發(fā)方式,且允許INT1中斷。其中斷服務(wù)程序的末尾寫上如下幾條指令:

JNBP3.3,$ ;在INT1變高前原地等待

JBP3.3,$ ;在INT變低前原地等待

RETI ;返回并執(zhí)行主程序的一條指令圖4.4利用中斷實(shí)現(xiàn)單步操作平時(shí),按鈕P未按下時(shí),保持低電平,則CPU就進(jìn)入外部中斷1服務(wù)程序,由于有上述幾條指令,它就會(huì)停在JNB處,原地等待。當(dāng)P按下一次,端出現(xiàn)一個(gè)正脈沖(由低到高,再到低)時(shí),程序就會(huì)往下執(zhí)行,執(zhí)行RETI后,將返回到主程序,往下執(zhí)行主程序的一條指令,然后又立即響應(yīng)中斷,以等待端出現(xiàn)的下一個(gè)正脈沖。這樣,在

端每出現(xiàn)一個(gè)正脈沖,主程序就執(zhí)行一條指令,實(shí)現(xiàn)了單步執(zhí)行的目的。

例4.1.3

多中斷源擴(kuò)展。

解51單片機(jī)有兩個(gè)外部中斷輸入端,當(dāng)有2個(gè)以上中斷源時(shí),它的中斷輸入端就不夠了。此時(shí),可以采用中斷與查詢相結(jié)合的方法來實(shí)現(xiàn)多中斷源擴(kuò)展。圖4.5中每個(gè)中斷源都接在同一個(gè)外部中斷輸入端上,同時(shí)利用P1口作為在多中斷源情況下各中斷源的識(shí)別。當(dāng)擴(kuò)展中斷源為高電平時(shí),輸入端為低電平,向CPU請求中斷。響應(yīng)中斷后,采用軟件查詢的方法進(jìn)行相應(yīng)的中斷服務(wù),的中斷服務(wù)程序如下:

INT0SUB:

PUSHA;/INT0的中斷服務(wù)程序

JBP1.0,ZD1;軟件查詢

JBP1.1,ZD2

JBP1.2,ZD3

JBP1.3,ZD4GOBACK:POPACC

RETI ;中斷返回

ZD1:…

;擴(kuò)展中斷源1的中斷服務(wù)程序

LJMPGOBACK

ZD2:…

;擴(kuò)展中斷源2的中斷服務(wù)程序

LJMPGOBACK

LJMPGOBACK

ZD3:… ;擴(kuò)展中斷源3的中斷服務(wù)程序

LJMPGOBACK

ZD4:…

;擴(kuò)展中斷源4的中斷服務(wù)程序LJMPGOBACK圖4.5多中斷源擴(kuò)展4.2.1定時(shí)器/計(jì)數(shù)器的基本原理

1.定時(shí)器/計(jì)數(shù)器的特點(diǎn)

對于定時(shí)器/計(jì)數(shù)器來說,不管是獨(dú)立的定時(shí)器芯片還是單片機(jī)內(nèi)的定時(shí)器,大都具有以下特點(diǎn):

(1)定時(shí)器/計(jì)數(shù)器有多種工作方式,可以是計(jì)數(shù)方式也可以是定時(shí)方式。

4.2定時(shí)器/計(jì)數(shù)器

(2)定時(shí)器/計(jì)數(shù)器的計(jì)數(shù)值是可變的,當(dāng)然計(jì)數(shù)的最大值是有限的,這取決于計(jì)數(shù)器的位數(shù)。計(jì)數(shù)的最大值也就確定了作為定時(shí)器時(shí)的最大定時(shí)范圍。

(3)能夠在到達(dá)設(shè)定的定時(shí)或計(jì)數(shù)值時(shí)發(fā)出中斷申請,以便實(shí)現(xiàn)定時(shí)控制。

51單片機(jī)(51子系列)中的兩個(gè)16位定時(shí)器/計(jì)數(shù)器T0和T1,它們均可作為定時(shí)器或計(jì)數(shù)器使用,其原理如圖4.6所示。圖4.6定時(shí)器/計(jì)數(shù)器原理框圖

2.定時(shí)器/計(jì)數(shù)器工作原理

51單片機(jī)的定時(shí)器/計(jì)數(shù)器采用加法計(jì)數(shù)方式工作。兩個(gè)定時(shí)器/計(jì)數(shù)器T0和T1的內(nèi)部均有一個(gè)16位加法計(jì)數(shù)器(TH0,TL0和TH1,TL1),用來完成加1計(jì)數(shù)。當(dāng)加法計(jì)數(shù)器產(chǎn)生溢出時(shí),硬件自動(dòng)產(chǎn)生溢出中斷標(biāo)志信號(hào),可向CPU申請中斷。由于加法計(jì)數(shù)器的初值可以由程序設(shè)定,因此其計(jì)數(shù)/定時(shí)范圍就可利用軟件來編程。當(dāng)處于計(jì)數(shù)方式時(shí),定時(shí)器/計(jì)數(shù)器對加在T0(P3.4)、T1(P3.5)引腳的脈沖信號(hào)進(jìn)行加1計(jì)數(shù),我們可以通過設(shè)置不同的初值來控制計(jì)數(shù)次數(shù)。

當(dāng)處于定時(shí)方式時(shí),定時(shí)器/計(jì)數(shù)器對內(nèi)部機(jī)器周期Tc進(jìn)行加1計(jì)數(shù),因此其計(jì)數(shù)最小單位就是1個(gè)機(jī)器周期。例如,當(dāng)我們的應(yīng)用系統(tǒng)采用的時(shí)鐘頻率為12MHz時(shí),其機(jī)器周期

Tc=1μs,其基本定時(shí)單位就是1μs。

在定時(shí)/計(jì)數(shù)過程中,可以用指令將加法計(jì)數(shù)器的值讀回CPU。4.2.2定時(shí)器/計(jì)數(shù)器的控制方式

1.定時(shí)器方式寄存器TMOD

TMOD稱為定時(shí)器方式寄存器,用來設(shè)置定時(shí)器/計(jì)數(shù)器的工作方式、是否需要門控信號(hào)等,其地址為89H。定時(shí)器/計(jì)數(shù)器T0、T1都有4種工作方式,可通過對方式寄存器TMOD設(shè)置來選擇工作方式。TMOD的低4位用于設(shè)置定時(shí)器/計(jì)數(shù)器T0的工作方式,高4位用于設(shè)置定時(shí)器/計(jì)數(shù)器1的工作方式,各位定義如圖4.7所示。

M1、M0:工作方式選擇位,其值與工作方式對應(yīng)關(guān)系見表4.4。圖4.7

TMOD功能圖表4.4定時(shí)器/計(jì)數(shù)器工作方式

C/T:功能選擇位,當(dāng)C/T=1時(shí)為計(jì)數(shù)方式;當(dāng)C/T=0時(shí)為定時(shí)方式。

GATE:門控位,用于控制定時(shí)器/計(jì)數(shù)器的啟動(dòng)是否受外部中斷請求信號(hào)的影響。

(1)對定時(shí)器/計(jì)數(shù)器0來講,當(dāng)GATE=0時(shí),只要定時(shí)器控制寄存器TCON中的軟件控制位TR0=1,就可啟動(dòng)定時(shí)器T0,與外部中斷請求信號(hào)無關(guān)。如果GATE=1,必須使軟件控制位TR0=1,且為高電平方可啟動(dòng)定時(shí)器T0。即定時(shí)器/計(jì)數(shù)器T0的啟動(dòng)要受外部中斷請求信號(hào)的影響,只有在沒有外部中斷請求信號(hào)的情況下才允許啟動(dòng)定時(shí)器T0。

(2)對定時(shí)器/計(jì)數(shù)器1來講,當(dāng)GATE=0時(shí),只要TR1=1即可啟動(dòng)定時(shí)器T1,與外部中斷請求信號(hào)無關(guān)。如果GATE=1,必須使TR1=1,且為高電平方可啟動(dòng)定時(shí)器T1。即定時(shí)器/計(jì)數(shù)器T1的啟動(dòng)要受外部中斷請求信號(hào)的影響,只有在沒有外部中斷請求信號(hào)的情況下才允許啟動(dòng)定時(shí)器T1。

注意:與其他寄存器(如TCON、IP、IE等)不同,定時(shí)器方式寄存器TMOD不能進(jìn)行位尋址。只能用字節(jié)地址向TMOD中寫命令字來設(shè)置T1和T0的工作方式。復(fù)位時(shí),TMOD所有位均清0。

2.定時(shí)器的控制寄存器TCON

定時(shí)器的控制寄存器TCON地址為88H,可以進(jìn)行位尋址。用來控制定時(shí)器/計(jì)數(shù)器開始定時(shí)/計(jì)數(shù)、設(shè)置中斷及中斷響應(yīng)等。TCON控制寄存器各位定義如下:

TF0(TF1):定時(shí)器/計(jì)數(shù)器T0(T1)的中斷標(biāo)志位。當(dāng)T0(T1)計(jì)數(shù)溢出時(shí),由硬件置位,在允許中斷的情況下,向CPU發(fā)出中斷請求信號(hào),CPU響應(yīng)中斷轉(zhuǎn)向中斷服務(wù)程序

時(shí),由硬件自動(dòng)將該位清零。

TR0(TR1):T0(T1)的啟動(dòng)控制位。當(dāng)TR0(TR1)=1時(shí),可啟動(dòng)T0(T1);當(dāng)TR0(TR1)=0時(shí),關(guān)閉T0(T1)。該位由軟件進(jìn)行設(shè)置,一般情況下,在定時(shí)器/計(jì)數(shù)器初始化完成后,設(shè)

置為不需門控時(shí),用指令將該位置為1即可啟動(dòng)T0(T1)。

IE0(IE1):外部中斷0(外部中斷1)請求標(biāo)志位。

IT0(IT1):外部中斷0(外部中斷1)觸發(fā)方式選擇位。4.2.3定時(shí)器/計(jì)數(shù)器的工作方式

1.工作方式1

將方式寄存器TMOD的方式選擇位M1M0設(shè)置為01時(shí),定時(shí)器/計(jì)數(shù)器設(shè)定為方式1,由TH0和TL0(或TH1和TL1)構(gòu)成了16位的計(jì)數(shù)器。圖4.8給出了定時(shí)器T0在方式1時(shí)的工作原理框圖,T1在方式1時(shí)的工作原理與此類似。圖4.8定時(shí)器/計(jì)數(shù)器0方式1的邏輯結(jié)構(gòu)如果C/T=1,圖4.8中開關(guān)S1自動(dòng)地接在下面,定時(shí)器/計(jì)數(shù)器工作在計(jì)數(shù)狀態(tài),TH0、TL0構(gòu)成了一個(gè)16位的加法計(jì)數(shù)器,它對T0(P3.4)引腳上的外部脈沖計(jì)數(shù)。當(dāng)計(jì)數(shù)到全1(FFFFH),再來一個(gè)外部脈沖便計(jì)數(shù)到0,計(jì)數(shù)器溢出使TF0=1,以此作為定時(shí)器/計(jì)數(shù)器的中斷標(biāo)志向CPU請求中斷。在方式1下,計(jì)數(shù)長度為16位二進(jìn)制數(shù),最大計(jì)數(shù)值M=216=65536。如果要讓計(jì)數(shù)器計(jì)數(shù)N次,則事先應(yīng)向計(jì)數(shù)器中寫入的計(jì)數(shù)初值X為計(jì)數(shù)初值X=最大計(jì)數(shù)值M-計(jì)數(shù)次數(shù)

N=216-N=65536-N

(4.1)在式(4.1)中,M是計(jì)數(shù)器的最大計(jì)數(shù)值,N為計(jì)次數(shù),X是應(yīng)寫入TH0、TL0的計(jì)數(shù)初值。例如,讓計(jì)數(shù)器計(jì)數(shù)5次,計(jì)數(shù)次數(shù)N=5,則計(jì)數(shù)初值X為

計(jì)數(shù)初值X=216-N=65536-5=65531=FFFBH

此例中應(yīng)向TH0寫入FFH、向TL0寫入FBH才可實(shí)現(xiàn)5次計(jì)數(shù)。

當(dāng)計(jì)數(shù)初值X=65535(FFFFH)時(shí),只計(jì)數(shù)1次便產(chǎn)生溢出中斷,所以65535是方式1時(shí)的最小計(jì)數(shù)初值;X=0時(shí),計(jì)數(shù)器從1計(jì)數(shù)到65536,計(jì)數(shù)器溢出請求中斷,所以0是方式1時(shí)的最大計(jì)數(shù)初值,最大計(jì)數(shù)次數(shù)N=65536。

CPU在每個(gè)機(jī)器周期的S5P2期間采樣T0(P3.4)引腳的輸入信號(hào),若一個(gè)機(jī)器周期的采樣值為1,下一個(gè)機(jī)器周期的采樣值為0,則計(jì)數(shù)器加1。由于識(shí)別一個(gè)高電平到低

電平的跳變需兩個(gè)機(jī)器周期2Tc,因此外部計(jì)數(shù)脈沖的頻率應(yīng)低于1/(2Tc)=fosc/24,且高電平與低電平的延續(xù)時(shí)間均不得小于1個(gè)機(jī)器周期。

C/T=0時(shí)為定時(shí)器方式,圖4.8中開關(guān)S1接在上面,加法計(jì)數(shù)器對機(jī)器周期Tc計(jì)數(shù),每個(gè)機(jī)器周期計(jì)數(shù)器加1。根據(jù)計(jì)數(shù)次數(shù)N便可計(jì)算出定時(shí)時(shí)間,定時(shí)時(shí)間由下式確定:

T=N×Tc=(65536-X)Tc

(4.2)式中Tc為單片機(jī)的機(jī)器周期。如果振蕩頻率fosc=12MHz,則Tc=1μs,定時(shí)范圍為1~65536μs。

定時(shí)器/計(jì)數(shù)器0的啟動(dòng)或停止受3個(gè)條件的制約:控制寄存器TCON中的TR0位、門控位GATE及外部中斷請求信號(hào)INT0。當(dāng)GATE=0時(shí),只要用軟件置TR0=1,圖4.8中開關(guān)S2閉合,定時(shí)器/計(jì)數(shù)器就開始工作;當(dāng)置TR0=0時(shí),第二個(gè)開關(guān)分開,定時(shí)器/計(jì)數(shù)器停止工作。所以把TR0稱為定時(shí)器/計(jì)數(shù)器0的啟動(dòng)控制位。

GATE=1為門控方式。此時(shí),僅當(dāng)TR0=1且T0(P3.4)引腳上出現(xiàn)高電平(即無外部中斷請求信號(hào))時(shí),開關(guān)S2才閉合,定時(shí)器/計(jì)數(shù)器開始工作。如果引腳上出現(xiàn)低電平(即有外部中斷請求信號(hào)),則停止工作。所以,門控方式下,定時(shí)器/計(jì)數(shù)器的啟動(dòng)受外部中斷請求的影響,常用來測量引腳上出現(xiàn)正脈沖的寬度。

2.工作方式0

將方式寄存器TMOD的方式選擇位M1M0設(shè)置為00時(shí),定時(shí)器/計(jì)數(shù)器設(shè)定為工作方式0,由TH的8位和TL的低5位構(gòu)成了13位的計(jì)數(shù)器。圖4.9給出了定時(shí)器T1在方式0時(shí)的工作原理框圖,定時(shí)器T0在方式0時(shí)的工作原理與此類似。圖4.9定時(shí)器/計(jì)數(shù)器1方式0的邏輯結(jié)構(gòu)如果C/T=1,定時(shí)器/計(jì)數(shù)器1工作在計(jì)數(shù)狀態(tài),則由TH1、TL1構(gòu)成的13位加法計(jì)數(shù)器對T1(P3.5)引腳上的外部脈沖計(jì)數(shù)。當(dāng)計(jì)數(shù)到全1(即8191或1FFFH),再來一個(gè)外部脈沖便計(jì)數(shù)到0,計(jì)數(shù)器溢出使TF1=1,以此作為定時(shí)器/計(jì)數(shù)器的中斷標(biāo)志。

在方式0下,計(jì)數(shù)長度為13位二進(jìn)制數(shù),最大計(jì)數(shù)值M=213=8192。如果要讓計(jì)數(shù)器計(jì)數(shù)N次,則應(yīng)向計(jì)數(shù)器中寫入的計(jì)數(shù)初值X為

計(jì)數(shù)初值X=最大計(jì)數(shù)值M-計(jì)數(shù)次數(shù)N

=213-N=8192-N(4.3)例如,設(shè)置計(jì)數(shù)器計(jì)數(shù)1000次,計(jì)數(shù)次數(shù)N=1000,則計(jì)數(shù)初值X為

計(jì)數(shù)初值X=213-N=8192-1000=7192

=11100000,11000B

但應(yīng)注意,上述13位計(jì)數(shù)初值的高8位寫入TH1,而13位計(jì)數(shù)初值的低5位二進(jìn)制數(shù)前面要加3個(gè)0,湊成8位二進(jìn)制數(shù)后寫入TL1。此例中應(yīng)向TH1寫入的數(shù)據(jù)是:

11100000B(E0H),向TL1寫入的數(shù)據(jù)是:00011000B(18H),即計(jì)數(shù)初值X=E018H。

在方式0下,X=8191時(shí)是最小計(jì)數(shù)初值;X=0時(shí),計(jì)數(shù)器從1計(jì)數(shù)到8192,X=0是方式0時(shí)的最大計(jì)數(shù)初值,最大計(jì)數(shù)次數(shù)N=8192。如果C/T=0,為定時(shí)器方式,加法計(jì)數(shù)器對機(jī)器周期Tc計(jì)數(shù),每個(gè)機(jī)器周期計(jì)數(shù)器加1。根據(jù)計(jì)數(shù)次數(shù)N便可計(jì)算出定時(shí)時(shí)間,定時(shí)時(shí)間由下式確定:

T=N×Tc=(8192-X)Tc

(4.4)

式中Tc為單片機(jī)的機(jī)器周期。如果振蕩頻率fosc=12MHz,則Tc=1μs,定時(shí)范圍為1~8192μs。

定時(shí)器/計(jì)數(shù)器1的啟動(dòng)或停止受3個(gè)條件的制約:控制寄存器TCON中的TR1位、門控位GATE及外部中斷請求信號(hào)。

3.工作方式2

將方式寄存器TMOD的方式選擇位M1M0設(shè)置為10時(shí),定時(shí)器/計(jì)數(shù)器設(shè)定為工作方式2,作為自動(dòng)重新裝入初值的8位定時(shí)器/計(jì)數(shù)器工作方式,通常用作為方波發(fā)生器。

方式0和方式1都必須在每次定時(shí)/計(jì)數(shù)結(jié)束后重新裝入初值,而方式2是一種自動(dòng)裝入初值的工作方式。方式2在程序初始化時(shí),TL0和TH0由軟件賦予相同的計(jì)數(shù)初值。

TL0用作加1計(jì)數(shù),TH0用來保存初值,一旦TL0計(jì)數(shù)溢出,TF0將被置位,同時(shí),TH0中的初值會(huì)自動(dòng)重新裝入TL0,從而進(jìn)入新一輪計(jì)數(shù),如此循環(huán)。用方式2來產(chǎn)生方波

非常方便,通常被用來作為串行通信口的波特率發(fā)生器,其內(nèi)部結(jié)構(gòu)如圖4.10所示。

圖中以T0為描述對象,T1的工作原理與此類似。圖4.10定時(shí)器/計(jì)數(shù)器0方式2的邏輯結(jié)構(gòu)在工作方式2時(shí),計(jì)數(shù)范圍為1~256。計(jì)數(shù)器的計(jì)數(shù)初值和定時(shí)時(shí)間分別由下式確定:

計(jì)數(shù)初值X=最大計(jì)數(shù)值M-計(jì)數(shù)次數(shù)N

=28-N=256-N(4.5)

T=N×Tc=(256-X)Tc(4.6)4.工作方式3

將方式寄存器TMOD的方式選擇位M1M0設(shè)置為11時(shí),定時(shí)器/計(jì)數(shù)器設(shè)定為工作方式3,其邏輯結(jié)構(gòu)如圖4.11所示。圖4.11定時(shí)器/計(jì)數(shù)器0方式3的邏輯結(jié)構(gòu)在工作方式3時(shí),定時(shí)器T0被分解成兩個(gè)獨(dú)立的8位計(jì)數(shù)器TL0和TH0。其中,TL0占用原定時(shí)器T0的控制位和中斷標(biāo)志位:GATE、TR0和TF0,也占用原定時(shí)器0的引腳T0(P3.4)

和INT0(P3.2)。除計(jì)數(shù)位數(shù)不同于方式0、方式1外,其功能、操作與方式0、方式1完全相同,可定時(shí)亦可計(jì)數(shù)。TH0占用原T1的控制位TF1和TR1,同時(shí)還占用了定時(shí)器1的中斷源,其啟動(dòng)和關(guān)閉僅受TR1置1或清0控制。此時(shí),TH0只能對機(jī)器周期進(jìn)行計(jì)數(shù),因此,TH0只能用作簡單的內(nèi)部定時(shí),不能用作對外部脈沖計(jì)數(shù),它是定時(shí)器0附加的一個(gè)8位定時(shí)器。在工作方式3時(shí),計(jì)數(shù)范圍為1~256。計(jì)數(shù)初值和定時(shí)時(shí)間分別由式(4.5)和式(4.6)確定。

定時(shí)器1無工作方式3。當(dāng)定時(shí)器0工作于方式3時(shí),定時(shí)器1可設(shè)置為方式0、方式1或方式2,但由于TR1、TF1及T1的中斷源已被定時(shí)器0占用,此時(shí),定時(shí)器T1只能用于不需要中斷的場合,如T1常常用作串行口波特率發(fā)生器。

通常情況下,也只有T1作為串行口波特率發(fā)生器使用時(shí),為了充分利用單片機(jī)資源,才將T0設(shè)置為方式3使用。4.2.4定時(shí)器/計(jì)數(shù)器的應(yīng)用

由于定時(shí)器/計(jì)數(shù)器的功能是由軟件編程實(shí)現(xiàn)的,因此一般在使用定時(shí)器/計(jì)數(shù)器前都要對其進(jìn)行初始化。所謂初始化,實(shí)際上就是確定相關(guān)寄存器的值。初始化步驟如下:

(1)確定工作方式——對TMOD賦值。

根據(jù)任務(wù)性質(zhì)明確工作方式及類型,從而確定TMOD寄存器的值。例如,要求定時(shí)器/計(jì)數(shù)器T0完成16位定時(shí)功能,TMOD的值就應(yīng)為01H,用指令

MOVTMOD,#01H

即可完成工作方式的設(shè)定。

(2)預(yù)置定時(shí)器/計(jì)數(shù)器的計(jì)數(shù)初值——寫入計(jì)數(shù)初值。

依據(jù)以上確定的工作方式和要求的計(jì)數(shù)次數(shù),由算式(4.1)~(4.6)計(jì)算出相應(yīng)的計(jì)數(shù)初值。直接將計(jì)數(shù)初值寫入TH0、TL0或TH1、TL1。

(3)根據(jù)需要開放定時(shí)器/計(jì)數(shù)器中斷——直接對IE寄存器賦值。

(4)啟動(dòng)定時(shí)/計(jì)數(shù)器工作——將TR0或TR1置“1”。

GATE=0時(shí),直接由軟件置位啟動(dòng);GATE=1時(shí),除軟件置位外,還必須在外中斷引腳處加上相應(yīng)的電平值才能啟動(dòng)。4.2.5應(yīng)用實(shí)例

在工程應(yīng)用中,常常會(huì)遇到要求系統(tǒng)定時(shí)或?qū)ν獠渴录?jì)數(shù)等類似問題,若用CPU直接進(jìn)行定時(shí)或計(jì)數(shù)不但降低了CPU的效率,而且會(huì)無法響應(yīng)實(shí)時(shí)事件。靈活運(yùn)用定時(shí)器/計(jì)數(shù)器不但可減輕CPU的負(fù)擔(dān),簡化外圍電路,而且可以提高系統(tǒng)的實(shí)時(shí)性,能快速響應(yīng)和處理外部事件。

例4.2.1

方式0的應(yīng)用。設(shè)單片機(jī)晶振頻率為12MHz,利用定時(shí)器/計(jì)數(shù)器T0,在P1.0引腳輸出周期為2ms的方波。解2ms的方波可由間隔1ms的高低電平相間而成,因而只要每1ms對P1.0取反一次即可得到這個(gè)方波,如圖4.12所示??蛇x用定時(shí)器/計(jì)數(shù)器T0工作為定時(shí)方式來實(shí)現(xiàn)1ms的定時(shí)。定時(shí)器工作在定時(shí)方式時(shí),計(jì)數(shù)器對機(jī)器周期Tc計(jì)數(shù),每個(gè)機(jī)器周期計(jì)數(shù)器加1。因?yàn)閱纹瑱C(jī)晶振頻率為12MHz,所以機(jī)器周期為

Tc=12×振蕩周期=12÷fosc=1μs要實(shí)現(xiàn)1ms的定時(shí),定時(shí)器0在1ms內(nèi)需要計(jì)數(shù)N次:

N=1ms÷1μs=1000次

設(shè)定時(shí)器0工作在方式0,則計(jì)數(shù)初值X為

X=最大計(jì)數(shù)值M-計(jì)數(shù)次數(shù)N=213-N

=8192-1000=7192=1110000011000B圖4.12

2ms方波

13位的計(jì)數(shù)初值的高8位寫入TH0,低5位二進(jìn)制數(shù)前要加3個(gè)0,湊成8位二進(jìn)制數(shù)后寫入TL0。即向TH0寫入的數(shù)據(jù)是:11100000B(E0H),向TL0寫入的數(shù)據(jù)是:

00011000B(18H)。

TMOD初始化:TMOD=00000000B=00H,(GATE=0,C/T=0,M1=0,M0=0)TCON初始化:TR0=1,啟動(dòng)T0

IE初始化:開放中斷,EA=1;允許定時(shí)器T0中斷,ET0=1程序如下:

ORG0000H

LJMPSTART ;復(fù)位入口

ORG000BH

LJMPT0INT ;T0中斷入口

ORG0040H

START: MOVSP,#60H;初始化程序

MOVTH0,#0E0H ;T0賦初值

MOVTL0,#18H

MOVTMOD,#00H;T0為方式0定時(shí)。注,

;不能對TMOD位操作

SETBTR0 ;啟動(dòng)T0SETBET0 ;開T0中斷

SETBEA ;開總允許中斷

SJMP$ ;等待中斷

T0INT:MOVTL0,#0E0H;T0中斷服務(wù)子程序,T0賦初

;值,再次啟動(dòng)T0

MOVTH0,#18H

CPLP1.0 ;輸出周期為2ms的方波

RETI ;中斷返回

注意:T0溢出時(shí)中斷標(biāo)志位TF0=1請求中斷,CPU響應(yīng)中斷時(shí),由硬件自動(dòng)將該位清零。但在中斷服務(wù)程序中,必須重新寫入計(jì)數(shù)初值方可再次啟動(dòng)定時(shí)器。

例4.2.2

軟件計(jì)數(shù)器的應(yīng)用。設(shè)單片機(jī)時(shí)鐘頻率為12MHz,利用定時(shí)器/計(jì)數(shù)器T0在引腳P1.0和P1.1分別輸出周期為2ms和6ms的方波,如圖4.13所示。圖4.13輸出不同周期的方波

解在例4.2.1中,T0每1ms中斷一次,對P1.0取反一次得周期為2ms的方波。

讓例4.2.1中的主程序不變,只要對T0中斷服務(wù)子程序略加修改,使用片內(nèi)RAM的30H單元進(jìn)行軟件計(jì)數(shù),每計(jì)數(shù)(中斷)3次,對P1.1取反一次可得到周期為6ms的方波。

修改后的T0中斷服務(wù)子程序如下(設(shè)30H單元的初值為0):

T0INT:MOVTL0,#0E0H;T0中斷服務(wù)子程序,T0

;賦初值,再次啟動(dòng)T0 MOVTH0,#18H

CPLP1.0 ;輸出周期為2ms的方波

INC30H ;每1ms軟件計(jì)數(shù)值加1

MOVA,30H

CJNEA,#03,RETURN

CPLP1.1;每3ms對P1.1取反一次

MOV30H,00H ;軟件計(jì)數(shù)初值為0

RETURN:RETI ;中斷返回

例4.2.3

方式1的應(yīng)用。設(shè)單片機(jī)晶振頻率為12MHz,用定時(shí)器/計(jì)數(shù)器0控制在P1.0引腳輸出周期為20ms的方波。解20ms的方波可由間隔10ms的高低電平相間而成,只要每10ms對P1.0取反一次即可得到這個(gè)方波。若單片機(jī)晶振頻率為12MHz,則機(jī)器周期為1μs。要實(shí)現(xiàn)10ms的定時(shí),在10ms內(nèi)需要計(jì)數(shù)N次:

N=10ms÷1μs=10000次定時(shí)器工作在方式0時(shí),其最大計(jì)數(shù)值M=213=8192,無法實(shí)現(xiàn)10ms的定時(shí),即無法實(shí)現(xiàn)10000次的計(jì)數(shù)。所以,必須使定時(shí)器/計(jì)數(shù)器0工作在方式1下,此時(shí)計(jì)數(shù)初值X為

X=最大計(jì)數(shù)值M-計(jì)數(shù)次數(shù)N

=216-N=65536-10000=55536=D8F0H

即向TH0寫入計(jì)數(shù)初值D8H,向TL0寫入計(jì)數(shù)初值F0H。TMOD初始化:TMOD=00000001B=01H,(GATE=0,C/T=0,M1=0,M0=1);

TCON初始化:TR0=1,啟動(dòng)T0;

IE初始化:開放中斷EA=1,允許定時(shí)器T0中斷ET0=1。程序清單如下:

ORG0000H

LJMPSTART ;復(fù)位入口

ORG000BH

LJMPT0INT ;T0中斷入口

ORG0040H

START: MOVTH0,#0D8H ;T0賦初值

MOVTL0,#0F0H

MOVTMOD,#01H ;T0為方式1定時(shí)

SETBTR0 ;啟動(dòng)T0

SETBET0 ;開T0中斷

SETBEA ;開總允許中斷

MAIN:LJMPMAIN ;主程序等待中斷

T0INT:MOVTL0,#0D8H;T0中斷服務(wù)子程序,T0

;賦初值,再次啟動(dòng)T0

MOVTH0,#0F0H

CPLP1.0 ;輸出周期為20ms的方波RETI ;中斷返回圖4.14生產(chǎn)過程控制

例4.2.4

利用定時(shí)器/計(jì)數(shù)器對生產(chǎn)過程進(jìn)行控制。圖4.14給出了一個(gè)生產(chǎn)過程的示意圖。當(dāng)生產(chǎn)線上無工件傳送時(shí),在光線的照射下,光敏管導(dǎo)通,T1為低電平;當(dāng)工件通過光源時(shí)工件會(huì)遮擋光線,光敏管截止,T1為高電平。每傳送一個(gè)工件,T1端會(huì)出現(xiàn)一個(gè)正脈沖。利用定時(shí)器/計(jì)數(shù)器1對生產(chǎn)過程進(jìn)行控制,每生產(chǎn)出10000個(gè)工件,使P1.7輸出一個(gè)正脈沖,用于啟動(dòng)下一個(gè)工序。

解設(shè)置定時(shí)器/計(jì)數(shù)器1工作在方式1,對工件進(jìn)行計(jì)數(shù)。計(jì)數(shù)次數(shù)N=10000,則計(jì)數(shù)初值X為

X=最大計(jì)數(shù)值M-計(jì)數(shù)次數(shù)N=216-N

=65536-10000=55536=D8F0H

初始化:TMOD=01010000B=50H(GATE=0,C/T=1,M1M==01);

TCON初始化:TR1=1,啟動(dòng)T1;

IE初始化:開放中斷EA=1,允許定時(shí)器T1中斷ET1=1。程序清單如下:

ORG0000H

LJMPSTART ;復(fù)位入口

ORG001BH

LJMPT1INT;T1中斷入口

ORG0040H

START: CLRP1.7 ;初始化P1.7=0

MOVTH1,#0D8H ;T0賦初值

MOVTL1,#0F0H

MOVTMOD,#50H ;T1為方式1計(jì)數(shù) SETBTR1 ;啟動(dòng)T1

SETBET1 ;開T1中斷

SETBEA ;開總允許中斷

MAIN:LJMPMAIN ;主程序等待中斷

T1INT:MOVTL1,#0D8H;T1中斷服務(wù)子程序,T1賦初

;值,再次啟動(dòng)T1

MOVTH1,#0F0H

SETBP1.7 ;使P1.7輸出正脈沖,啟動(dòng)下一

;個(gè)工序NOP

CLRP1.7

RETI ;中斷返回圖4.15顯示電路

例4.2.5

方式2的應(yīng)用。設(shè)單片機(jī)晶振頻率為12MHz,在P1.7引腳接有一個(gè)發(fā)光二極管(如圖4.15所示),用定時(shí)器/計(jì)數(shù)器控制,使發(fā)光二極管亮1秒滅1秒,周而復(fù)始。

解由于定時(shí)間隔太長,用一個(gè)定時(shí)器/計(jì)數(shù)器無法直接實(shí)現(xiàn)1秒的定時(shí)??墒苟〞r(shí)器工作在方式1,得到10ms的定時(shí)間隔,再進(jìn)行軟件計(jì)數(shù)100次,便可實(shí)現(xiàn)1秒的定時(shí),讀者可參照例4.2.3和例4.2.2來完成。在此,我們采用多個(gè)定時(shí)器/計(jì)數(shù)器復(fù)合使用的方法完成此題。可將定時(shí)器T0設(shè)定為10ms的定時(shí)間隔,當(dāng)T0定時(shí)時(shí)間到時(shí),把P1.0的輸出取反,再把P1.0的輸出信號(hào)加到定時(shí)器T1的計(jì)數(shù)脈沖的輸入端進(jìn)行計(jì)數(shù)。只要T1計(jì)數(shù)50次,便可實(shí)現(xiàn)1s的定時(shí):

(10ms+10ms)×50=1000ms=1s

因?yàn)門1的計(jì)數(shù)次數(shù)N=50,所以令定時(shí)器T1工作在方式2,計(jì)數(shù)器的計(jì)數(shù)初值由下式確定:

X=最大計(jì)數(shù)值M-計(jì)數(shù)次數(shù)N=28-N=256-50=206=CEH

即把CEH同時(shí)寫入TH1和TL1。

TMOD初始化:TMOD=01100001B=61H,T0為方式1定時(shí),T1為方式2計(jì)數(shù)。

IE初始化:IE=10001010B,開放中斷EA=1,允許定時(shí)器T0中斷ET0=1,允許定時(shí)器T1中斷ET1=1。

中斷允許寄存器IE:程序清單如下:

ORG0000H

LJMPSTART ;復(fù)位入口

ORG000BH

LJMPT0INT ;T0中斷入口

ORG001BH

LJMPT1INT;T1中斷入口

ORG0040HSTART: MOVTH0,#0D8H ;T0賦初值

MOVTL0,#0F0H

MOVTH1,#0CEH ;T1賦初值

MOVTL1,#0CEH

MOVTMOD,#61H;T0為方式1定時(shí),T1為

;方式2計(jì)數(shù)

SETBTR0 ;啟動(dòng)T0

SETBTR1 ;啟動(dòng)T1

SETBET0 ;開T0中斷

SETBET1 ;開T1中斷 SETBEA ;開總允許中斷

MAIN:LJMPMAIN ;主程序等待中斷

T0INT:MOVTL0,#0D8H;T0中斷服務(wù)子程序,T0賦初值,再次啟動(dòng)T0

MOVTH0,#0F0H

CPLP1.0 ;P1.0輸出周期為20ms的方波

RETI [DW3];中斷返回

T1INT:CPLP1.0 ;T1中斷服務(wù)子程序

[DW3];P1.7使發(fā)光二極管亮1秒滅1秒,周而復(fù)始

RETI [DW3];中

溫馨提示

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

評(píng)論

0/150

提交評(píng)論