第六章單片微機的定時器_第1頁
第六章單片微機的定時器_第2頁
第六章單片微機的定時器_第3頁
第六章單片微機的定時器_第4頁
第六章單片微機的定時器_第5頁
已閱讀5頁,還剩74頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第六章單片微機的定時器第一頁,共七十九頁,編輯于2023年,星期四

通常采用以下三種方法來實現(xiàn)定時或計數(shù): 1.硬件法 硬件定時功能完全由硬件電路完成,不占用CPU時間。但當要求改變定時時間時,只能通過改變電路中的元件參數(shù)來實現(xiàn),很不靈活。 2.軟件法 軟件定時是執(zhí)行一段循環(huán)程序來進行時間延時,優(yōu)點是無額外的硬件開銷,時間比較精確。但犧牲了CPU的時間。 3.可編程定時器/計數(shù)器 6.1概述第二頁,共七十九頁,編輯于2023年,星期四 可編程定時器/計數(shù)器最大特點是可以通過軟件編程來實現(xiàn)定時時間的改變,通過中斷或查詢方法來完成定時功能或計數(shù)功能。有專門的可編程定時器/計數(shù)器芯片可供選用,比如Intel8253。還有一些日歷時鐘芯片,如菲利浦公司的PCF8583等。 目前單片微機中往往已配備了定時器/計數(shù)器(timer/counter)。 80C51芯片內包含有兩個16位的定時器/計數(shù)器:T0和T1;而80C52包含有三個16位的定時器/計數(shù)器:T0、T1和T2;在80C51系列的部分產品(如Philips公司的80C552)中,還包含有一個用做看門狗的8位定時器(T3)。 定時器/計數(shù)器的核心是一個加1計數(shù)器.其基本功能是計數(shù)加1。第三頁,共七十九頁,編輯于2023年,星期四 若是對單片微機的T0、T1或T2引腳上輸入的一個1到0的跳變進行計數(shù)增l,即是計數(shù)功能。 若是對單片微機內部的機器周期進行計數(shù),從而得到定時,這就是定時功能。 定時功能和計數(shù)功能的設定和控制都是通過軟件來設定的。 80C51的定時器/計數(shù)器除了可用作定時器或計數(shù)器之外,還可用作串行接口的波特率發(fā)生器。第四頁,共七十九頁,編輯于2023年,星期四 定時器/計數(shù)器T0、T1的內部結構簡圖示于圖6-1中。從圖中可以看出,定時器/計數(shù)器T0、T1由以下幾部分組成:

計數(shù)器TH0、TL0和TH1、TL1;

特殊功能寄存器TMOD、TCON;

時鐘分頻器;

輸入引腳T0、T1。6.2定時器/計數(shù)器T0、T1第五頁,共七十九頁,編輯于2023年,星期四

⒈定時器/計數(shù)器T0、T1的方式寄存器——TMOD

字節(jié)地址為89H。TMOD的格式如下:低4位用來定義T0,高4位用來定義T16.2.1與定時器/計數(shù)器T0、T1有關的特殊功能寄存器第六頁,共七十九頁,編輯于2023年,星期四D7 D6 D5D4 D3D2D1D0GATEC/TM1M0GATEC/TM1M0T1T0各位的意義如下:

GATE——門控位。GATE=1時,由外部中斷引腳、和TR0、TR1共同來啟動定時器。當 引腳為高電平時,TR0置位啟動定時器T0;當引腳為高電平時,TR1置位,啟動定時器T1。GATE=0時,僅由TR0和TR1置位來啟動定時器T0和T1。

第七頁,共七十九頁,編輯于2023年,星期四C/T——功能選擇位。C/T=1時,選擇計數(shù)功能;C/T=0時,選擇定時功能。T0、T1的計數(shù)、定時功能是通過TMOD中的位來選擇的。①定時器,設置C/T=0計數(shù)輸入信號是內部時鐘脈沖,每個機器周期使寄存器的值增1。每個機器周期等于12個振蕩周期,故計數(shù)速率為振蕩周期的1/12。當采用12MHz的晶體時,計數(shù)速率為1MHz。定時器的定時時間,與系統(tǒng)的振蕩頻率fosc、計數(shù)器的長度和初始值等有關。②計數(shù)器,設置C/T=1

這時,通過引腳T0(P3.4)和T1(P3.5)對外部信號進行計數(shù)。在每個機器周期的S5P2期間,CPU采樣引腳的輸入電平。若前一機器周期采樣值為1,下一機器周期采樣值為0,則計數(shù)器增1,此后的機器周期S3P1期間,新的計數(shù)值裝入計數(shù)器。第八頁,共七十九頁,編輯于2023年,星期四所以檢測一個1到0的跳變需要兩個機器周期,故計數(shù)脈沖頻率不能高于振蕩脈沖頻率的1/24。

M1、M0——工作方式選擇位。由于有M1和M0兩位,可以有四種工作方式,如表6-1所示。⒉定時器/計數(shù)器T0、T1的控制寄存器——TCON

控制寄存器TCON是一個逐位定義的8位寄存器,字節(jié)地址為88H,位尋址的地址為88H~8FH。其格式如下:位地址

8FH8EH8DH8CH8BH8AH89H88H位功能

TF1TR1TF0TR0IE1IT1IE0IT0第九頁,共七十九頁,編輯于2023年,星期四其中各位的意義如下:

TF1(TCON.7)——定時器/計數(shù)器T1的溢出標志。 T1溢出時,該位由內部硬件置位。若中斷開放,即響應中斷,進入中斷服務程序后,由硬件自動清0;若中斷禁止,可用于判跳,用軟件清0。

TR1(TCON.6)——T1的運行控制位。 用軟件控制,置l時,啟動T1;清0時,停止T1。

TF0(TCON.5)——T0的溢出標志。 T0溢出時,該位由內部硬件置位。若中斷開放,即響應中斷,進入中斷服務程序后,由硬件自動清0;若中斷禁止,可用于判跳,用軟件清0。

TR0(TCON.4)——T0的運行控制位。 用軟件控制,置1時,啟動T0;清0時,停止T0。第十頁,共七十九頁,編輯于2023年,星期四

IE1(TCON.3)——外部中斷1下降沿觸發(fā)標志位。

IE0(TCON.I)——外部中斷0下降沿觸發(fā)標志位。

IT1(TCON.0)——外部中斷1觸發(fā)類型選擇位。

IT0(TCON.0)——外部中斷0觸發(fā)類型選擇位。TCON的低4位與中斷有關,已在第五章“中斷系統(tǒng)”中討論過。

復位后,TCON的所有位均清0。T0和T1均是關斷的。

⒊定時器/計數(shù)器T0、T1的數(shù)據(jù)寄存器 由TH1(地址為8DH)、TL1(地址為8BH)和TH0(地址為8CH)、TL0(地址為8AH)寄存器所組成。復位后,所有這四個寄存器全部清零。⒋定時器/計數(shù)器中斷第十一頁,共七十九頁,編輯于2023年,星期四⑴中斷允許寄存器IE

EA位--中斷允許總控制位

ET0位、ET1位、ET2位--T0、T1和T2的中斷允許控制位。 某位=0,則禁止對應定時器/計數(shù)器的中斷。 某位=1,則允許對應定時器/計數(shù)器的中斷。⑵中斷矢量 定時器T0:000BH 定時器T1:001BH 定時器T2:002BH

第十二頁,共七十九頁,編輯于2023年,星期四⑶中斷優(yōu)先級寄存器IP

PT0位、PT1位、PT2位--T0、T1和T2中斷優(yōu)先級控制位。 某位為0,則相應的定時器/計數(shù)器的中斷為低優(yōu)先級; 某位為1,則相應的定時器/計數(shù)器的中斷為高優(yōu)先級。第十三頁,共七十九頁,編輯于2023年,星期四從圖6–2中可看到: C/T位的電平為“0”或“1”,用來設定是作定時器或計數(shù)器。 門控位GATE可用作對INTx引腳上的高電平時間進行計量。由圖6–2上可看出,當GATE=0時,A點為高電平,定時器/計數(shù)器的啟動/停止由TRx決定。TRx=1,定時器/計數(shù)器啟動;TRx=0,定時器/計數(shù)器停止。 當GATE=1時A點的電位由INTx決定,因而B點的電位就由TRx和INTx決定,即定時器/計數(shù)器的啟動/停止由TRx和INTx兩個條件決定。

計數(shù)溢出時,TFx置位。如果中斷允許,CPU響應中斷并轉入中斷服務程序,由內部硬件清TFx。TFx也可以由程序查詢和清零。

⒉方式1:16位定時器/計數(shù)器

當TMOD中的M1=0、M0=l時,選定方式1工作。第十四頁,共七十九頁,編輯于2023年,星期四方式1時,T0、T1的邏輯結構如圖6-3所示。這種方式下,計數(shù)寄存器由16位組成,THx高八位和TLx的低8位。 計數(shù)時,TLx溢出后向THx進位,THx溢出后將TFx置位,如果中斷允許,CPU響應中斷并轉入中斷服務程序,由內部硬件清TFx。TFx也可以由程序查詢和清零。

⒊方式2:定時常數(shù)自動重裝載的8位定時器/計數(shù)器

當TMOD中的M1=1、M0=0時,選定方式2工作。這種方式是將16位計數(shù)寄存器分為兩個8位寄存器,組成一個可重載的8位計數(shù)寄存器。方式2時定時器/計數(shù)器T0、T1的邏輯結構如圖6-4所示。在方式2中,TLx作為8位計數(shù)寄存器,THx作為8位計數(shù)常數(shù)寄存器。當TLx計數(shù)溢出時,一方面將TFx置位,并向CPU申請中斷;另一方面將THx的內容重新裝入TLx中,繼續(xù)計數(shù)。第十五頁,共七十九頁,編輯于2023年,星期四

根據(jù)對TMOD寄存器中M1和M0的設定,T0可選擇四種不同的工作方式,而T1只具有三種工作方式(即方式0、方式1和方式2)。⒈方式0:13位定時器/計數(shù)器 當TMOD中的M1=0、M0=0時,選定方式0工作。方式0時的結構如圖6-2所示。這種方式下,計數(shù)寄存器由13位組成,即THx高八位(作計數(shù)器)和TLx的低5位(32分頻的定標器)構成。TLx的高3位未用。計數(shù)時,TLx的低5位溢出后向THx進位,THx溢出后將TFx置位,并向CPU申請中斷。6.2.2定時器/計數(shù)器T0、T1的工作方式

第十六頁,共七十九頁,編輯于2023年,星期四重新裝入不影響THx的內容。方式2適合于作為串行口波特率發(fā)生器使用。⒋方式3當TMOD中的M1=l、M0=1時,選定方式3工作。這種方式是是將T0分為一個8位定時器/計數(shù)器和一個8位定時器,TL0用于8位定時器/計數(shù)器,TH0用于8位定時器。方式3時定時器/計數(shù)器T0、T1邏輯結構分別如圖6–5、圖6–6所示。⑴工作方式3下的定時器/計數(shù)器T0方式3時,T0的結構見圖6–5所示。其工作與方式0時相同,只是此時的計數(shù)器為8位計數(shù)器TL0,它占用了T0的GATE、INT0、啟動/停止控制位TR0、T0引腳(P3.4)以及

計數(shù)溢出標志位TF0和T0的中斷矢量(地址為000BH)等。第十七頁,共七十九頁,編輯于2023年,星期四

TH0所構成的定時器只能作為定時器用,因為此時的外部引腳T0已為定時器/計數(shù)器TL0所占用。這時它占用了T1的啟動/停止控制位TR1、計數(shù)溢出標志位TF1及T1中斷矢量(地址為001BH)。T0方式3時,T1的結構如圖6–6所示,T1只可選方式0、1或2。由于此時計數(shù)溢出標志位TF1及T1中斷矢量(地址為001BH)已被TH0所占用,所以T1僅能作為波特率發(fā)生器或其它不用中斷的地方。作串行口波特率發(fā)生器時,T1的計數(shù)輸出直接去串行口,只需設置好工作方式,串行口波特率發(fā)生器自動開始運行,如要停止工作,只需向T1送一個設為工作方式3的控制字即可。第十八頁,共七十九頁,編輯于2023年,星期四

80C52中的T2是一個16位的、具有自動重裝載和捕獲能力的定時器/計數(shù)器。在T2的內部,除了兩個8位計數(shù)器TL2、TH2和控制寄存器T2CON及T2MOD之外,還設置有捕獲寄存器RCAP2L(低字節(jié))和RCAP2H(高字節(jié))。T2的計數(shù)脈沖源可以有兩個:一個是內部機器周期,另一個是由T2(P1.0)端輸入的外部計數(shù)脈沖。T2象T0、T1一樣,既可用做定時器,也可用做計數(shù)器,由T2CON中的C/T位的電平所決定。T2有3種工作方式∶自動重裝載、俘獲和波特率發(fā)生器方式,由T2CON中有關位決定。 輸入引腳T2(P1.0)是外部計數(shù)脈沖輸入端;輸入引腳T2EX(P1.1)是外部控制信號輸入端。

6.3定時器/計數(shù)器T2

第十九頁,共七十九頁,編輯于2023年,星期四

⒈控制寄存器T2CON

T2控制寄存器T2CON是一個逐位定義的特殊功能寄存器,其字節(jié)地址為C8H,位地址為C8H~CFH。其格式如下:位地址

CFHCEHCDHCCHCBHCAHC9HC8H位功能

TF2EXF2RCLKTCLKEXEN2TR2/T2CP/RL2

TF2(T2CON.7)——T2溢出標志。定時器T2溢出時置位,并申請中斷。只能靠軟件清除。但在波特率發(fā)生器方式下,也即RCLK=1或TCLK=1時,定時器溢出不對TF2置位。

EXF2(T2CON.6)——T2外部標志。當EXEN2=1,且T2EX引腳上出現(xiàn)負跳變而造成捕獲或重裝載時,6.3.1定時器/計數(shù)器T2中的特殊功能寄存器第二十頁,共七十九頁,編輯于2023年,星期四EXF2置位,申請中斷。這時若已允許T2中斷,CPU將響應中斷,轉向中斷服務程序。EXF2要靠軟件來清除。

RCLK(T2CON.5)——接收時鐘標志??寇浖梦换蚯宄靡赃x擇T2或T1作串行口接收波特率發(fā)生器。RCLK=1時,用T2溢出脈沖作為串行口的接收時鐘;RCLK=0時,用T1的溢出脈沖作接收時鐘。

TCLK(T2CON.4)——發(fā)送時鐘標志??寇浖梦换蚯宄?,用以選擇T2或T1作串行口發(fā)送波特率發(fā)生器。TCLK=l時,用T2溢出脈沖作為串行口的發(fā)送時鐘;TCLK=0時,用T1的溢出脈沖作發(fā)送時鐘。

EXEN2(T2CON.3)——T2外部允許標志。 第二十一頁,共七十九頁,編輯于2023年,星期四

靠軟件設置或清除,以允許或禁止用外部信號來觸發(fā)捕獲或重裝載操作。當EXEN2=l時,若T2未用作串行口的波特率發(fā)生器,則在T2EX端出現(xiàn)的信號負跳變時,將造成T2捕獲或重裝載,并置EXF2標志為1,請求中斷。EXEN2=0時,T2EX端的外部信號不起作用。TR2(T2CON.2)——T2運行控制位??寇浖O置或清除,以決定T2是否運行。TR2=1,啟動T2,否則停止。C/T2(T2CON.1)——T2的定時器方式或計數(shù)器方式選擇位??寇浖O置或清除。T2有計數(shù)和定時兩種功能,,由控制位C/T2決定。C/T2=0時,選擇定時器工作方式。TH2和TL2對機器周期進行計數(shù)。每個機器周期使TL2寄存器的值增1。計數(shù)脈沖的頻率為1/12振蕩器頻率。

第二十二頁,共七十九頁,編輯于2023年,星期四C/T2=1時,選擇計數(shù)器工作方式,下降沿觸發(fā)。計數(shù)脈沖自T2(P1.0)引腳輸入,TH2和TL2作外部信號脈沖計數(shù)器用,每當外部脈沖負跳變時,計數(shù)器值增1。其工作情況和時序關系與定時器/計數(shù)器T0和T1的完全一樣,對外部計數(shù)脈沖的要求也相同。在每個機器周期的S5P2期間,CPU采樣引腳的輸入電平。若前一機器周期采樣值為1,下一機器周期采樣值為0,則計數(shù)器增1,此后的機器周期S3P1期間,新的計數(shù)值裝入計數(shù)器。所以檢測一個1到0的跳變需要兩個機器周期,故外部脈沖頻率不超過振蕩器頻率的1/24。CP/RL2(T2CON.0)——捕獲/重裝載標志。

用軟件設置或清除。CP/RL2=l選擇捕獲功能,這時若EXEN2=1,且T2EX端的信號負跳變時,發(fā)生捕獲操作。CP/RL2=0,選擇重裝載功能,這時若T2溢出或在EXEN2=1條件下T2EX端信號負跳變,都會造成自動重裝載操作。當RCLK=l或TCLK=l時,CP/RL2控制位不起作用,T2被強制工作于重裝載方式。重裝載發(fā)生于T2溢出時,常用來作波特率發(fā)生器。第二十三頁,共七十九頁,編輯于2023年,星期四

T2CON中的各位都是可位尋址的,因此所有標志或控制位都可以靠軟件來設置或清除。

T2控制寄存器T2CON的復位值=00000000B⒉方式控制寄存器——T2MOD

方式控制寄存器T2MOD是80C52/54/58芯片新增添的、T2的方式控制寄存器,字節(jié)地址為C9H。其格式如下:位地址

D7D6D5D4D3D2D1D0位功能

------T2OEDCEN該寄存器定義了2位,它們的含義是:T2OE(T2MOD.l)——T2輸出允許位。 當T2OE=1時,允許時鐘輸出至T2(P1.0)引腳。這一位僅對80C54/80C58有定義。第二十四頁,共七十九頁,編輯于2023年,星期四

DCEN(T2MOD.0)——向下計數(shù)允許位。 當DCEN=l時,允許T2向下(減)計數(shù), 當DCEN=0時,T2自動向上(增)計數(shù)。方式控制寄存器T2MOD復位值=××××××00B⒊數(shù)據(jù)寄存器——TH2、TL2

T2有一個16位的數(shù)據(jù)寄存器,是由高8位寄存器TH2和低8位寄存器TL2所組成。它們都只能字節(jié)尋址,相應的字節(jié)地址為CDH和CCH。這兩個寄存器都是讀/寫寄存器。復位后,所有這兩個寄存器全部清零。

第二十五頁,共七十九頁,編輯于2023年,星期四⒋捕獲寄存器——RCAP2H、RCAP2L

T2中的捕獲寄存器是一個16位的數(shù)據(jù)寄存器,由高8位寄存器RCAP2H和低8位寄存器RCAP2L所組成。它們也都只能字節(jié)尋址,相應的字節(jié)地址為CBH和CAH。 捕獲寄存器RCAP2H和RCAP2L,用于捕獲計數(shù)器TL2、TH2的計數(shù)狀態(tài),或用來預置計數(shù)初值的。TH2、TL2和RCAP2H、RCAP2L之間接有雙向緩沖器(三態(tài)門)。 復位后,所有這兩個寄存器全部清零。第二十六頁,共七十九頁,編輯于2023年,星期四 T2的工作方式用控制位CP/RL2(T2CON.0)和RCLK+TCLK來選擇。T2可能有三種工作方式(表6-2):捕獲方式、自動重轉載方式和波特率發(fā)生器方式。⒈

捕獲方式

捕獲方式是指:在一定條件下,自動將計數(shù)器TH2和TL2的數(shù)據(jù)讀入捕獲寄存器RCAP2H和RCAP2L,亦即TH2和TL2內容的捕獲是通過捕獲寄存器RCAP2H和RCAP2L來實現(xiàn)的。其工作原理可參見圖6-7。6.3.2定時器/計數(shù)器T2的工作方式

第二十七頁,共七十九頁,編輯于2023年,星期四當CP/RL2=l時,選擇捕獲方式。捕獲操作發(fā)生于下述兩種情況下:⑴定時器2的寄存器TH2和TL2溢出時,打開重裝載三態(tài)緩沖器,把TH2和TL2的內容自動讀入到捕獲寄存器RCAP2H和RCAP2L中。同時,溢出標志TF2置1,申請中斷。⑵當EXEN2=l且T2EX(P1.1)端的信號有負跳變時,將發(fā)生捕獲操作。同時標志EXF2置1,申請中斷。若T2的中斷是被允許的,則無論發(fā)生TF2=l還是EXF2=l,CPU都會響應中斷,此中斷向量的地址為002BH。響應中斷后,應用軟件清除中斷申請。TF2和EXF2都是直接可尋址位,可采用CLRTF2和CLREXF2指令實現(xiàn)清除中斷申請的功能。

⒉自動重裝載方式自動重裝載方式是指:在一定條件下,自動地將捕獲寄存器RCAP2H和RCAP2L的數(shù)據(jù)裝入計數(shù)器TH2和TL2中。第二十八頁,共七十九頁,編輯于2023年,星期四

一般說來捕獲寄存器RCAP2H和RCAP2L在這里起預置計數(shù)初值的功能。對8XC52,其工作原理可參見圖6-8。當CP/RL2=0時,選擇自動重裝載方式。 重裝載操作發(fā)生于下述兩種情況下:⑴T2的寄存器TH2和TL2溢出時,打開重裝載三態(tài)緩沖器,把捕獲寄存器RCAP2H和RCAP2L的內容自動裝載到TH2和TL2中。同時,溢出標志TF2置1,申請中斷。⑵當EXEN2=1且T2EX(P1.1)端的信號有負跳變時,將發(fā)生重裝載操作。同時標志EXF2置1,申請中斷。若T2的中斷是被允許的,則無論發(fā)生TF2=1還是EXF2=1,CPU都會響應中斷,此中斷向量的地址為002BH。響應中斷后,應用軟件撤除中斷申請。TF2和EXF2都是直接可尋址位,可采用CLRTF2和CLREXF2指令實現(xiàn)撤除中斷申請的功能。

第二十九頁,共七十九頁,編輯于2023年,星期四⒊波特率發(fā)生器方式

當T2CON中RCLK十TCLK=1時,T2工作于波特率發(fā)生器方式,即其溢出脈沖用做串行口的時鐘。T2的波特率發(fā)生器方式下的結構圖示于圖6-9中。在T2CON中,RCLK選擇串行通信接收波特率發(fā)生器,TCLK選擇發(fā)送波特率發(fā)生器,因而,發(fā)送和接收的波特率可以不同。此時,T2的輸入時鐘可由內部時鐘決定,也可由外部時鐘決定。若C/T2=0,選用內部時鐘,對機器周期計數(shù),計數(shù)脈沖的頻率為1/12振蕩器頻率.

若C/T2=1,選用外部時鐘,該時鐘由T2(P1.0)端輸入,每當外部脈沖負跳變時,計數(shù)器值增l。外部脈沖頻率不超過振蕩器頻率的l/24。

第三十頁,共七十九頁,編輯于2023年,星期四

由于脈沖溢出時,RCAP2H和RCAP2L的內容會自動裝載到TH2和TL2中,故波特率的值還決定于RCAP2H和RCAP2L裝載初值。

RCLK+TCLK還用于選擇T1還是T2作串行通信的波特率發(fā)生器。由圖6-9可看出,這兩位的值用來控制兩個電子開關的位置。值為0時,選用T1做波特率發(fā)生器;值為1時,選用T2做波特率發(fā)生器。當T2用做波特率發(fā)生器時,TH2的溢出不使TF2置位,不產生中斷。因而,當T2用做波特率發(fā)生器時,沒有必要禁止中斷。當T2用做波特率發(fā)生器時,若EXEN2置1,則T2EX端的信號產生負跳變時,EXF2將置1,但不會發(fā)生重裝載或捕獲操作。這時,T2EX可以作為一個附加的外部中斷源。

第三十一頁,共七十九頁,編輯于2023年,星期四在波特率發(fā)生器工作方式下,在T2計數(shù)過程中(即TR2=1之后),不能再讀/寫TH2和TL2的內容。如果讀,則讀出的結果不會精確(因為每個狀態(tài)加1);如果寫,則會影響T2的溢出而使波特率不穩(wěn)定。在T2計數(shù)過程中,可以讀出但不能改寫RCAP2H和RCAP2L的內容。需要訪問RCAP2H和RCAP2L,應事先關閉定時器工作。第三十二頁,共七十九頁,編輯于2023年,星期四

監(jiān)視定時器T3有時俗稱看門狗(watchdog),它的作用是強迫單片微機進入復位狀態(tài),使之從硬件或軟件故障中解脫出來。 在飛利浦80C552中,監(jiān)視定時器T3由一個11位的分頻器和8位定時器T3組成,如圖6一10所示。預分頻器輸入為晶振1/12的信號,晶振為12MHz時,輸入為1MHz,而8位定時器T3每隔時間t加1: t=12×2048/fosc 當晶振為12MHz時,t為2ms。 若8位定時器溢出,則產生一個尖脈沖,它將復位8×C552,同時在RST引腳上也將產生1個正的復位尖脈沖。6.4監(jiān)視定時器(看門狗)T3第三十三頁,共七十九頁,編輯于2023年,星期四

T3由外部引腳/EW和電源控制寄存器中的PCON.4(WLE)和PCON.l(PD)控制。

EW——看門狗定時器允許,低電平有效。EW=0時,允許看門狗定時器,禁止掉電方式;EW=1時.禁止看門狗定時器,允許掉電方式。

WLE(PCON.4)——看門狗定時器允許重裝標志。若WLE置位,定時器T3只能被軟件裝入,裝入后WLE自動清除。定時器T3的重裝和溢出,產生復位的時間間隔,由裝入T3的值決定,對于8×C552,其監(jiān)視間隔可編程為2ms至2×255ms。定時器T3的工作過程:在T3溢出時,復位8XC552,并產生復位脈沖輸出至復位引腳RST。為防止系統(tǒng)復位,必須在定時器T3溢出前,通過軟件對其進行重裝。如果發(fā)生軟件或硬件故障,將使軟件對定時器T3重裝失敗,第三十四頁,共七十九頁,編輯于2023年,星期四從而T3溢出導致復位信號的產生。用這樣的方法可以在軟件失控時,恢復程序的正常運行。 首先要確定系統(tǒng)能在不正常狀態(tài)下維持多久,這段時間就設定為監(jiān)視定時器的最大間隔時間。因為T3是加1計數(shù)器,T3中裝入0,則監(jiān)視時間間隔最長,裝入值為FFH時,監(jiān)視時間間隔最短。 在軟件調試時,可以把EW接高電平以禁止看門狗工作,軟件調試結束后再把EW接至低電平,通過人為制造故障,觀察看門狗工作是否正常。 下面一段程序顯示了如何控制看門狗工作的。

第三十五頁,共七十九頁,編輯于2023年,星期四例:watchdog使用的一段程序如下: T3 EQU 0FFH;定時器T3的地址PCONEQU 87H;電源控制寄存器PCON的地址WATCH_INTVEQU156;看門狗的時間間隔(2X100ms)

插在用戶程序中對看門狗需要重新裝入的地方:LCALLWATCHDOG看門狗的服務子程序:WATCHDOG:ORLPCON,#10H ;允許定時器T3重裝 MOVT3,#WATCH_INTV;裝載定時器T3 RET

第三十六頁,共七十九頁,編輯于2023年,星期四

⒈定時器/計數(shù)器溢出率的計算

定時器/計數(shù)器運行前,在其中預先置入的常數(shù),稱為定時常數(shù)或計數(shù)常數(shù)(TC)。由于計數(shù)器是加1(向上)計數(shù)的,故而預先置入的常數(shù)均應為補碼。其中:

t——定時時間。 Tc——機器周期。

6.5定時器/計數(shù)器的應用編程

6.5.1定時器的應用第三十七頁,共七十九頁,編輯于2023年,星期四

Fosc——晶體振蕩器頻率。 L——計數(shù)器的長度。對于T0及T1: 方式0 L=13213=8192 方式1 L=16216=65536 方式2 L=828=256對于T2: L=16216=65536 TC——定時器/計數(shù)器初值,即定時常數(shù)或計數(shù)常數(shù)。 定時時間的倒數(shù)即為溢出率,即:第三十八頁,共七十九頁,編輯于2023年,星期四根據(jù)要求的定時時間t、設定的定時器工作方式(確定L)及晶體振蕩頻率fosc,可計算出TC值(十進制數(shù)),再將其轉換成二進制數(shù)TCB,然后再分別送入THi、TLi(對于T0,i=0;對于T1,i=l)。 對于定時器/計數(shù)器T0、T1:方式0時:TCB=TCH+TCL,TCH——高8位,TCL—低5位MOV THi,#TCH ;送高8位MOV TLi,#TCL ;送低5位(高3位為0)方式1時:TCB=TCH+TCL,TCH——高8位,TCL—低8位MOV THi,#TCH ;送高8位MOV TLi,#TCL ;送低8位。方式2時:TCB——8位重裝載MOVTHi,#TCB ;送高8位

第三十九頁,共七十九頁,編輯于2023年,星期四MOVTLi,#TCB ;送低8位。對于定時器/計數(shù)器T2:與T0、T1的方式1相同例1.要求在P1.0引腳上產生周期為2ms的方波輸出。 已知晶體振蕩器的頻率為fosc=6MHz??墒褂肨0作定時器,設為方式0,設定lms的定時,每隔1ms使P1.0引腳上的電平變反。(1)解:定時常數(shù)計算振蕩器的頻率fosc=6MHz,機器周期為2μs,方式0計數(shù)器長度L=13(213=8192),定時時間t=1ms=0.001s定時常數(shù):第四十頁,共七十九頁,編輯于2023年,星期四TC為7692=1E0CH,二進制數(shù)TCB=00011110000

01100B,取低13位,其中高8位TCH=F0H,低5位為TCL=0CH.計數(shù)長度為1E0CH=7692,定時為(8192—7692)×2μs=0.001STMOD的設定(即控制字)(2)編程 ORG 0000H AJMP MAIN

第四十一頁,共七十九頁,編輯于2023年,星期四

ORG 000BH ;T0中斷矢量 AJMPINQP ORG 0030HMAIN: MOVTMOD,#00H;寫控制字,設T0為定時器 ;方式0

MOV TH0,#0F0H;寫定時常數(shù)(定時1ms)

MOV TL0,#0CH SETB TR0 ;啟動T0

SETB ET0;允許T0中斷

SETB EA;開放CPU中斷

AJMP $ ;定時中斷等待

第四十二頁,共七十九頁,編輯于2023年,星期四

ORG XXXXH ;T0中斷服務程序

INQP:MOVTH0,#0F0H ;重寫定時常數(shù)

MOV TL0,#0CH CPL P1.0 ;P1.0變反輸出

RETI ;中斷返回

例2.使用T1的方式1,設定1ms的定時。同樣,在P1.0引腳上產生周期為2ms的方波輸出。晶體振蕩器的頻率為fosc=6MHz。⑴解:

定時常數(shù)計算振蕩器的頻率fosc=6MHz=6×106Hz,方式1計數(shù)器長度L=16,2L=216=65536定時時間t=1ms=0.001s定時常數(shù)第四十三頁,共七十九頁,編輯于2023年,星期四定時常數(shù)TC轉換成二進制TCB=1111111000001100B=FE0CH所以TCH=FEH(高8位),TCL=0CH(低8位)TMOD的設定(即控制字)第四十四頁,共七十九頁,編輯于2023年,星期四⑵

編程 ORG0000H AJMPMAIN ORG 000BH ;T0中斷矢量地址 AJMPINQP ORG 100H ;主程序入口MAIN:MOVTMOD,#10H ;寫控制字,T1為定時器、 ;方式1 MOV TH1,#0FEH ;寫定時常數(shù),定時1ms MOV TL1,#0CH SETB TR1 ;啟動T1

第四十五頁,共七十九頁,編輯于2023年,星期四

SETB ET1 ;允許T1中斷

SETB EA ;開放CPU中斷 AJMP $ ORG 00XXH ;中斷服務程序INQP:MOVTH1,#0FEH ;重寫定時常數(shù) MOV TL1,#0CH CPL P1.0 ;P1.0變反輸出 RETI ;中斷返回第四十六頁,共七十九頁,編輯于2023年,星期四例3.欲用80C51產生兩個方波,一個周期為200μs,另一個周期為 400μs,該80C51同時使用串行口,用定時器/計數(shù)器作為 波特率發(fā)生器。⑴這時T0采用方式3工作,其中,TL0產生200μs定時,由P1.0輸出方波;TH0產生400μs定時,由Pl.1輸出方波;T1設置為方式2作波特率發(fā)生器用。focs=9.216MHz。第四十七頁,共七十九頁,編輯于2023年,星期四

定時常數(shù)計算?TL0定時常數(shù)為TCL0:tl0=100μs單位μs,為十進數(shù)制數(shù)值。十六進制數(shù)值為TCBL0=B3H。?TH0定時常數(shù)為TCH0:定時時間為th0=200μs單位μs,為十進制數(shù)值。十六進制的值為TCBH0=66H。?TH1的波特率(詳細計算見串行口部分)設波特率為2400,則定時常數(shù)為TC2=F6H第四十八頁,共七十九頁,編輯于2023年,星期四⑵編程 ORG 0000H AJMP MAIN ORG 000BH ;TL0的中斷入口 AJMPITL0 ORG 00lBH ;TH0的中斷入口 AJMPITH0 ORG0100HMAIN: MOVSP,#60H ;設棧指針 MOV TMOD,#23H ;設T0為方式3,TI為2

第四十九頁,共七十九頁,編輯于2023年,星期四 MOV TL0,#0B3H;設TL0初值(100μs定時) MOV TH0,#66H;設TH0初值(200μs定時) MOV TL1,#0F6H;設TL1初值(波特率為2400) MOV TH1,#0F6H;設TH1初值 SETB TR0;啟動TL0 SETB TR1;啟動TH0 SETB ET0;允許TL0中斷 SETB ET1;允許TH0中斷 SETB EA;CPU中斷開放 AJMP $

第五十頁,共七十九頁,編輯于2023年,星期四 ORG 0200HITL0:MOVTL0,#0B3H ;重裝定時常數(shù) CPL P1.0 ;輸出方波(200μs) RETIITH0:MOVTH0,#66H ;重裝定時常數(shù) CPL P1.1 ;輸出方波(400μs) RETI第五十一頁,共七十九頁,編輯于2023年,星期四 當TMOD寄存器中C/T位設置為“1”時,定時器/計數(shù)器作為計數(shù)器使用,可對來自單片微機引腳T0或T1上的負跳變脈沖進行計數(shù),計數(shù)溢出時可申請中斷,也可查詢溢出標志位TFx。例4.假如一個用戶系統(tǒng)已使用了二個外部中斷源,即INT0和,INT1,用戶系統(tǒng)要求從P1.0引腳上輸出一個5KHz的方波,并要求采用定時器/計數(shù)器作為串行口的波特率發(fā)生器,另外還需要再增加一個外部中斷源。 ⑴為了不增加其他硬件開銷,可以把T0設置為方式3,這時可把單片微機的引腳T0作為外部中斷源,TL0設置為計數(shù)器,但計數(shù)器的定時常數(shù)設為FFH,這樣當T0引腳上出現(xiàn)從“1”至“0”的負跳變時,TL0計數(shù)溢出,申請中斷,相當于一個邊沿觸發(fā)的外部中斷源。6.5.2計數(shù)器的應用

第五十二頁,共七十九頁,編輯于2023年,星期四 在T0方式3下,TH0只能做8位定時器,用來產生5KHz方波的定時。TH0只能做8位定時器,用來產生5KHz方波的定時。當T0設置為方式3之后,T1就作為串行口的波特率發(fā)生器,設為方式2。 由P1.0引腳上輸出5KH頻率的方波,而方波周期為200μs,則要求定時時間為100μs,若采用12MHz的晶體振蕩器,則機器周期為1μs。計算時間常數(shù):(28-TC)×1μs=100μs ∴TC=256-100=156⑵編程: ORG 0000H SJMP MAIN ORG 000BH AJMP TL0INT ;TL0中斷入口

第五十三頁,共七十九頁,編輯于2023年,星期四

ORG 001BH AJMP TH0INT ;TH0中斷入口 ORG 0030HMAIN: MOV TMOD,#27H;設T0為方式3,TL0為計數(shù) ;器方式,TH0為定時器方式,T1作波特率發(fā)生器,方式2。 MOV TH0,#156 ;TH0定時常數(shù)。 MOV TL0,#0FFH ;TL0計數(shù)常數(shù) MOV TL1,#BAUD ;BAUD根據(jù)波特率算出 ;的時間常數(shù)。 MOV TH1,#BAUD ;BAUD MOV TCON,#55H;置TR0和TR1為“1”,啟 ;動TL0和TH0。

第五十四頁,共七十九頁,編輯于2023年,星期四

SETB ET0 ;允許TR0中斷 SETB ET1 ;允許TR1中斷 SETB EA ;允許CPU中斷 SJMP $ ;中斷等待。 ORG 0100HTL0INT: MOV TL0,#0FFH ;重置計數(shù)長度 (中斷處理) RETITH0INT: MOV TH0,#156 ;重置定時常數(shù) CPL P1.0 ;P1.0引腳輸出方波 RETI第五十五頁,共七十九頁,編輯于2023年,星期四

門控位GATE可用作對INTx引腳上的高電平持續(xù)時間進行計量。當GATE位設為“1”,并設定時器/計數(shù)器啟動位TRx為“1”,這時定時器/計數(shù)器定時完全取決于INTx引腳,僅當INTx引腳電平為“1”時,定時器才工作,換另一角度看,定時器實際記錄的時間就是相應INTx引腳上高電平的持續(xù)時間。通過反相器,則可測得相應INTx引腳上低電平的持續(xù)時間。二個時間的和即為INTx引腳上輸入波形的周期,其倒數(shù)即為INTx引腳上輸入波形的頻率。還可算出占空比等參數(shù)。

例5.利用定時器/計數(shù)器測定圖6-11(下頁)所示波形的一個周期長度。 利用門控信號GATE啟動定時器的方法。設如圖示,T0為定時器,為高電平時,啟動定時器;T1為計數(shù)器,T1的電平由1到0,計數(shù)器計數(shù)。6.5.3門控位GATE的應用第五十六頁,共七十九頁,編輯于2023年,星期四P3.3(INT1)TR1置1T1開始計時TR1清零圖6–11波形脈沖寬度測試原理編程:⑴查詢法 ORG 0000HSTART: MOV TMOD,#90H ;設置T1為定時器, ;方式1,GATA位置“1” MOV TL1,#00H ;置為最大定時值 MOV TH1,#00H LP1: JB P3.3,LP1 ;P3.3為高電平,等待第五十七頁,共七十九頁,編輯于2023年,星期四

SETB TR1 ;當P3.3為低電平時,置TR1位為“1”LP2: JNB P3.3,LP2 ;當P3.3為低電平時,再等待LP3: JB P3.3,LP3 ;當P3.3為高電平時,T1開始定時計數(shù) CLR TR1 ;當P3.3為低電平時,高電平脈寬定 ;時計數(shù)結束 SJMP $ 當fosc=12MHz時,機器周期為1μs,本方案最大被測脈沖寬度為65536μs(65.536ms)。由于靠軟件進行啟動和停止計數(shù),存在一定的測量誤差。 若被測波形除了接至P3.3,另外同時通過一個反相器接至P3.2(INT0),則通過編程同時可以測得波形的高電平寬度和低電平寬度。第五十八頁,共七十九頁,編輯于2023年,星期四⑵中斷法

對于脈沖寬度大于65.536ms的脈沖,可以采用對定時溢出次數(shù)進行計數(shù)的方法。這樣,脈寬為(定時溢出時間×溢出次數(shù))+定時時間。利用定時器/計數(shù)器來測定脈沖周期的方法參見圖6-12。(1)設定晶體振蕩器為6MHz,機器周期Tc為2μs,定時器/計數(shù)器T0為方式1,定時溢出時間為100ms,

則T0定時時間常數(shù)為:(TH0)=3CH,(TL0)=B0H 因為外部脈沖同時接至T1的輸入引腳T1,所以T1腳上對下降沿計數(shù)二次,即為外部脈沖的一個周期時間?,F(xiàn)設T1為計數(shù)器。計數(shù)值為2。當計數(shù)值為1時,啟動定時器;當計數(shù)值為2時,中斷計數(shù)器T1,并停止定時器T0的定時;第五十九頁,共七十九頁,編輯于2023年,星期四T1中斷優(yōu)先級設為高于定時器T0。計數(shù)初值為FFFEH:(TH1)=FFH,(TL0)=FEH。(2)編程 ORG 0000H SJMP MAIN ORG 000BH ;定時器T0中斷入口 AJMP TIMEO

ORG 00IBH ;定時器T1中斷入口 AJMPTIMEI

第六十頁,共七十九頁,編輯于2023年,星期四 ORG 0030HMAIN:MOVR0,#0 ;清除T0定時中斷次數(shù)計數(shù)器MOV TMOD,#59H ;設T0為定時器、方式1, ;門控位GATE=1,設T1為計數(shù)器、方式1 MOV TH0,#3CH ;T0定時器初值 MOV TLO,#0B0H MOV TH1,#0FFH ;T1計數(shù)器初值 MOV TL1,#0FEH SETB TR0 ;啟動T0定時器 SETB TR1 ;啟動T1計數(shù)器 MOV IP,#08H ;T1中斷優(yōu)先級高于T0

第六十一頁,共七十九頁,編輯于2023年,星期四

SETB ET1 ;允許T1中斷 SETB ET0 ;允許T0中斷 SETB EA ;CPU開中斷 SETB 20H ;設20H為T1計數(shù)中斷標志LOOP

溫馨提示

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

評論

0/150

提交評論