80C51的中斷系統(tǒng)及定時(shí)計(jì)數(shù)器1課件_第1頁
80C51的中斷系統(tǒng)及定時(shí)計(jì)數(shù)器1課件_第2頁
80C51的中斷系統(tǒng)及定時(shí)計(jì)數(shù)器1課件_第3頁
80C51的中斷系統(tǒng)及定時(shí)計(jì)數(shù)器1課件_第4頁
80C51的中斷系統(tǒng)及定時(shí)計(jì)數(shù)器1課件_第5頁
已閱讀5頁,還剩50頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1

80C51的中斷系統(tǒng)及定時(shí)/計(jì)數(shù)器

2

5.180C51的中斷系統(tǒng)

5.1.180C51的中斷系統(tǒng)結(jié)構(gòu)

一、中斷的概念電腦具有即時(shí)處理能力,能對(duì)外界發(fā)生的事件進(jìn)行及時(shí)處理,這是依靠它們的中斷系統(tǒng)來實(shí)現(xiàn)的。

CPU在處理某一事件A時(shí),發(fā)生了另一事件B請(qǐng)求CPU迅速去處理(中斷發(fā)生);CPU暫時(shí)中斷當(dāng)前的工作,轉(zhuǎn)去處理事件B(中斷回應(yīng)和中斷服務(wù));待CPU將事件B處理完畢後,再回到原來事件A被中斷的地方繼續(xù)處理事件A(中斷返回),這一過程稱為中斷。3

引起CPU中斷的根源,稱為中斷源。中斷源向CPU提出的中斷請(qǐng)求。CPU暫時(shí)中斷原來的事務(wù)A,轉(zhuǎn)去處理事件B。對(duì)事件B處理完畢後,再回到原來被中斷的地方(即中斷點(diǎn)),稱為中斷返回。實(shí)現(xiàn)上述中斷功能的部件稱為中斷系統(tǒng)(中斷機(jī)構(gòu))。4

隨著電腦技術(shù)的應(yīng)用,人們發(fā)現(xiàn)中斷技術(shù)不僅解決了快速主機(jī)與慢速I/O設(shè)備的數(shù)據(jù)傳送問題,而且還具有如下優(yōu)點(diǎn):分時(shí)操作。CPU可以分時(shí)為多個(gè)I/O設(shè)備服務(wù),提高了電腦的利用率;即時(shí)回應(yīng)。CPU能夠及時(shí)處理應(yīng)用系統(tǒng)的隨機(jī)事件,系統(tǒng)的即時(shí)性大大增強(qiáng);可靠性高。CPU具有處理設(shè)備故障及掉電等突發(fā)性事件的能力,從而使系統(tǒng)可靠性提高。5

二、80C51中斷系統(tǒng)的結(jié)構(gòu)

80C51的中斷系統(tǒng)有5個(gè)中斷源,2個(gè)優(yōu)先順序,可實(shí)現(xiàn)二級(jí)中斷嵌套

。6

5.1.280C51的中斷源

一、中斷源1、(P3.2)??捎蒊T0(TCON.0)選擇其為低電平有效還是下降沿有效。當(dāng)CPU檢測(cè)到P3.2引腳上出現(xiàn)有效的中斷信號(hào)時(shí),中斷標(biāo)誌IE0(TCON.1)置1,向CPU申請(qǐng)中斷。2、(P3.3)??捎蒊T1(TCON.2)選擇其為低電平有效還是下降沿有效。當(dāng)CPU檢測(cè)到P3.3引腳上出現(xiàn)有效的中斷信號(hào)時(shí),中斷標(biāo)誌IE1(TCON.3)置1,向CPU申請(qǐng)中斷。3、TF0(TCON.5),片內(nèi)定時(shí)/計(jì)數(shù)器T0溢出中斷請(qǐng)求標(biāo)誌。當(dāng)定時(shí)/計(jì)數(shù)器T0發(fā)生溢出時(shí),置位TF0,並向CPU申請(qǐng)中斷。4、TF1(TCON.7),片內(nèi)定時(shí)/計(jì)數(shù)器T1溢出中斷請(qǐng)求標(biāo)誌。當(dāng)定時(shí)/計(jì)數(shù)器T1發(fā)生溢出時(shí),置位TF1,並向CPU申請(qǐng)中斷。5、RI(SCON.0)或TI(SCON.1),串行口中斷請(qǐng)求標(biāo)誌。當(dāng)串行口接收完一幀串行數(shù)據(jù)時(shí)置位RI或當(dāng)串行口發(fā)送完一幀串行數(shù)據(jù)時(shí)置位TI,向CPU申請(qǐng)中斷。

7

二、中斷請(qǐng)求標(biāo)誌1、TCON的中斷標(biāo)誌

IT0(TCON.0),外部中斷0觸發(fā)方式控制位。當(dāng)IT0=0時(shí),為電平觸發(fā)方式。當(dāng)IT0=1時(shí),為邊沿觸發(fā)方式(下降沿有效)。IE0(TCON.1),外部中斷0中斷請(qǐng)求標(biāo)誌位。IT1(TCON.2),外部中斷1觸發(fā)方式控制位。IE1(TCON.3),外部中斷1中斷請(qǐng)求標(biāo)誌位。TF0(TCON.5),定時(shí)/計(jì)數(shù)器T0溢出中斷請(qǐng)求標(biāo)誌位。TF1(TCON.7),定時(shí)/計(jì)數(shù)器T1溢出中斷請(qǐng)求標(biāo)誌位。

8

2、SCON的中斷標(biāo)誌

RI(SCON.0),串行口接收中斷標(biāo)誌位。當(dāng)允許串行口接收數(shù)據(jù)時(shí),每接收完一個(gè)串行幀,由硬體置位RI。同樣,RI必須由軟體清除。TI(SCON.1),串行口發(fā)送中斷標(biāo)誌位。當(dāng)CPU將一個(gè)發(fā)送數(shù)據(jù)寫入串行口發(fā)送緩衝器時(shí),就啟動(dòng)了發(fā)送過程。每發(fā)送完一個(gè)串行幀,由硬體置位TI。CPU回應(yīng)中斷時(shí),不能自動(dòng)清除TI,TI必須由軟體清除。

9

一、中斷允許控制

CPU對(duì)中斷系統(tǒng)所有中斷以及某個(gè)中斷源的開放和遮罩是由中斷允許寄存器IE控制的。

5.1.380C51中斷的控制

EX0(IE.0),外部中斷0允許位;ET0(IE.1),定時(shí)/計(jì)數(shù)器T0中斷允許位;EX1(IE.2),外部中斷0允許位;ET1(IE.3),定時(shí)/計(jì)數(shù)器T1中斷允許位;ES(IE.4),串行口中斷允許位;EA(IE.7),CPU中斷允許(總允許)位。10

二、中斷優(yōu)先順序控制

80C51單片機(jī)有兩個(gè)中斷優(yōu)先順序,即可實(shí)現(xiàn)二級(jí)中斷服務(wù)嵌套。每個(gè)中斷源的中斷優(yōu)先順序都是由中斷優(yōu)先順序寄存器IP中的相應(yīng)位的狀態(tài)來規(guī)定的

。PX0(IP.0),外部中斷0優(yōu)先順序設(shè)定位;PT0(IP.1),定時(shí)/計(jì)數(shù)器T0優(yōu)先順序設(shè)定位;PX1(IP.2),外部中斷0優(yōu)先順序設(shè)定位;PT1(IP.3),定時(shí)/計(jì)數(shù)器T1優(yōu)先順序設(shè)定位;PS(IP.4),串行口優(yōu)先順序設(shè)定位。11

同一優(yōu)先順序中的中斷申請(qǐng)不止一個(gè)時(shí),則有中斷優(yōu)先權(quán)排隊(duì)問題。同一優(yōu)先順序的中斷優(yōu)先權(quán)排隊(duì),由中斷系統(tǒng)硬體確定的自然優(yōu)先順序形成,其排列如所示:12

80C51單片機(jī)的中斷優(yōu)先順序有三條原則:CPU同時(shí)接收到幾個(gè)中斷時(shí),首先回應(yīng)優(yōu)先順序別最高的中斷請(qǐng)求。正在進(jìn)行的中斷過程不能被新的同級(jí)或低優(yōu)先順序的中斷請(qǐng)求所中斷。正在進(jìn)行的低優(yōu)先順序中斷服務(wù),能被高優(yōu)先順序中斷請(qǐng)求所中斷。

為了實(shí)現(xiàn)上述後兩條原則,中斷系統(tǒng)內(nèi)部設(shè)有兩個(gè)用戶不能尋址的優(yōu)先順序狀態(tài)觸發(fā)器。其中一個(gè)置1,表示正在回應(yīng)高優(yōu)先順序的中斷,它將阻斷後來所有的中斷請(qǐng)求;另一個(gè)置1,表示正在回應(yīng)低優(yōu)先順序中斷,它將阻斷後來所有的低優(yōu)先順序中斷請(qǐng)求。13

5.280C51單片機(jī)中斷處理過程

一、中斷回應(yīng)條件CPU回應(yīng)中斷的條件是:中斷源有中斷請(qǐng)求;此中斷源的中斷允許位為1;

CPU開中斷(即EA=1)。同時(shí)滿足時(shí),CPU才有可能回應(yīng)中斷。5.2.1中斷回應(yīng)條件和時(shí)間

14

CPU執(zhí)行程式過程中,在每個(gè)機(jī)器週期的S5P2期間,中斷系統(tǒng)對(duì)各個(gè)中斷源進(jìn)行採樣。這些採樣值在下一個(gè)機(jī)器週期內(nèi)按優(yōu)先順序和內(nèi)部順序被依次查詢。如果某個(gè)中斷標(biāo)誌在上一個(gè)機(jī)器週期的S5P2時(shí)被置成了1,那麼它將於現(xiàn)在的查詢週期中及時(shí)被發(fā)現(xiàn)。接著CPU便執(zhí)行一條由中斷系統(tǒng)提供的硬體LCALL指令,轉(zhuǎn)向被稱作中斷向量的特定地址單元,進(jìn)入相應(yīng)的中斷服務(wù)程式。

15

遇以下任一條件,硬體將受阻,不產(chǎn)生LCALL指令:CPU正在處理同級(jí)或高優(yōu)先順序中斷;當(dāng)前查詢的機(jī)器週期不是所執(zhí)行指令的最後一個(gè)機(jī)器週期。即在完成所執(zhí)行指令前,不會(huì)回應(yīng)中斷,從而保證指令在執(zhí)行過程中不被打斷;正在執(zhí)行的指令為RET、RETI或任何訪問IE或IP寄存器的指令。即只有在這些指令後面至少再執(zhí)行一條指令時(shí)才能接受中斷請(qǐng)求。若由於上述條件的阻礙中斷未能得到回應(yīng),當(dāng)條件消失時(shí)該中斷標(biāo)誌卻已不再有效,那麼該中斷將不被回應(yīng)。就是說,中斷標(biāo)誌曾經(jīng)有效,但未獲回應(yīng),查詢過程在下個(gè)機(jī)器週期將重新進(jìn)行。16

二、中斷回應(yīng)時(shí)間某中斷的回應(yīng)時(shí)序如圖:若M1週期的S5P2前某中斷生效,在S5P2期間其中斷請(qǐng)求被鎖存到相應(yīng)的標(biāo)誌位中去;M2恰逢指令的最後一個(gè)機(jī)器週期,且該指令不是RETI或訪問IE、IP的指令。於是,M3和M4便可以執(zhí)行硬體LCALL指令,M5週期將進(jìn)入了中斷服務(wù)程式。80C51的中斷回應(yīng)時(shí)間(從標(biāo)誌置1到進(jìn)入相應(yīng)的中斷服務(wù)),至少要3個(gè)完整的機(jī)器週期。

17

將相應(yīng)的優(yōu)先順序狀態(tài)觸發(fā)器置1(以阻斷後來的同級(jí)或低級(jí)的中斷請(qǐng)求)。執(zhí)行一條硬體LCALL指令,即把程式計(jì)數(shù)器PC的內(nèi)容壓入堆疊保存,再將相應(yīng)的中斷服務(wù)程式的入口地址送入PC。執(zhí)行中斷服務(wù)程式。

中斷回應(yīng)過程的前兩步是由中斷系統(tǒng)內(nèi)部自動(dòng)完成的,而中斷服務(wù)程式則要由用戶編寫程式來完成。

5.2.2中斷回應(yīng)過程

18

5.2.3中斷返回

RETI指令的具體功能是:將中斷回應(yīng)時(shí)壓入堆疊保存的中斷點(diǎn)地址從棧頂彈出送回PC,CPU從原來中斷的地方繼續(xù)執(zhí)行程式;將相應(yīng)中斷優(yōu)先順序狀態(tài)觸發(fā)器清0,通知中斷系統(tǒng),中斷服務(wù)程式已執(zhí)行完畢。

注意,不能用RET指令代替RETI指令。在中斷服務(wù)程式中PUSH指令與POP指令必須成對(duì)使用,否則不能正確返回中斷點(diǎn)

。19

若外部中斷定義為電平觸發(fā)方式,中斷標(biāo)誌位的狀態(tài)隨CPU在每個(gè)機(jī)器週期採樣到的外部中斷輸入引腳的電平變化而變化,這樣能提高CPU對(duì)外部中斷請(qǐng)求的回應(yīng)速度。但外部中斷源若有請(qǐng)求,必須把有效的低電平保持到請(qǐng)求獲得回應(yīng)時(shí)為止,不然就會(huì)漏掉;而在中斷服務(wù)程式結(jié)束之前,中斷源又必須撤銷其有效的低電平,否則中斷返回之後將再次產(chǎn)生中斷。電平觸發(fā)方式適合於外部中斷輸入以低電平輸入且中斷服務(wù)程式能清除外部中斷請(qǐng)求源的情況。例如,並行介面晶片8255的中斷請(qǐng)求線在接受讀或?qū)懖僮麽峒幢谎}位,因此,以其去請(qǐng)求電平觸發(fā)方式的中斷比較方便。20

若外部中斷定義為邊沿觸發(fā)方式,在相繼連續(xù)的兩次採樣中,一個(gè)週期採樣到外部中斷輸入為高電平,下一個(gè)週期採樣到為低電平,則在IE0或IE1中將鎖存一個(gè)邏輯1。即便是CPU暫時(shí)不能回應(yīng),中斷申請(qǐng)標(biāo)誌也不會(huì)丟失,直到CPU回應(yīng)此中斷時(shí)才清零。這樣,為保證下降沿能被可靠地採樣到,外中斷引腳上的高低電平(負(fù)脈衝的寬度)均至少要保持一個(gè)機(jī)器週期(若晶振為12MHz時(shí),為1微秒)。

邊沿觸發(fā)方式適合於以負(fù)脈衝形式輸入的外部中斷請(qǐng)求,如ADC0809的轉(zhuǎn)換結(jié)束標(biāo)誌信號(hào)EOC為正脈衝,經(jīng)反相後就可以作為80C51的中斷輸入。21

5.2.4中斷程式舉例

22

ORG0000HSTART:LJMPMAIN;跳轉(zhuǎn)到主程序

ORG0003HLJMPINTO;轉(zhuǎn)向中斷服務(wù)程式

ORG0030H;主程序

MAIN:CLRIT0;設(shè)為電平觸發(fā)方式

SETBEA;CPU開放中斷

SETBEX0;允許中斷

MOVDPTR,#1000H;設(shè)置數(shù)據(jù)區(qū)地址指針

……ORG0200H;中斷服務(wù)程式

INT0:PUSHPSW;保護(hù)現(xiàn)場(chǎng)

PUSHACCCLRP3.0;由P3.0輸出0NOPNOPSETBP3.0;由P3.0輸出1,撤除

MOVA,P1;輸入數(shù)據(jù)

MOVX@DPTR,A;存入數(shù)據(jù)記憶體

INCDPTR;修改數(shù)據(jù)指針,指向下一個(gè)單元

……POPACC;恢復(fù)現(xiàn)場(chǎng)

POPPSWRETI;中斷返回23

例多外部中斷源的系統(tǒng)示例。設(shè)有5個(gè)外部中斷源,中斷優(yōu)先順序排隊(duì)順序?yàn)椋篨I0、XI1、XI2、XI3、XI4。試設(shè)計(jì)它們與80C51單片機(jī)的介面。24

ORG0003HLJMPINSE0;轉(zhuǎn)外部中斷0服務(wù)程式入口

ORG0013HLJMPINSE1;轉(zhuǎn)外部中斷1服務(wù)程式入口

…………INSE0:PUSHPSW;XI0中斷服務(wù)程式

PUSHACC…………POPACCPOPPSWRETI

25

INSE1:PUSHPSW;中斷服務(wù)程式

PUSHACCJBP1.0,DV1;P1.0為1,轉(zhuǎn)XI1中斷服務(wù)程式

JBP1.1,DV2;P1.1為1,轉(zhuǎn)XI2中斷服務(wù)程式

JBP1.2,DV3;P1.2為1,轉(zhuǎn)XI3中斷服務(wù)程式

JBP1.3,DV4;P1.3為1,轉(zhuǎn)XI4中斷服務(wù)程式INRET:POPACCPOPPSWRETIDV1:……;XI1中斷服務(wù)程式

AJMPINRETDV2:……;XI2中斷服務(wù)程式

AJMPINRETDV3:……;XI3中斷服務(wù)程式

AJMPINRETDV4:……;XI4中斷服務(wù)程式

AJMPINRET26

5.380C51的定時(shí)/計(jì)數(shù)器

實(shí)現(xiàn)定時(shí)功能,比較方便的辦法是利用單片機(jī)內(nèi)部的定時(shí)/計(jì)數(shù)器。也可以採用下麵三種方法:軟體定時(shí):軟體定時(shí)不佔(zhàn)用硬體資源,但佔(zhàn)用了CPU時(shí)間,降低了CPU的利用率。採用時(shí)基電路定時(shí):例如採用555電路,外接必要的元器件(電阻和電容),即可構(gòu)成硬體定時(shí)電路。但在硬體連接好以後,定時(shí)值與定時(shí)範(fàn)圍不能由軟體進(jìn)行控制和修改,即不可編程。採用可編程晶片定時(shí):這種定時(shí)晶片的定時(shí)值及定時(shí)範(fàn)圍很容易用軟體來確定和修改,此種晶片定時(shí)功能強(qiáng),使用靈活。在單片機(jī)的定時(shí)/計(jì)數(shù)器不夠用時(shí),可以考慮進(jìn)行擴(kuò)展。27

2個(gè)16位定時(shí)器/計(jì)數(shù)器

——(52系列有3個(gè)16位Timer)定時(shí)器:對(duì)片內(nèi)機(jī)器時(shí)鐘(週期方波)進(jìn)行計(jì)數(shù)計(jì)數(shù)器:對(duì)Tx引腳輸入的負(fù)脈衝進(jìn)行計(jì)數(shù)與Timer工作有關(guān)的特殊功能寄存器:

TCON和TMOD可通過軟體設(shè)置有關(guān)參數(shù)概述:28

5.3.1定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)和工作原理

一、定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)定時(shí)/計(jì)數(shù)器的實(shí)質(zhì)是加1計(jì)數(shù)器(16位),由高8位和低8位兩個(gè)寄存器組成。TMOD是定時(shí)/計(jì)數(shù)器的工作方式寄存器,確定工作方式和功能;TCON是控制寄存器,控制T0、T1的啟動(dòng)和停止及設(shè)置溢出標(biāo)誌。

29

二、定時(shí)/計(jì)數(shù)器的工作原理加1計(jì)數(shù)器輸入的計(jì)數(shù)脈衝有兩個(gè)來源,一個(gè)是由系統(tǒng)的時(shí)鐘振盪器輸出脈衝經(jīng)12分頻後送來;一個(gè)是T0或T1引腳輸入的外部脈衝源。每來一個(gè)脈衝計(jì)數(shù)器加1,當(dāng)加到計(jì)數(shù)器為全1時(shí),再輸入一個(gè)脈衝就使計(jì)數(shù)器回零,且計(jì)數(shù)器的溢出使TCON中TF0或TF1置1,向CPU發(fā)出中斷請(qǐng)求(定時(shí)/計(jì)數(shù)器中斷允許時(shí))。如果定時(shí)/計(jì)數(shù)器工作於定時(shí)模式,則表示定時(shí)時(shí)間已到;如果工作於計(jì)數(shù)模式,則表示計(jì)數(shù)值已滿。

可見,由溢出時(shí)計(jì)數(shù)器的值減去計(jì)數(shù)初值才是加1計(jì)數(shù)器的計(jì)數(shù)值。

30

設(shè)置為定時(shí)器模式時(shí),加1計(jì)數(shù)器是對(duì)內(nèi)部機(jī)器週期計(jì)數(shù)(1個(gè)機(jī)器週期等於12個(gè)振盪週期,即計(jì)數(shù)頻率為晶振頻率的1/12)。計(jì)數(shù)值N乘以機(jī)器週期Tcy就是定時(shí)時(shí)間t

。設(shè)置為計(jì)數(shù)器模式時(shí),外部事件計(jì)數(shù)脈衝由T0或T1引腳輸入到計(jì)數(shù)器。在每個(gè)機(jī)器週期的S5P2期間採樣T0、T1引腳電平。當(dāng)某週期採樣到一高電平輸入,而下一週期又採樣到一低電平時(shí),則計(jì)數(shù)器加1,更新的計(jì)數(shù)值在下一個(gè)機(jī)器週期的S3P1期間裝入計(jì)數(shù)器。由於檢測(cè)一個(gè)從1到0的下降沿需要2個(gè)機(jī)器週期,因此要求被採樣的電平至少要維持一個(gè)機(jī)器週期。當(dāng)晶振頻率為12MHz時(shí),最高計(jì)數(shù)頻率不超過1/2MHz,即計(jì)數(shù)脈衝的週期要大於2微秒。

31

5.3.2定時(shí)/計(jì)數(shù)器的控制

80C51單片機(jī)定時(shí)/計(jì)數(shù)器的工作由兩個(gè)特殊功能寄存器控制。TMOD用於設(shè)置其工作方式;TCON用於控制其啟動(dòng)和中斷申請(qǐng)。一、工作方式寄存器TMOD

工作方式寄存器TMOD用於設(shè)置定時(shí)/計(jì)數(shù)器的工作方式,低四位用於T0,高四位用於T1。其格式如下:32

GATE:門控位。GATE=0時(shí),只要用軟體使TCON中的TR0或TR1為1,就可以啟動(dòng)定時(shí)/計(jì)數(shù)器工作;GATA=1時(shí),要用軟體使TR0或TR1為1,同時(shí)外部中斷引腳或也為高電平時(shí),才能啟動(dòng)定時(shí)/計(jì)數(shù)器工作。即此時(shí)定時(shí)器的啟動(dòng)條件,加上了或引腳為高電平這一條件。

:定時(shí)/計(jì)數(shù)模式選擇位。=0為定時(shí)模式;=1為計(jì)數(shù)模式。M1M0:工作方式設(shè)置位。定時(shí)/計(jì)數(shù)器有四種工作方式,由M1M0進(jìn)行設(shè)置。33

二、控制寄存器TCON

TCON的低4位用於控制外部中斷,已在前面介紹。TCON的高4位用於控制定時(shí)/計(jì)數(shù)器的啟動(dòng)和中斷申請(qǐng)。其格式如下:TF1(TCON.7):T1溢出中斷請(qǐng)求標(biāo)誌位。T1計(jì)數(shù)溢出時(shí)由硬體自動(dòng)置TF1為1。CPU回應(yīng)中斷後TF1由硬體自動(dòng)清0。T1工作時(shí),CPU可隨時(shí)查詢TF1的狀態(tài)。所以,TF1可用作查詢測(cè)試的標(biāo)誌。TF1也可以用軟體置1或清0,同硬體置1或清0的效果一樣。TR1(TCON.6):T1運(yùn)行控制位。TR1置1時(shí),T1開始工作;TR1置0時(shí),T1停止工作。TR1由軟體置1或清0。所以,用軟體可控制定時(shí)/計(jì)數(shù)器的啟動(dòng)與停止。TF0(TCON.5):T0溢出中斷請(qǐng)求標(biāo)誌位,其功能與TF1類同。TR0(TCON.4):T0運(yùn)行控制位,其功能與TR1類同。34

定時(shí)器/計(jì)數(shù)器的初始化

在使用定時(shí)器/計(jì)數(shù)器之前由軟體設(shè)置其功能,即初始化。1、初始化的步驟(1)確定工作模式(計(jì)數(shù)/定時(shí))、工作方式和啟動(dòng)控制方式,並寫入TMOD寄存器(2)設(shè)置定時(shí)或計(jì)數(shù)初值:可直接寫入TH0、TL0或TH1、TL1中。16位計(jì)數(shù)初值必須分兩次寫入對(duì)應(yīng)計(jì)數(shù)器(3)根據(jù)要求確定是否採用中斷方式:直接對(duì)IE位賦值。開中斷時(shí),對(duì)應(yīng)位置“1”;採用程式查詢方式時(shí),IE位應(yīng)清0以進(jìn)行中斷遮罩(4)啟動(dòng)定時(shí)/計(jì)數(shù)器:使用SETBTRi指令啟動(dòng)若第一步設(shè)置為軟啟動(dòng),即GATE設(shè)置為0時(shí),執(zhí)行指令後,定時(shí)/計(jì)數(shù)器開始工作。若GATE設(shè)置為1時(shí),還必須由外部中斷引腳和共同控制,只有外部引腳電平為高時(shí),執(zhí)行指令後,定時(shí)/計(jì)數(shù)器開始工作。35

2、計(jì)數(shù)初值的計(jì)算最大計(jì)數(shù)值M與定時(shí)/計(jì)數(shù)器工作方式有關(guān):

方式0:M=213=8192方式1:M=216=65536方式2:M=28=256方式3:M=256,定時(shí)/計(jì)數(shù)器分成兩個(gè)獨(dú)立的8位計(jì)數(shù)器,所以TH0、TL0的M均為256T0和T1均為加1計(jì)數(shù)器,當(dāng)加到最大值(00H或0000H)時(shí),產(chǎn)生溢出,將TCON寄存器的TF位置1,產(chǎn)生溢出中斷。計(jì)數(shù)器初值X的計(jì)算公式:(1)計(jì)數(shù)工作模式時(shí)

X=M-計(jì)數(shù)值(2)定時(shí)工作模式時(shí)

X=M-計(jì)數(shù)值=M-t/T=M-(foscxt)/12fosc為晶振頻率,t為要求定時(shí)的時(shí)間。36

例:MCS-51主頻為6MHz,要求產(chǎn)生1ms的定時(shí),試計(jì)算計(jì)數(shù)初值X。設(shè)定時(shí)器工作於方式1。X=216-(6×106×1×10-3)/12=65536-500=65036=FE0CH3、初始化舉例T0為計(jì)數(shù)方式,對(duì)外部脈衝計(jì)數(shù)100次,硬啟動(dòng),禁止中斷,選工作方式2。T1為定時(shí)工作方式,定時(shí)25ms,選擇工作方式1,允許中斷,軟啟動(dòng);fosc=12MHz,編寫初始化程式。

初值X0=256-100=156=9CH

初值X1=65536-(12×25×1000)/12=40536=9E58H方式控制字:00011110B

即1EH37

初始化程式:MOVTMOD,#1EH;寫工作模式字MOVTH0,#9CH;T0計(jì)數(shù)初值,TH0值自動(dòng)重新裝入TL0MOVTL0,#9CHMOVTH1,#9EH;T1計(jì)數(shù)初值MOVTL1,#58HMOVIE,#10001000B;T1開中斷SETBTR0;啟動(dòng)T0,但要等到為1時(shí)真正啟動(dòng)SETBTR1;啟動(dòng)T138

5.3.3定時(shí)/計(jì)數(shù)器的工作方式

一、方式0

方式0為13位計(jì)數(shù),由TL0的低5位(高3位未用)和TH0的8位組成。TL0的低5位溢出時(shí)向TH0進(jìn)位,TH0溢出時(shí),置位TCON中的TF0標(biāo)誌,向CPU發(fā)出中斷請(qǐng)求。39

定時(shí)器模式時(shí)有:N=t/Tcy計(jì)數(shù)初值計(jì)算的公式為:定時(shí)器的初值還可以採用計(jì)數(shù)個(gè)數(shù)直接取補(bǔ)法獲得。計(jì)數(shù)模式時(shí),計(jì)數(shù)脈衝是T0引腳上的外部脈衝。

門控位GATE具有特殊的作用。當(dāng)GATE=0時(shí),經(jīng)反相後使或門輸出為1,此時(shí)僅由TR0控制與門的開啟,與門輸出1時(shí),控制開關(guān)接通,計(jì)數(shù)開始;當(dāng)GATE=1時(shí),由外中斷引腳信號(hào)控制或門的輸出,此時(shí)控制與門的開啟由外中斷引腳信號(hào)和TR0共同控制。當(dāng)TR0=1時(shí),外中斷引腳信號(hào)引腳的高電平啟動(dòng)計(jì)數(shù),外中斷引腳信號(hào)引腳的低電平停止計(jì)數(shù)。這種方式常用來測(cè)量外中斷引腳上正脈衝的寬度。

40

例:在P1.0引腳輸出週期為4ms寬的方波。分析:只要每間隔2ms將P1.0取反一次即可,設(shè)選用T0定時(shí)器完成定時(shí)2ms功能。初值計(jì)算:X0=213-(12×106×2×10-3)/12=6192=1830H由於採用工作方式0,計(jì)數(shù)器13位。0001,1000,0011,0000B

(1830H)TH0占高8位(取D5~D12)1100,0001BTL0高3位補(bǔ)0:0001,0000B所以X0的實(shí)際值應(yīng)為:1100,0001,0001,0000B即C110H根據(jù)題意設(shè)置方式控制字TMOD=00H上電複位後,TMOD各位均為0,所以此字可以不用寫入。根源程式如下:41

ORG0010HMOVTH0,#C1H;T0計(jì)數(shù)初值X0MOVTL0,#10HSETBTR0;啟動(dòng)T0LOOP1:JBCTF0,LOOP2;查詢T0計(jì)數(shù)是否溢出,同時(shí)清除TF0AJMPLOOP1;若溢出重新設(shè)置計(jì)數(shù)初值LOOP2:MOVTH0,#C1HMOVTL0,#10HCPLP1.0;輸出取反

SJMPLOOP1;重複迴圈42

二、方式1方式1的計(jì)數(shù)位數(shù)是16位,由TL0作為低8位、TH0作為高8位,組成了16位加1計(jì)數(shù)器。計(jì)數(shù)個(gè)數(shù)與計(jì)數(shù)初值的關(guān)係為:

43

例:用定時(shí)器0產(chǎn)生一個(gè)50Hz的方波,由P1.1輸出,仍用程式查詢方式,振盪頻率為12MHz。解:方波週期T=1/50=0.02s=20ms,定時(shí)值為10ms。計(jì)數(shù)初值X0=216-(12×106×10×10-3)/12=65536-10000=55536=D8F0H根源程式如下:

ORG0010HMOVTMOD,#11H;T0工作於方式1,定時(shí)模式

SETBTR0;啟動(dòng)T0LOOP:MOVTH0,#D8H

;T0計(jì)數(shù)初值

MOVTL0,#F0H

JNBTF0,$;若T0無溢出則原地等待,$為地址計(jì)數(shù)器

CLRTF0;若產(chǎn)生溢出,清除中斷請(qǐng)求標(biāo)誌位

CPLP1.1;P1.1取反輸出,輸出方波

SJMPLOOP;重複迴圈44

三、方式2方式2為自動(dòng)重裝初值的8位計(jì)數(shù)方式。

初始化編程時(shí),THi和TLi都裝入該計(jì)數(shù)初值。方式2特別適合於用作較精確的脈衝信號(hào)發(fā)生器。尤其適用於串口串列傳輸速率發(fā)生器。計(jì)數(shù)個(gè)數(shù)與計(jì)數(shù)初值的關(guān)係為:

45

例:用T0工作於方式2,要求每計(jì)數(shù)滿200次,將P1.1端取反。

分析:T0工作於計(jì)數(shù)方式下,外部計(jì)數(shù)脈衝由T0(P3.5)引腳引入,每來一個(gè)由1至0的跳變計(jì)數(shù)器加1,由程式查詢TF0的狀態(tài)。初值X=28-200=56=38H,TH0=TL0=38H,TMOD=06H根源程式:ORG0010HMOVTMOD,06HMOVTH0,#38H

;T0計(jì)數(shù)初值

MOVTL0,#38H

SETBTR0;啟動(dòng)T0LOOP1:JBCTF0,LOOP2;若TF0=1,則轉(zhuǎn)LOOP2,同時(shí)TF0=0SJMPLOOP1;否則一直等待

LOOP2:CPLP1.1;P1.1取反輸出

SJMPLOOP146

四、方式3方式3只適用於定時(shí)/計(jì)數(shù)器T0,定時(shí)器T1處於方式3時(shí)相當(dāng)於TR1=0,停止計(jì)數(shù)。

工作方式3將T0分成為兩個(gè)獨(dú)立的8位計(jì)數(shù)器TL0和TH0

。

47

其中TL0使用原有T0的控制位和引腳,如:C/、GATE、TR0、TF0、T0(P3.4)以及(P3.2)引腳。此方式下的TL0除作為8位計(jì)數(shù)器外,其功能和操作與方式0、1完全相同,可作定時(shí)也可作計(jì)數(shù)用。該方式下的TH0,只可用作簡(jiǎn)單的內(nèi)部定時(shí)器功能,它借用定時(shí)器T1的控制位和溢出標(biāo)誌位TR1和TF1,同時(shí)佔(zhàn)用T1的中斷源。TH0的啟動(dòng)和關(guān)閉僅受TR1的控制,TR1=1,TH0啟動(dòng)定時(shí);TR1=0,TH0停止定時(shí)工作。當(dāng)T0工作於方式3時(shí),TH0佔(zhàn)用了T1的控制位和溢出標(biāo)誌位TR1和TF1,但定時(shí)器T1仍可工作於方式0、方式1和方式2,作為串行口串列傳輸速率發(fā)生器,或用於任何不需要中斷的場(chǎng)合。48

設(shè)某用戶系統(tǒng)中已使用了兩個(gè)外部中斷源,並設(shè)置T1工作於方式2,作串行口串列傳輸速率發(fā)生器。現(xiàn)要求增加一個(gè)外部中斷源並由P1.0輸出一個(gè)10KHz的方波,單片機(jī)fosc為12MHz。分析:為了不增加其他硬體開銷,可設(shè)置T0工作於方式3計(jì)數(shù)方式。把T0的引腳作附加的外部中斷輸入端,TL0的計(jì)數(shù)初值為FFH;當(dāng)檢測(cè)到T0引腳由1至0的負(fù)跳變時(shí),TL0立即產(chǎn)生溢出,申請(qǐng)中斷,相當(dāng)於邊沿觸發(fā)的外部中斷源。T0的模式3下,TL0作計(jì)數(shù)用,而TH0可用作8位的定時(shí)器,定時(shí)器控制P1.0輸出10KHz的方波信號(hào)。P1.0輸出方波的信號(hào)為10KHz,週期為1/10KHz=0.1ms。TH0定時(shí)為0.05ms,TL0的計(jì)數(shù)初值為FFH;TH0的計(jì)數(shù)初值X=28-(0.05×10-3×12×106)/12=216=D8H49

程式:ORG0010HMOVTMOD,#27H;T0工作於方式3,計(jì)數(shù);T1工作於方式2,定時(shí)

MOVTL0,#FFH;TL0的計(jì)數(shù)初值

MOVTH0,#D8H;TH0的計(jì)數(shù)初值

MOVTH1,#data[H];data為根據(jù)串列傳輸速率要求設(shè)置的常數(shù)

MOVTL1,#data[L]MOVTCON,#55H;外中斷0、1邊沿觸發(fā),啟動(dòng)T0、T1MOVIE,#9FH;開放全部中斷TL0溢出中斷服務(wù)程式(由000BH)轉(zhuǎn)來

TL0OF:MOVTL0,#FFH;TL0重裝計(jì)數(shù)初值

…RETITH0溢出中斷服務(wù)程式(由001BH)轉(zhuǎn)來

TH0OF:MOVTH0,#D8H;TH0重裝計(jì)數(shù)初值

CPLP1.0;取反輸出50

運(yùn)行中讀定時(shí)/計(jì)數(shù)器80C51可以隨時(shí)讀寫計(jì)數(shù)寄存器TLx和THx,例即時(shí)顯示計(jì)數(shù)值。在讀取操作時(shí)應(yīng)注意分時(shí)讀取TLx和THx。例如:先讀TLx,再讀THx,如果此時(shí)定時(shí)/計(jì)數(shù)器還在運(yùn)行,在讀THx之前剛好TLx溢出,向THx產(chǎn)生進(jìn)位,則讀得的TLx值就是不正確的;同樣,先讀THx

,再讀TLx時(shí)也可能產(chǎn)生這種錯(cuò)誤。解決方法:先讀THx,再讀TLx,再重讀THx,若兩次讀得的THx值相同,則可以確定讀入的數(shù)據(jù)是正確的,若兩次讀得的THx值不一致,則必須重讀。程式:RDTIME:MOVA,TH0;先讀TH0MOVR0,TL0;讀入TL0並存入R0CJNEA,TH0,RDTIME;再讀TH0,與上次讀入值比較,若不等重讀

MOVR1,A;若相等,存TH0在R1中

RET51

5.3.4定時(shí)/計(jì)數(shù)器用於外部中斷擴(kuò)展

擴(kuò)展方法是,將定時(shí)/計(jì)數(shù)器設(shè)置為計(jì)數(shù)器方式,計(jì)數(shù)初值設(shè)定為滿程,將待擴(kuò)展的外部中斷源接到定時(shí)/計(jì)數(shù)器的外部計(jì)數(shù)引腳。從該引腳輸入一個(gè)下降沿信號(hào),計(jì)數(shù)器加1後便產(chǎn)生定時(shí)/計(jì)數(shù)器溢出中斷。例如,利用T0擴(kuò)展一個(gè)外部中斷源。將T0設(shè)置為計(jì)數(shù)器方式,按方式2工作,TH0、TL0的初值均為0FFH,T0允許中斷,CPU開放中斷。其初始化程式如下:

MOVTMOD,#06H;置T0為計(jì)數(shù)器方式2MOVTL0,#0FFH;置計(jì)數(shù)初值

MOVTH0,#0FFHSETBTR0;

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(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)論