




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、1 在測(cè)控系統(tǒng)中,常常需要有實(shí)時(shí)時(shí)鐘和計(jì)數(shù)器,以實(shí)現(xiàn)定時(shí)控制以及對(duì)外界事件進(jìn)行計(jì)數(shù)。傳統(tǒng)8051系列單片機(jī)有二個(gè)16位定時(shí)/計(jì)數(shù)器,它們是定時(shí)/計(jì)數(shù)器0、定時(shí)/計(jì)數(shù)器1,STC89C52單片機(jī)在此基礎(chǔ)上增加一個(gè)16位定時(shí)/計(jì)數(shù)器2,它們簡(jiǎn)稱(chēng)為:T0、T1和T2。 2 本章主要內(nèi)容:定時(shí)器/計(jì)數(shù)器的組成與功能,工作模式和工作方式,以及與其相關(guān)的4個(gè)特殊功能寄存器TMOD、TCON、T2CON、T2MOD各位的定義及其編程,最后介紹定時(shí)器/計(jì)數(shù)器的編程及應(yīng)用實(shí)例。 6.1 STC89C52單片機(jī)定時(shí)器單片機(jī)定時(shí)器/計(jì)數(shù)器的組成計(jì)數(shù)器的組成 6.2 定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器0和和1 6.3 定時(shí)定時(shí)/
2、計(jì)數(shù)器計(jì)數(shù)器23 STC89C52定時(shí)/計(jì)數(shù)器由T0、T1、T2和看門(mén)狗定時(shí)器WDT_CONTR組成,T0由特殊功能寄存器TH0、TL0構(gòu)成,T1由特殊功能寄存器TH1、TL1構(gòu)成,T2由特殊功能寄存器TH2、TL2和RXAP2H、RCAP2L構(gòu)成。6.1 STC89C52 定時(shí)器定時(shí)器/計(jì)數(shù)器的組成計(jì)數(shù)器的組成46.2 定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器0和和1 STC89C51RC/RD+系列單片機(jī)的定時(shí)/計(jì)數(shù)器0和1,與傳統(tǒng)8051的定時(shí)/計(jì)數(shù)器完全兼容。 當(dāng)定時(shí)器1作波特率發(fā)生器時(shí),定時(shí)器0可以當(dāng)兩個(gè)8位定時(shí)器使用。 6.2.1 定時(shí)器/計(jì)數(shù)器0和1的相關(guān)寄存器6.2.2 定時(shí)/計(jì)數(shù)器0和1的四種
3、工作方式6.2.3 定時(shí)/計(jì)數(shù)器0或1的應(yīng)用5 STC89C51RC/RD+系列單片機(jī)內(nèi)部設(shè)置的兩個(gè)16位定時(shí)器/計(jì)數(shù)器0和1都具有定時(shí)和計(jì)數(shù)兩種工作模式,在特殊功能寄存器TMOD中有一位控制位 來(lái)選擇T0或T1為定時(shí)器還是計(jì)數(shù)器,定時(shí)器或計(jì)數(shù)器的核心部件是一個(gè)加法計(jì)數(shù)器,其本質(zhì)是對(duì)脈沖進(jìn)行計(jì)數(shù)。只是計(jì)數(shù)脈沖來(lái)源不同:如果計(jì)數(shù)脈沖來(lái)源于系統(tǒng)時(shí)鐘,則為定時(shí)方式,此時(shí)定時(shí)/計(jì)數(shù)器每12個(gè)時(shí)鐘或每6個(gè)時(shí)鐘得到一個(gè)計(jì)數(shù)脈沖,計(jì)數(shù)值加1;如果計(jì)數(shù)脈沖來(lái)自單片機(jī)外部引腳(T0為P3.4,T1為P3.5),則為計(jì)數(shù)方式,每來(lái)一個(gè)計(jì)數(shù)脈沖加1。TC/6當(dāng)定時(shí)器當(dāng)定時(shí)器/計(jì)數(shù)器計(jì)數(shù)器工作在定時(shí)模式工作在定時(shí)模式
4、時(shí),可在燒錄用戶(hù)時(shí),可在燒錄用戶(hù)程序時(shí)在程序時(shí)在STC -ISP編程器編程器中設(shè)置如圖中設(shè)置如圖4-12是系統(tǒng)時(shí)鐘是系統(tǒng)時(shí)鐘/12還是系統(tǒng)時(shí)鐘還是系統(tǒng)時(shí)鐘/6后讓后讓T0和和T1進(jìn)行計(jì)數(shù)。當(dāng)定時(shí)進(jìn)行計(jì)數(shù)。當(dāng)定時(shí)/計(jì)數(shù)器工計(jì)數(shù)器工作在作在計(jì)數(shù)模式時(shí)計(jì)數(shù)模式時(shí),對(duì)外部計(jì)數(shù)脈沖,對(duì)外部計(jì)數(shù)脈沖計(jì)數(shù)不分頻計(jì)數(shù)不分頻。 圖4-12 計(jì)數(shù)脈沖倍速設(shè)置 67 結(jié)論:結(jié)論: 單片機(jī)中的定時(shí)器和計(jì)數(shù)器是一個(gè)東單片機(jī)中的定時(shí)器和計(jì)數(shù)器是一個(gè)東西,只不過(guò)計(jì)數(shù)器用來(lái)記錄外界發(fā)生的事西,只不過(guò)計(jì)數(shù)器用來(lái)記錄外界發(fā)生的事情,而定時(shí)器則是由單片機(jī)提供的一個(gè)非情,而定時(shí)器則是由單片機(jī)提供的一個(gè)非常穩(wěn)定的計(jì)數(shù)源。常穩(wěn)定的計(jì)數(shù)源
5、。8 綜上所述,我們已知定時(shí)器綜上所述,我們已知定時(shí)器/計(jì)數(shù)器是一種計(jì)數(shù)器是一種可編程部件可編程部件,所以在其開(kāi)始工作之前,所以在其開(kāi)始工作之前,CPU必必須將一些命令(控制字)寫(xiě)入定時(shí)器須將一些命令(控制字)寫(xiě)入定時(shí)器/計(jì)數(shù)器。計(jì)數(shù)器。這個(gè)過(guò)程稱(chēng)為這個(gè)過(guò)程稱(chēng)為定時(shí)器定時(shí)器/計(jì)數(shù)器的初始化計(jì)數(shù)器的初始化。 當(dāng)當(dāng)CPU用軟件給定時(shí)器設(shè)置了某種工作方用軟件給定時(shí)器設(shè)置了某種工作方式之后,式之后,定時(shí)器就會(huì)按設(shè)定的工作方式獨(dú)立運(yùn)定時(shí)器就會(huì)按設(shè)定的工作方式獨(dú)立運(yùn)行,不再占用行,不再占用CPU的操作時(shí)間的操作時(shí)間,除非定時(shí)器計(jì),除非定時(shí)器計(jì)數(shù)溢出,才可能中斷數(shù)溢出,才可能中斷CPU當(dāng)前操作。當(dāng)前操作。6
6、.2.1 定時(shí)器/計(jì)數(shù)器0和1的相關(guān)寄存器 STC89C52單片機(jī)與定時(shí)/計(jì)數(shù)器0和1的相關(guān)寄存器見(jiàn)表6-2所示.表6-2 定時(shí)器/計(jì)數(shù)器的0和1相關(guān)寄存器10GATEC/T M10MGATE C/T1M0M控 制 T 1控 制 T 089H和T 類(lèi)同01M0M00011011方 式方式0 13位方式1 16位方式2 自動(dòng)重裝方式3 適用T001定時(shí)器模式計(jì)數(shù)器模式01與INT 無(wú)關(guān)00與INT 有關(guān) 1. 定時(shí)/計(jì)數(shù)器工作模式寄存器TMOD(89H)M1M0:方式選擇位方式選擇位C/T : 功能選擇位功能選擇位GATE: 門(mén)控位門(mén)控位11GATE=1時(shí),若時(shí),若TR1=1,并且,并且 INT
7、1=1,允許允許T1計(jì)數(shù)計(jì)數(shù) 若若TR1=0,或,或INT1=0,都禁止都禁止T1計(jì)數(shù)計(jì)數(shù) GATE=0,若若TR1=1,允許計(jì)數(shù);若允許計(jì)數(shù);若TR1=0,禁止計(jì)數(shù),禁止計(jì)數(shù) 返回12 由于在不同方式下計(jì)數(shù)器位數(shù)不同,由于在不同方式下計(jì)數(shù)器位數(shù)不同,因而最大計(jì)數(shù)值(量程)也不同。因而最大計(jì)數(shù)值(量程)也不同。 方式方式0:M=213=8192 方式方式1:M=216=65536 方式方式2:M=28=256 方式方式3:T0定時(shí)器分成兩個(gè)定時(shí)器分成兩個(gè)8位計(jì)數(shù)器,位計(jì)數(shù)器,兩個(gè)兩個(gè)M均均256,T1停止計(jì)數(shù)。停止計(jì)數(shù)。返回返回13TR1(0):運(yùn)行控制位運(yùn)行控制位 2. 定時(shí)定時(shí)/計(jì)數(shù)器控制
8、寄存器計(jì)數(shù)器控制寄存器TCON(88H) TF1(0): 溢出標(biāo)志位溢出標(biāo)志位14 定時(shí)器定時(shí)器/計(jì)數(shù)器的初始化計(jì)數(shù)器的初始化初始化的步驟如下:初始化的步驟如下:1) 確定工作方式確定工作方式-對(duì)對(duì)TMOD賦值賦值2) 置定時(shí)或計(jì)數(shù)的初值置定時(shí)或計(jì)數(shù)的初值-可直接寫(xiě)入可直接寫(xiě)入TH0(1),TL0(1)3) 根據(jù)需要開(kāi)放定時(shí)器根據(jù)需要開(kāi)放定時(shí)器/計(jì)數(shù)器的中斷計(jì)數(shù)器的中斷4) 啟動(dòng)定時(shí)器啟動(dòng)定時(shí)器/計(jì)數(shù)器。計(jì)數(shù)器。 當(dāng)實(shí)現(xiàn)了啟動(dòng)要求之后,定時(shí)器就按規(guī)當(dāng)實(shí)現(xiàn)了啟動(dòng)要求之后,定時(shí)器就按規(guī)定的工作方式和初值開(kāi)始計(jì)數(shù)或定時(shí)。定的工作方式和初值開(kāi)始計(jì)數(shù)或定時(shí)。15 因?yàn)槎〞r(shí)器因?yàn)槎〞r(shí)器/計(jì)數(shù)器是作計(jì)數(shù)器是
9、作“加加1”計(jì)數(shù),并在計(jì)滿(mǎn)溢計(jì)數(shù),并在計(jì)滿(mǎn)溢出時(shí)產(chǎn)生中斷,初值出時(shí)產(chǎn)生中斷,初值X可以這樣計(jì)算:可以這樣計(jì)算: X = M - 計(jì)數(shù)值計(jì)數(shù)值(計(jì)數(shù)次數(shù))計(jì)數(shù)次數(shù)) 例例1:在:在6MHZ主頻下,要求產(chǎn)生主頻下,要求產(chǎn)生1ms的定時(shí)的定時(shí),計(jì)算初值計(jì)算初值分析:分析: 因?yàn)槎〞r(shí)器每因?yàn)槎〞r(shí)器每“加加1”一次所需的時(shí)間為一次所需的時(shí)間為2s,如果如果要產(chǎn)生要產(chǎn)生1ms的定時(shí),需加的定時(shí),需加500次,次,500即為計(jì)數(shù)值。即為計(jì)數(shù)值。 方式方式1下工作下工作: 初值初值 X =M-計(jì)數(shù)值計(jì)數(shù)值=65536-500=FE0CH例例2:計(jì):計(jì)100個(gè)外部脈沖,產(chǎn)生中斷請(qǐng)求,計(jì)數(shù)初值個(gè)外部脈沖,產(chǎn)生中斷
10、請(qǐng)求,計(jì)數(shù)初值x x=M-10016若若Fosc=12MHz ,在在P1.0 輸出周期為輸出周期為400us方方波波,定時(shí)定時(shí)/計(jì)數(shù)器工作方式計(jì)數(shù)器工作方式2,問(wèn)計(jì)數(shù)初值為多少問(wèn)計(jì)數(shù)初值為多少? 初始化程序初始化程序? 機(jī)器周期=12/Fosc=1us, (256-X)*1us=200usX=56=38HP1.0MOV TMOD,#02HSETB ET0SETB EAMOV TL0,#38HMOV TH0,#38HSETB TR0176.2.2 定時(shí)/計(jì)數(shù)器0和1的四種工作方式 由上節(jié)可知,通過(guò)對(duì)TMOD中的M1M0的設(shè)置,可以選擇四種工作方式。也就是每個(gè)定時(shí)器可構(gòu)成4種電路結(jié)構(gòu)模式。 在模式
11、0、1和2,T0和T1的工作方式相同,在模式3,兩個(gè)定時(shí)器的方式不同。下面以T1為例,分述各種工作方式的特點(diǎn)和用法。1方式02方式方式13方式方式2這種工作方式可省去用戶(hù)軟件中重裝常數(shù)的程序,并可產(chǎn)生相當(dāng)精度的定時(shí)時(shí)間。4方式方式 3該方式只適用于定時(shí)器T0,T0被拆成兩個(gè)獨(dú)立的8位計(jì)數(shù)器TH0和TL0。TH0不能作為外部計(jì)數(shù)模式22T0工作在方式3下T1的各種工作方式 T0工作在方式3時(shí),T1可定為方式0、方式1和方式2,用來(lái)作為串行口的波特率發(fā)生器,或不需要中斷的場(chǎng)合,定時(shí)器T1處于方式3時(shí)相當(dāng)于TR1=0,停止計(jì)數(shù)。T1運(yùn)行的控制運(yùn)行的控制條件只有條件只有2個(gè)個(gè),即即C/T和和M1,M0
12、.236.2.3 定時(shí)/計(jì)數(shù)器0或1的應(yīng)用 定時(shí)/計(jì)數(shù)器的應(yīng)用編程主要需考慮:根據(jù)應(yīng)用要求,通過(guò)程序初始化,正確設(shè)置控制字,正確計(jì)算計(jì)數(shù)初值,編寫(xiě)中斷服務(wù)程序,適時(shí)設(shè)置控制位等。通常情況下,設(shè)置順序大致如下:l 工作方式控制字(TMOD、T2CON)的設(shè)置;l 計(jì)數(shù)初值的計(jì)算并裝入THx、TLx、RCAP2H、RCAP2L;l 中斷允許位ETx、EA的設(shè)置,使主機(jī)開(kāi)放中斷;l 啟/停位TRx設(shè)置;2451系列單片機(jī)T0或T1是屬于加法計(jì)數(shù)器,因此就不能直接將實(shí)際的計(jì)數(shù)值作為計(jì)數(shù)初值送入計(jì)數(shù)寄存器THx,TLx中,而必須將實(shí)際計(jì)數(shù)值以28、213、216為模求補(bǔ),以其補(bǔ)碼作為計(jì)數(shù)初值設(shè)置THx和
13、TLx。設(shè):實(shí)際計(jì)數(shù)值為X,計(jì)數(shù)器長(zhǎng)度為n(n=8、13、16),則應(yīng)裝入計(jì)數(shù)器THx和TLx的計(jì)數(shù)初值為2n-X,式中2n為取模值。例如:工作方式0,以213為模, 工作方式1,以216為模等, 計(jì)數(shù)初值:(X)補(bǔ)=2n - X。25定時(shí)模式,是對(duì)機(jī)器周期計(jì)數(shù),而機(jī)器周期與選定主頻密切相關(guān),因此,需要根據(jù)應(yīng)用系統(tǒng)選定的主頻來(lái)確定機(jī)器周期值,現(xiàn)以主頻為6MHz為例,則機(jī)器周期為: 注意:對(duì)于傳統(tǒng)51系列單片機(jī),式(1)中分子取值為12,而對(duì)于STC89C52單片機(jī),式(1)中分子取值是根據(jù)計(jì)數(shù)脈沖倍速設(shè)置來(lái)定(參見(jiàn)教材圖4-12),若單片機(jī)選12T,則式(1)分子為12,若選6T,則式(1)分
14、子為6。若沒(méi)有特別提出,書(shū)中STC89C52單片機(jī)都選12T模式。) 1 (s121066126MHz6126 或或或一個(gè)機(jī)器周期ss26實(shí)際定時(shí)時(shí)間Tc = x Tp式中Tp為機(jī)器周期,Tc為所需定時(shí)時(shí)間,x為所需計(jì)數(shù)次數(shù),主頻和Tc一般是已知值,在求得Tp后就可求得所需計(jì)數(shù)值x,再求x的補(bǔ)碼,即求得定時(shí)的計(jì)數(shù)初值。(x)補(bǔ)=2n - x例如:設(shè)定時(shí)時(shí)間為2ms,機(jī)器周期Tp為2s,可求得定時(shí)計(jì)數(shù)次數(shù)為: 設(shè)選用工作方式1,n=16,則應(yīng)設(shè)置的定時(shí)計(jì)數(shù)初值為:(x)補(bǔ)=2n - x=216-x=65536-1000=64536=FC18H,則將其分解成兩個(gè)8位十六進(jìn)制數(shù),低8位18H裝入TL
15、x,高8位FCH裝入THx中。工作方式0、1、2的最大計(jì)數(shù)次數(shù)分別為8192、65536和256。對(duì)外部事件計(jì)數(shù)模式,只需根據(jù)實(shí)際計(jì)數(shù)次數(shù)求補(bǔ)后變換成兩個(gè)16進(jìn)制碼即可。次100022smsx276.2.3 定時(shí)/計(jì)數(shù)器0或1的應(yīng)用1. 方式0、1的應(yīng)用【例6.1】設(shè)STC89C52單片機(jī)系統(tǒng)時(shí)鐘頻率fCLK為6MHZ,要在P1.0引腳上輸出1個(gè)周期為2毫秒、占空比為50%的方波信號(hào).P1.01ms1msT=2ms 圖6-7 P1.0引腳輸出波形 解:(1)計(jì)算初值:單片機(jī)工作在12T模式 1機(jī)器周期=2s=210-6s,T0工作方式0 定時(shí)1ms計(jì)數(shù)次數(shù)為: 選擇工作方式0,n=13, 定時(shí)
16、計(jì)數(shù)初值:(x)補(bǔ)=213 - 500=7692=1E0CH X= 1111000001100B 則TH0=F0H,TL0=0CH次50021smsx29 (2)初始化程序:l 工作方式控制字(TMOD、T2CON)的設(shè)置;TMOD=00H,定時(shí)方式0l 計(jì)數(shù)初值的計(jì)算并裝入THx、TLx、RCAP2H、RCAP2L;TH0=F0H,TL0=0CHl 中斷允許位ETx、EA的設(shè)置,使主機(jī)開(kāi)放中斷;ET0=1,EA=1, l 啟/停位TRx設(shè)置;TR0=130方法一、中斷方式: ORG 0000H LJMP MAIN ORG 000BH LJMP T0P ORG 0100HMAIN: MOV S
17、P,#60H;設(shè)置堆棧指針 MOV TMOD,#00H;T0為定時(shí)、方式0、門(mén)控GATE0=0 MOV TL0,#0CH;裝載計(jì)數(shù)初值 MOV TH0,#0F0H SETB TR0;啟動(dòng)定時(shí)器0計(jì)數(shù) SETB ET0;允許定時(shí)器0中斷 SETB EA;允許CPU中斷HERE: AJMP HERE;踏步等待31/*中斷服務(wù)子程序*/T0P: MOV TL0,#0CH;重裝載計(jì)數(shù)初值 MOV TH0,#0FEH CPL P1.0;P1.0輸出求反 RETI END Keil uVision432方法二:軟件查詢(xún)解:(1)計(jì)算初值:機(jī)器周期=2s=210-6s,T0工作方式1計(jì)數(shù)初值: (x)補(bǔ)=6
18、5036=FEOCH則TH0=0FEH,TL0=0CH 650365006553621-2)(16smsx補(bǔ)33 ORG0000HSTART:MOVSP,#60H;設(shè)置堆棧區(qū) MOV TMOD,#01H;T0定時(shí)方式1門(mén)控GATE0=0 SETB TR0;啟動(dòng)定時(shí)器0計(jì)數(shù)L1: MOVTH0,#0FEH;裝載計(jì)數(shù)初值 MOVTL0,#0CH LOOP1: JNB TF0,LOOP1;判計(jì)數(shù)溢出?沒(méi)有,踏步等待 CLRTF0;溢出,清溢出標(biāo)志位 CPLP1.0;P1.0輸出求反 SJMPL1 END34中斷方式、C51編程 #includesbit P10=P10;void main()SP=0
19、X60; /*設(shè)置堆棧指針*/TMOD=0 x1;/*定時(shí)器0:定時(shí)、工作方式1、門(mén)控GATE0=0*/TL0=0 x0c;/*裝載計(jì)數(shù)初值*/TH0=0 xfe; TR0=1; /*啟動(dòng)定時(shí)器0計(jì)數(shù)*/ET0=1;/*允許定時(shí)器0中斷*/EA=1;/*允許CPU中斷*/while(1) ;35 void timer0int(void) interrupt 1 TL0=0 x0c; /*重裝載計(jì)數(shù)初值*/ TH0=0 xfe; P10= ! P10;/*P1.0輸出求反*/ 36【例【例6.2】設(shè)設(shè)STC89C52單片機(jī)系統(tǒng)時(shí)鐘頻率單片機(jī)系統(tǒng)時(shí)鐘頻率fCLK為為6MHZ,請(qǐng)編出利用定時(shí)請(qǐng)編出利
20、用定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T0在在P1.1引腳上產(chǎn)生周期為引腳上產(chǎn)生周期為2秒秒,占空比為占空比為50%的方波信號(hào)的程序的方波信號(hào)的程序1. 主程序主程序任務(wù)任務(wù):(1)設(shè)定設(shè)定T0工作方式工作方式1,單片機(jī)工作在12T模式,則機(jī)器周期為2s,最大定時(shí),最大定時(shí)=2162s=131.072ms1s(2)定時(shí)常數(shù)的設(shè)定:定時(shí)常數(shù)的設(shè)定: TC=216-(100ms/2s) =15536=3CB0H每隔每隔100ms中斷一次中斷一次,中斷中斷10次為次為1s即:即:TH0應(yīng)裝應(yīng)裝3CH,TL0應(yīng)裝應(yīng)裝B0H。37(3)中斷管理:中斷管理: 允許允許T0中斷,開(kāi)放總中斷中斷,開(kāi)放總中斷 即:即:IE應(yīng)裝應(yīng)
21、裝10000010B。(4)啟動(dòng)定時(shí)器啟動(dòng)定時(shí)器T0: SETBTR0(5)設(shè)置軟件計(jì)數(shù)器初值:(如使用設(shè)置軟件計(jì)數(shù)器初值:(如使用R7)即即R7應(yīng)裝應(yīng)裝0AH(6)動(dòng)態(tài)停機(jī):動(dòng)態(tài)停機(jī):SJMP $382. 中斷服務(wù)程序任務(wù):中斷服務(wù)程序任務(wù):(1)恢復(fù)恢復(fù)T0常數(shù);常數(shù);(2)軟件計(jì)數(shù)器減軟件計(jì)數(shù)器減1;(3)判斷軟件計(jì)數(shù)器是否為判斷軟件計(jì)數(shù)器是否為0。為。為0時(shí),改變時(shí),改變P1.1狀狀態(tài),并恢復(fù)軟件計(jì)數(shù)器初值;不為態(tài),并恢復(fù)軟件計(jì)數(shù)器初值;不為0時(shí)中斷返時(shí)中斷返回?;?。39;主程序:主程序: ORG 0000HAJMP MAIN ORG 000BHAJMP TOINTORG 0030H
22、MAIN:MOVSP,#60HMOV TMOD,#01H程序總清單:40MOV TH0,#3CHMOV TL0,#0B0HMOV IE,#82HSETB TR0MOV R7,#0AHHERE:SJMPHERE41;中斷服務(wù)子程序中斷服務(wù)子程序TOINT:MOVTL0,#0B0HMOVTH0,#3CHDJNZR7,NEXTCPLP1.1MOVR7,#0AHNEXT:RETIENDKeil uVision442 C程序清單:文件名:程序清單:文件名:6-2.C#include#define uchar unsigned charuchar COUNT=0;sbit P11=P11;void mai
23、n()SP=0 x60; /*設(shè)置堆棧指針設(shè)置堆棧指針 */ TMOD=0 x1; /*設(shè)置設(shè)置T0為定時(shí)為定時(shí),工作方式工作方式1,GATE0=0 */ TL0=0 xb0; /*裝載定時(shí)計(jì)數(shù)初值裝載定時(shí)計(jì)數(shù)初值=100ms*/TH0=0 x3c; IE=0 x82;/*定時(shí)計(jì)數(shù)溢出中斷允許,定時(shí)計(jì)數(shù)溢出中斷允許,CPU中斷允許中斷允許*/ TR0=1;/*啟動(dòng)定時(shí)器啟動(dòng)定時(shí)器0計(jì)數(shù)計(jì)數(shù)*/ COUNT=0 xa;/*軟件計(jì)數(shù)初值軟件計(jì)數(shù)初值=10 */ while(1)/*踏步等待中斷踏步等待中斷*/ 43void timer0int(void) interrupt 1 /*定時(shí)器定時(shí)器0
24、中斷函數(shù)中斷函數(shù)*/TL0=0 x0b; TH0=0 x3c; /*重新裝載定時(shí)計(jì)數(shù)初值重新裝載定時(shí)計(jì)數(shù)初值*/ switch(COUNT)/*判斷定時(shí)判斷定時(shí)1S嗎?嗎?*/ case 0:P11= ! P11; COUNT=0 xa; break; /*1S定時(shí)到,定時(shí)到,P1.1輸出求反輸出求反*/ default:COUNT=COUNT-1;break; /* 沒(méi)到?jīng)]到1S,軟件計(jì)數(shù)值減,軟件計(jì)數(shù)值減1*/ 44方式方式2的應(yīng)用的應(yīng)用 【例【例6-3】 將將T0(P3.4)引腳上發(fā)生負(fù)跳變信號(hào)作為)引腳上發(fā)生負(fù)跳變信號(hào)作為P1.0引腳產(chǎn)生方波的啟動(dòng)信號(hào)。要求引腳產(chǎn)生方波的啟動(dòng)信號(hào)。要求
25、P1.0腳上輸出周腳上輸出周期為期為1ms的方波,如圖的方波,如圖6-5所示(系統(tǒng)時(shí)鐘所示(系統(tǒng)時(shí)鐘6MHz)。)。圖6-5 負(fù)跳變觸發(fā)輸出一個(gè)周期為1ms的方波45 T0方式2計(jì)數(shù),計(jì)數(shù)初值: TH0=0FFH,TL0=0FFH T1方式2定時(shí),定時(shí)初值: 0625025625 . 0-2)(8smsx補(bǔ)46方法一:(中斷方式)方法一:(中斷方式) ORG 0000H LJMP MAIN ;跳向主程序跳向主程序MAIN ORG 000BH ;T0的中斷入口的中斷入口 LJMP T0XINT;T0中斷服務(wù)程序中斷服務(wù)程序 ORG 001BH;T1的中斷入口的中斷入口LJMP T1TIME;T1
26、中斷服務(wù)程序中斷服務(wù)程序 47 ORG 0030H ;主程序入口主程序入口 MAIN:MOV SP,#60H;設(shè)堆棧區(qū)設(shè)堆棧區(qū) MOV TMOD,#26H ;T0方式方式2計(jì)數(shù),計(jì)數(shù),T1方式方式2定時(shí)定時(shí) MOV TL0,#0FFH ;T0置初值,計(jì)置初值,計(jì)1個(gè)脈沖個(gè)脈沖 MOV TH0,#0FFH SETB ET0;允許允許T0中斷中斷48MOV TL1,#06H;T1置初值 MOV TH1,#06HSETB ET1 ;允許T1產(chǎn)生定時(shí)中斷 SETB EA;總中斷允許 SETB TR0;啟動(dòng)T0計(jì)數(shù) HERE:AJMP HERE49 /*T0中斷服務(wù)子程序*/T0XINT: CLRTR0
27、 ;停止T0計(jì)數(shù) SETBTR1 ;啟動(dòng)T1定時(shí) RETI/*T1中斷服務(wù)子程序*/T1TIME: CPL P1.0 ;P1.0取反 RETIENDKeil uVision450方法二:(方法二:(C程序清單)程序清單)#include sbit P10=P10;void main() SP=0X60; /*設(shè)堆棧指針設(shè)堆棧指針 */ TMOD=0 x26;/*T0方式方式2計(jì)數(shù),計(jì)數(shù),T1方式方式2定時(shí)定時(shí) */ TL0=0 xff;/*T0設(shè)置計(jì)數(shù)初值,計(jì)設(shè)置計(jì)數(shù)初值,計(jì)1個(gè)脈沖個(gè)脈沖 */ TH0=0 xff;51TL1=0 x06;/*T1設(shè)置定時(shí)初值設(shè)置定時(shí)初值 */ TH1=0 x
28、06; ET0=1;/*允許允許T0中斷中斷 */ ET1=1;/*允許允許T1中斷中斷 */ EA=1;/*允許總中斷允許總中斷 */ TR0=1; /*啟動(dòng)啟動(dòng)T0計(jì)數(shù)計(jì)數(shù)*/while(1)/*踏步等待中斷踏步等待中斷*/ 52/*計(jì)數(shù)器0中斷服務(wù)子程序 */void timer0 xint(void) interrupt 1TR0=0;/*禁止計(jì)數(shù)器0計(jì)數(shù)*/ TR1=1;/*啟動(dòng)定時(shí)器1 */*定時(shí)器1中斷服務(wù)子程序*/void timer1Tint(void) interrupt 3 P10=!P10;/*P1.0輸出求反*/53 【例6.4】假設(shè)某STC89C52應(yīng)用系統(tǒng)的2個(gè)外
29、部中斷源已被占用,設(shè)置定時(shí)器T1工作在方式0,作波特率發(fā)生器用.現(xiàn)要求增加1個(gè)外部中斷源,并控制P1.0引腳輸出1個(gè)頻率5KHz(周期為200us)的方波. fosc=12MHZ.T0(P3.4)100sTH0為方式為方式3定時(shí)定時(shí)TL0為方式為方式3計(jì)數(shù)計(jì)數(shù)(做外部中斷源做外部中斷源)100sP1.0方式3的應(yīng)用例題6-4圖 定時(shí)器P1.0輸出的方波信號(hào)54T0工作方式3: 初值計(jì)算: TL0計(jì)一個(gè)脈沖 TL0=0FFHTH0定時(shí)100s,定時(shí)初值: TH0=9CHORG0000H LJMPMAIN ORG 000BH ;TL0中斷入口地址 LJMP TL0INT ;跳向TL0中斷服務(wù)子程序
30、, ORG 001BH ;TH0占用T1的中斷資源LJMP TH0INT ;跳向TH0中斷服務(wù)子程序1561002561100-2)(8ssx補(bǔ)55 ORG 0100H ;主程序入口MAIN: MOV TMOD,#07H ;T0方式3,T1方式0定時(shí) MOV TL0,#0FFH ;設(shè)置TL0計(jì)數(shù)初值 MOV TH0,#9CH ;設(shè)置TH0定時(shí)初值 SETB TR0 ;啟動(dòng)T0計(jì)數(shù) MOV IE,#8AH ;設(shè)置各中斷允許,CPU允許 HERE:AJMP HERE ;循環(huán)等待56TL0INT:MOV TL0,#0FFH;重裝TL0計(jì)數(shù)初值 SETB TR1;啟動(dòng)TH0定時(shí) RETITH0INT:
31、 MOV TH0,#9CH;重裝TH0定時(shí)初值 CPLP1.0;P1.0輸出求反 RETI END KeiluVision457查詢(xún)方式#includesbit P10=P10;void timer1int(void);void main() TMOD=0 x07; TL0=0 xff; TH0=0 xa2; TR0=1; P10=1; while(1)if(TF0)TL0=0 xff;TR1=1;TF0=0;if(TF1)timer1int();TF1=0; void timer1int() TH0=0 xa2; /*重裝初值影響精度,修正值為A2H*/ P10=!P10;KeiluVisi
32、on458門(mén)控位 GATE的應(yīng)用 【例6.5】門(mén)控GATE1使定時(shí)/計(jì)數(shù)器T1啟動(dòng)計(jì)數(shù)受控。當(dāng)GATE1為1,TR1為1時(shí),只有 引腳 輸入高電平,T1才被允許計(jì)數(shù),故可測(cè)引腳P3.3上正脈沖寬度(機(jī)器周期數(shù))。 解: 門(mén)控為1,定時(shí)器啟動(dòng)計(jì)數(shù)受外部輸入電平的影響,可測(cè)外部輸入脈沖寬度。 被測(cè)脈沖輸入P3.3 ( ) , T1為定時(shí)方式。 INT1INT159GATE=1,若TR1=1,INT1=1,計(jì)數(shù)開(kāi)始GATE=1,若TR1=0或INT1=0,計(jì)數(shù)停止TR1=1返回圖6-6 60設(shè)計(jì)思路: 1. 建立被測(cè)脈沖:設(shè)置定時(shí)/計(jì)數(shù)器0定時(shí)、工作方式2,門(mén)控GATE0=0,定時(shí)溢出使P3.0引腳
33、求反,從而輸出周期為1ms方波作為被測(cè)脈沖,P3.0輸出信號(hào)連接到P3.3引腳,61 2. 測(cè)量方法:采用查詢(xún)方式來(lái)測(cè)量P3.3引腳輸入正脈沖寬度,設(shè)置定時(shí)/計(jì)數(shù)器1為定時(shí)工作方式1,GATE1=1,則利用(P3.3)引腳和TR1信號(hào)控制定時(shí)器1計(jì)數(shù)(啟、停),當(dāng)GATE1=1時(shí), =1且TR1=1,啟動(dòng)定時(shí)器1計(jì)數(shù),若 =0,或者TR1=0,禁止定時(shí)器計(jì)數(shù),如圖6-6所示。將計(jì)數(shù)器的TH1計(jì)數(shù)值送P2口,TL1計(jì)數(shù)值送P1口顯示。INT1INT162 3. 計(jì)數(shù)初值的計(jì)算:計(jì)算定時(shí)器0工作方式2時(shí),T0計(jì)數(shù)初值為:062502562ms5 . 02(x)8s補(bǔ)定時(shí)/計(jì)數(shù)器1設(shè)置為定時(shí)工作方式
34、1,計(jì)片內(nèi)脈沖,從0開(kāi)始計(jì)數(shù),初值為0000H,即TH1=00H,TL1=00H。63方法一、查詢(xún)方式的匯編程序 ORG0000HRESET: AJMP MAIN ;復(fù)位入口轉(zhuǎn)主程序ORG000BHCPLP3.0RETI ORG 0030H ;主程序入口MAIN: MOV SP,#60H MOVTMOD,#92H;T0方式2定時(shí), ;T1為方式1定時(shí),門(mén)控為1 MOV TL1,#00H MOV TH1,#00HMOVTL0,#06HMOVTH0,#06HSETBTR0SETBET0SETBEA 64 LOOP0: JB P3.3,LOOP0 ;等待為低電平 SETB TR1;如為低電平,設(shè)置T
35、R1=1 LOOP1:JNB P3.3,LOOP1 ;等待升高電平 LOOP2:JB P3.3,LOOP2 ; =1,啟動(dòng)T1計(jì)數(shù), CLR TR1 ; =0,停止T1計(jì)數(shù)CLRTR0 MOV P2,TH1 ;T1計(jì)數(shù)值送顯示器MOV P1,TL1AJMP LOOP0ENDINT1INT1Keil uVision465 執(zhí)行以上程序,使引腳上出現(xiàn)的正脈沖寬度以機(jī)器周期數(shù)的形式顯示在數(shù)碼管上值:TH0=00H,TL0=FBH,則脈沖寬度TW =FBH2s=502s,理論值為500s。66 中斷方式 從圖6-6中知,外部中斷1引腳P3.3第一次下降沿信號(hào),產(chǎn)生第一次中斷觸發(fā),在中斷服務(wù)程序中設(shè)置T
36、R1=1,由于此時(shí) 不能啟動(dòng)定時(shí)器1工作,當(dāng)脈沖信號(hào)出現(xiàn)P3.3上升沿時(shí),自動(dòng)啟動(dòng)定時(shí)器1計(jì)數(shù),而當(dāng)脈沖信號(hào)出現(xiàn)P3.3第2次下降沿,即降為0,自動(dòng)停止定時(shí)器1計(jì)數(shù),則在中斷服務(wù)程序中使TR1=0,從啟動(dòng)T1計(jì)數(shù)到停止T1計(jì)數(shù)所記錄的計(jì)數(shù)值乘以機(jī)器周期值就是正脈沖的寬度。0INT167 方法二:中斷方式 ORG0000H RESET: AJMP MAIN ;復(fù)位入口地址,轉(zhuǎn)主程序ORG 000BHAJMP T0TIMEORG 0013HAJMP INT1INT ORG 0030H;主程序入口地址 MAIN: MOV SP,#60H;設(shè)置堆棧指針 68 MOV TMOD,#92H;T1為方式1定
37、時(shí),GATE1=1,T0方式2定時(shí) MOV TL1,#00H;設(shè)置T1定時(shí)初值 MOV TH1,#00HMOVTL0,#06H;設(shè)置T0定時(shí)初值MOVTH0,#06HSETBTR0;啟動(dòng)T0計(jì)數(shù)SETBET0;允許T0中斷SETB IT1;設(shè)置外部中斷1下降沿觸發(fā)中斷SETBEX1;允許外部中斷1的中斷請(qǐng)求SETBEA;允許CPU總中斷CLR00H ;設(shè)置中斷標(biāo)志,該位為0,中斷一次,為1中斷2次 LOOP0: MOVP2,TH1 ;T1計(jì)數(shù)值送顯示器MOVP1,TL1AJMPLOOP069T0TIME:CPL P3.0;P3.0輸出求反RETIINT1INT:JB 00H,INT12 ;第2
38、次中斷?是,轉(zhuǎn)INT12SETB TR1;第1次,啟動(dòng)定時(shí)器1計(jì)數(shù) SETB 00H;建立中斷標(biāo)志RETIINT12:CLRTR1;第2次中斷,禁止定時(shí)器計(jì)數(shù)RETIEND70方法三:C51程序 #include sbit P30=P30; sbit flag=PSW5; void main() SP=0X60; TMOD=0 x92; TL0=0 x06; TH0=0 x06; TL1=0 x0; TH1=0 x0;71 TR0=1;IT1=1; IE=0 x86;flag=0; while(1)P2=TH1;P1=TL1; 72 void timer0int(void) interrupt
39、 1P30=!P30; void int1int(void) interrupt 2if(flag=0)TR1=1;flag=1; else TR1=0;Keil uVision473 執(zhí)行以上程序,使引腳上出現(xiàn)的正脈沖寬度以機(jī)器周期數(shù)的形式顯示在數(shù)碼管上值: TH0=00H,TL0=F9H,則脈沖寬度為: TW =F9H2s=2492s=498s,理論值為500s。746.3 定時(shí)/計(jì)數(shù)器2 定時(shí)/計(jì)數(shù)器2是一個(gè)16加法(或減法)計(jì)數(shù)器,通過(guò)設(shè)置特殊功能寄存器T2CON中的位 可將其設(shè)置為定時(shí)器或計(jì)數(shù)器,設(shè)置特殊功能寄存器T2MOD中的DCEN位可將其作為加法(向上)計(jì)數(shù)器或減法(向下)計(jì)數(shù)
40、器。T2C/6.3.1 與定時(shí)器/計(jì)數(shù)器2相關(guān)的寄存器6.3.2 定時(shí)/計(jì)數(shù)器2的三種工作方式6.3.3 定時(shí)/計(jì)數(shù)器2 應(yīng)用756.3.1 與定時(shí)器/計(jì)數(shù)器2相關(guān)的寄存器 與T2相關(guān)的寄存器見(jiàn)表6-5所示,T2控制寄存器T2CON與模式寄存器T2MOD相應(yīng)位配置來(lái)確定T2用于定時(shí)還是計(jì)數(shù)模式、T2的工作方式,T2的啟停和中斷觸發(fā)方式,TL2和TH2用于裝載T2的計(jì)數(shù)值,RCAP2L和RCAP2H用于裝載捕獲值或重新裝載值。76表6-5 與定時(shí)/計(jì)數(shù)器2相關(guān)的寄存器返回771、T2MOD寄存器是定時(shí)器/計(jì)數(shù)器2的模式寄存器,字節(jié)地址為C9H,不可位尋址。特殊功能寄存器T2MOD的格式如表6-6
41、所示。D7D6D5D4D3D2D1D0T2MOD T2OE DCEN 表6-6 特殊寄存器T2MOD格式T2OE:定時(shí)/計(jì)數(shù)器2時(shí)鐘輸出使能位,當(dāng)T2OE=1的時(shí)候,允許時(shí)鐘輸出到P1.0。DCEN:定時(shí)/計(jì)數(shù)器2的向下計(jì)數(shù)使能位。DCEN=1時(shí),定時(shí)/計(jì)數(shù)器2向下計(jì)數(shù),否則向上計(jì)數(shù)。返回返回9778 2、T2CON寄存器是T2控制寄存器,用于設(shè)置T2工作模式:定時(shí)或計(jì)數(shù),T2的三種工作方式:捕獲、重新裝載、波特率發(fā)生器,字節(jié)地址為C8H,可位尋址。特殊功能寄存器T2CON的格式如表6-7所示。表6-7 特殊寄存器T2CON格式D7D6D5D4D3D2D1D0T2CONTF2EXF2RCLKT
42、CLKEXEN2TR2 位地址CFHCEH CDHCCHCBHCAHC9HC8HRL2CP/T2C/79 (1) :T2的捕獲/重裝載標(biāo)志,只能通過(guò)軟件的置位或清除。 =1且EXEN2=1時(shí),T2EX引腳(P1.1)負(fù)跳變產(chǎn)生捕獲 =0且EXEN2=0時(shí),定時(shí)器2溢出或T2EX引腳(P1.1)負(fù)跳變都可使定時(shí)器2自動(dòng)重裝載,若RCLK=1或TCLK=1時(shí),控制位不起作用的,定時(shí)器被強(qiáng)制為溢出時(shí)自動(dòng)重裝載模式。 (2) :定時(shí)/計(jì)數(shù)器2的模式選擇位,只能通過(guò)軟件的置位或清除; =0,定時(shí)/計(jì)數(shù)器2為內(nèi)部定時(shí)模式; =1:定時(shí)/計(jì)數(shù)器2為外部計(jì)數(shù)模式,下降沿觸發(fā)。RL2CP/RL2CP/RL2CP
43、/T2C/T2C/T2C/80(3)TR2:定時(shí)/計(jì)數(shù)器2的啟動(dòng)控制標(biāo)志;TR2=1:?jiǎn)?dòng)T2計(jì)數(shù);TR2=0:停止T2計(jì)數(shù)。(4)EXEN2:T2的外部使能標(biāo)志,用來(lái)選擇定時(shí)/計(jì)數(shù)器工作方式,只能通過(guò)軟件的置位或清除;EXEN2=0:禁止外部時(shí)鐘觸發(fā)T2,T2EX引腳(P1.1)負(fù)跳變對(duì)T2不起作用。EXEN2=1且T2未用作串行口波特率發(fā)生器時(shí),允許外部時(shí)鐘觸發(fā)T2,即T2EX(P1.1)引腳負(fù)跳變產(chǎn)生捕獲或重裝,并置位EXF2,申請(qǐng)中斷。81(5)TCLK:串行口發(fā)送時(shí)鐘標(biāo)志,只能通過(guò)軟件的置位或清除。TCLK=1,將T2溢出脈沖作為串行口模式1或模式3的發(fā)送時(shí)鐘, TCLK=0,將T1
44、溢出脈沖作為串行口模式1或模式3的發(fā)送時(shí)鐘。(6)RCLK:串行口接收時(shí)鐘標(biāo)志,只能通過(guò)軟件的置位或清除;RCLK=1,將T2溢出脈沖作為串行口模式1或模式3的接收時(shí)鐘,RCLK=0,將T1溢出脈沖作為串行口模式1或模式3的接收時(shí)鐘82 (7)EXF2:T2的捕獲或重裝的標(biāo)志,必須用軟件清0。當(dāng)EXEN2=1且T2EX引腳(P1.1)負(fù)跳變產(chǎn)生T2的捕獲或重裝時(shí),EXF2置位。當(dāng)T2中斷允許時(shí),EXF2=1將使CPU進(jìn)入中斷服務(wù)子程序,即EXF2只能當(dāng)T2EX引腳(P1.1)負(fù)跳變且EXEN2=1時(shí)才能觸發(fā)中斷,使EXF2=1。在遞增或遞減計(jì)數(shù)器模式(DCEN=1)中,EXF2不會(huì)引起中斷。(
45、8)TF2:T2溢出標(biāo)志位,T2溢出時(shí)置位,并申請(qǐng)中斷,只能用軟件清除。但T2作為波特率發(fā)生器使用的時(shí)候(即RCLK=1或TCLK=1),T2溢出時(shí)不對(duì)TF2置位。836.3.2 定時(shí)/計(jì)數(shù)器2的三種工作方式 T2和T0或T1有所區(qū)別, T2工作方式由特殊功能寄存器T2CON來(lái)設(shè)定如表6-8所示,T2的三種工作方式是:自動(dòng)重裝初值的16位定時(shí)/計(jì)數(shù)器、捕獲事件和波特率發(fā)生器。84 T2的3種工作方式設(shè)定見(jiàn)表6-8所示RCLK+TCLK TR2工作方式工作方式00116位自動(dòng)重裝01116位捕獲1X1波特率發(fā)生器X X0關(guān)閉 表6-8 定時(shí)/計(jì)數(shù)器2的三種工作方式RL2CP/85 1. 自動(dòng)重裝
46、方式: 當(dāng)定時(shí)器2工作于自動(dòng)重裝載方式時(shí),可通過(guò)C/T2#配置為定時(shí)器或計(jì)數(shù)器,并且可編程控制向上或向下計(jì)數(shù),計(jì)數(shù)方向通過(guò)特殊功能寄存器T2MOD(見(jiàn)表6-6)的DCEN 位來(lái)選擇的,DCEN 置為“0”,定時(shí)器2默認(rèn)為向上計(jì)數(shù),當(dāng)DCEN置位“1”時(shí),則定時(shí)器2 通過(guò)T2EX 引腳來(lái)確定向上計(jì)數(shù)還是向下計(jì)數(shù)(見(jiàn)圖6-8)。86 (1)當(dāng)DCEN=0 時(shí)見(jiàn)圖6-7所示,定時(shí)器2自動(dòng)設(shè)置為向上計(jì)數(shù),在這種方式下,T2CON 中的EXEN2 控制位有兩種選擇, 若EXEN2=0,定時(shí)器2 為向上計(jì)數(shù)至0FFFFH 溢出,置位TF2 激活中斷,同時(shí)把16 位計(jì)數(shù)寄存器RCAP2H 和RCAP2L重裝
47、載,RCAP2H 和RCAP2L 的值可由軟件預(yù)置。若EXEN2=1,定時(shí)器2 的16 位重裝載由溢出或外部輸入端T2EX 從1 至0 的負(fù)跳變觸發(fā)。這個(gè)脈沖使EXF2 置位,如果中斷允許,同樣產(chǎn)生中斷。 87(2)當(dāng)DCEN=1時(shí),如圖6-8所示,定時(shí)器T2向上或向下計(jì)數(shù)。在這種模式下,T2EX引腳控制著計(jì)數(shù)的方向。l T2EX上的一個(gè)邏輯1使得T2遞增計(jì)數(shù),計(jì)到0FFFFH溢出,并置位TF2,若中斷允許,還將產(chǎn)生中斷。定時(shí)器的溢出也使得RCAP2H和RCAP2L中的16位值重新加載到TH2和TL2中。l T2EX 上的一個(gè)邏輯0使得T2 遞減計(jì)數(shù)。當(dāng)TH2 和TL2 計(jì)數(shù)到等于RCAP2H
48、 和RCAP2L中的值的時(shí)候,計(jì)數(shù)器下溢,置位TF2,并將0FFFFH值加載到TH2和TL2中。T2上溢或下溢,外部中斷標(biāo)志位EXF2 被鎖死。在這種工作模式下,EXF2不能觸發(fā)中斷。88 2. 捕獲方式:在捕獲方式下,通過(guò)T2CON 控制位EXEN2 來(lái)選擇兩種選項(xiàng)。(1)當(dāng)EXEN2=0,此時(shí),T2是一個(gè)16位定時(shí)器還是計(jì)數(shù)器由T2CON中 來(lái)選擇,溢出時(shí)置位TF2標(biāo)志,若T2中斷允許(ET2=1)將會(huì)引起中斷,如圖6-9所示。T2C/89 (2) 當(dāng)EXEN2=1,T2仍是一個(gè)16位定時(shí)器或計(jì)數(shù)器,但增加一個(gè)功能:u外部輸入T2EX引腳(P1.1)1至0的負(fù)跳變將使得TH2和TL2中的值
49、分別捕捉到RCAP2H和RCAP2L中。uT2EX 的跳變會(huì)引起T2CON 中的EXF2 置位。捕捉模式如圖6-9所示。在該方式中,TH2和TL2無(wú)重新裝載值,當(dāng)T2EX引腳產(chǎn)生捕獲事件時(shí),計(jì)數(shù)器仍以T2引腳(P1.0)脈沖或振蕩頻率1/12(或1/6)計(jì)數(shù)。注意:EXF2像TF2 一樣會(huì)引起中斷(EXF2中斷向量與定時(shí)器2溢出中斷地址相同002BH,在T2中斷服務(wù)程序中可以通過(guò)查詢(xún)TF2和EXF2來(lái)確定引起中斷的事件)。90 3.波特率發(fā)生器通過(guò)設(shè)置T2CON(見(jiàn)表6-7)中的TCLK或RCLK可選擇T1或T2 作為串行口波特率發(fā)生器。當(dāng)TCLK=0時(shí),定時(shí)器T1作為串行口發(fā)送波特率發(fā)生器;
50、當(dāng)TCLK=1時(shí),定時(shí)器T2作為串行口發(fā)送波特率發(fā)生器;RCLK對(duì)串行口接收波特率有同樣作用,通過(guò)對(duì)TCLK、RCLK的設(shè)置,串行口能夠得到不同來(lái)源的發(fā)送和接收的波特率。波特率一個(gè)通過(guò)定時(shí)器T1產(chǎn)生,另一個(gè)通過(guò)定時(shí)器T2產(chǎn)生。91 如圖6-10所示為T(mén)2 工作于波特率發(fā)生器模式邏輯結(jié)構(gòu)圖,該工作模式與自動(dòng)重裝模式相似,當(dāng)T2溢出時(shí),波特率發(fā)生器模式使得T2的寄存器用RCAP2H和RCAP2L中的16位數(shù)值重新裝載,寄存器RCAP2H和RCAP2L值由軟件預(yù)置.92 (1) T2配置為計(jì)數(shù)方式時(shí),外部時(shí)鐘信號(hào)由T2引腳引入,當(dāng)工作于方式1或方式3時(shí),波特率由下面公式確定:方式1和方式3的波特率=
51、定時(shí)器T2溢出率/16 (2) T2可配置為定時(shí)方式,在多數(shù)應(yīng)用情況下,一般配置成定時(shí)模式( =0)。T2作為波特率發(fā)生器與作為定時(shí)器操作有所不同,作為定時(shí)器時(shí),它會(huì)在每個(gè)機(jī)器周期遞增(1/6或1/12晶振頻率);然而,T2作為波特率發(fā)生器,它的波特率計(jì)算公式如下:RCAP2L)(RCAP2H,-(65536n31晶振頻率的波特率和方式方式式中,n=16(6時(shí)鐘模式)或n=32(12時(shí)鐘模式),(RCAP2H,RCAP2L)是RCAP2H和RCAP2L寄存器內(nèi)容,為16位無(wú)符號(hào)整數(shù)。T2C/93 T2作為波特率發(fā)生器如圖6-10所示,只有在T2CON中RCLK=1或TCLK1時(shí),波特率工作方式
52、才有效。 在波特率發(fā)生器工作方式中,TH2的溢出并不置位TF2,也不產(chǎn)生中斷。 即使T2作為串行口波特率發(fā)生器,也不要禁止T2中斷。如果EXEN2(T2外部使能標(biāo)志)被置位,T2EX引腳上1到0的負(fù)跳變,則會(huì)置位EXF2(T2外部中斷標(biāo)志位),但不會(huì)使(RCAP2H,RCAP2L)重裝載到(TH2,TL2)中. 注意:當(dāng)T2作為波特率發(fā)生器,T2EX 可以作為一個(gè)附加的外部中斷源使用。94 4. 可編程時(shí)鐘輸出STC89C51RC/RD+系列單片機(jī),可設(shè)定T2通過(guò)P1.0引腳輸出時(shí)鐘,P1.0引腳除作為通用I/O外,還有兩個(gè)功能可供選用:u用于T2的外部計(jì)數(shù)輸入uT2時(shí)鐘信號(hào)輸出(占空比為50
53、%) 如圖6-11為時(shí)鐘信號(hào)輸出和外部事件計(jì)數(shù)方式的示意圖。當(dāng)工作頻率為16MHz時(shí),時(shí)鐘輸出頻率范圍為61Hz到4MHz。95 當(dāng)設(shè)置T2為時(shí)鐘發(fā)生器時(shí),即 (T2CON.1)為0,T2OE(T2MOD.1)為1,必須由TR2(T2CON.2)啟動(dòng)或停止定時(shí)器。 時(shí)鐘輸出頻率取決于晶振頻率和定時(shí)器2捕捉寄存器(RCAP2H,RCAP2L)的重新裝載值,如公式所示: RCAP2LRCAP2H,65536n晶振頻率時(shí)鐘輸出頻率其中,n=2(6時(shí)鐘/機(jī)器周期),n=4(12時(shí)鐘/機(jī)器周期)T2C/96 6.3.3 定時(shí)/計(jì)數(shù)器2 應(yīng)用 自動(dòng)重裝方式【例6-6】設(shè)STC89C52單片機(jī)系統(tǒng)時(shí)鐘頻率f
54、CLK為12MHZ,使用定時(shí)/計(jì)數(shù)器T2工作方式于自動(dòng)重裝方式,請(qǐng)編寫(xiě)程序使得在P1.6引腳上輸出周期為2毫秒占空比為50%的方波信號(hào)。 知識(shí)點(diǎn):與定時(shí)/計(jì)數(shù)器2相關(guān)的特殊功能寄存器T2MOD、T2CON、IE、IP、IPH各位物理意義,定時(shí)/計(jì)數(shù)器T2入口地址,定時(shí)/計(jì)數(shù)器T2工作方式確定。97 設(shè)計(jì)步驟:(1)求定時(shí)初值N: 設(shè)置定時(shí)/計(jì)數(shù)器T2為16位自動(dòng)重裝載方式,工作模式為定時(shí),我們選擇向上計(jì)數(shù),即DCEN=0,取EXEN2=0,定時(shí)器T2 為向上計(jì)數(shù)至0FFFFH 溢出,置位TF2 激活中斷,TF2需軟件清零。 (x)補(bǔ)=216-1ms/1s=65536-1000=64536=FC
55、18H(2)確定特殊功能寄存器T2CON、T2MOD、IE、IP、IPH值T2CON=04H(自動(dòng)重裝載 =0、定時(shí) =0,啟動(dòng)T2工作TR2=1),T2MOD=00H(向上計(jì)數(shù)DCEN=0,T2時(shí)鐘輸出不使能,即T2OE=0)IE=A0H(允許T2中斷請(qǐng)求,即ET2=1,總中斷允許,即EA=1)IP=20H(設(shè)置PT2=1,其它位為0)IPH=20H(設(shè)置PT2H=1,其余位為0),即PT2H PT2=11,設(shè)置定時(shí)/計(jì)數(shù)器2中斷優(yōu)先級(jí)為第4級(jí) 。2/ RLCP2/TC98(3)確定定時(shí)/計(jì)數(shù)器2中斷服務(wù)子程序入口地址為002BH.(4)編寫(xiě)主程序和中斷服務(wù)子程序2. 程序清單(1)匯編語(yǔ)言
56、程序清單T2CON EQU 0C8H;定義T2CON寄存器字節(jié)地址為C8H T2MOD EQU 0C9H;定義T2MOD寄存器地址為C9H TF2 EQU T2CON.7;定義定時(shí)/計(jì)數(shù)器2計(jì)數(shù)溢出標(biāo)志位 ET2 EQU IE.5;定義定時(shí)/計(jì)數(shù)器2中斷允許標(biāo)志位 RCAP2L EQU 0CAH;定義RCAP2L寄存器字節(jié)地址為CAH RCAP2H EQU 0CBH ;定義RCAP2H寄存器字節(jié)地址為CBH TL2 EQU 0CCH ;定義TL2寄存器字節(jié)地址為CCHTH2 EQU 0CDH;定義TH2寄存器字節(jié)地址為CDHIPH EQU 0B7H ;定義IPH寄存器字節(jié)地址為B7H99 OR
57、G0000HAJMP MAINORG 002BH;定時(shí)/計(jì)數(shù)器2中斷入口地址LJMP PT2INTORG 0100HMAIN: MOV SP,#60H;設(shè)置堆棧區(qū)MOV T2MOD,#00H;置T2向上計(jì)數(shù)且時(shí)鐘輸出不使能MOV T2CON,#04H;置T2自動(dòng)重裝載定時(shí)且啟動(dòng)T2MOV TH2,#0FCH ;裝載定時(shí)器2的定時(shí)初值MOV TL2,#18H100 MOV RCAP2L,#18H;MOV RCAP2H,#0FCHMOV IE,#0A0H;允許T2中斷,EA允許MOV IP,#20H;置T2為第4級(jí)中斷優(yōu)先級(jí)MOV IPH,#20HSETBP1.6 ;預(yù)置P1.6=1HERE:SJ
58、MPHERE;踏步等待中斷101 PT2INT:CLR TF2 ;清計(jì)數(shù)溢出標(biāo)志CPL P1.6 ;P1.6輸出求反RETIENDKeiluVision4102(2)C語(yǔ)言程序清單#includesbitP16=P16;/*定義位變量P16*/sfr T2MOD = 0 xC9;/*定義特殊功能寄存器T2MOD*/SfrIPH = 0 xB7;/*定義特殊功能寄存器IPH*/void main()/*主函數(shù)*/SP=0X60;/*設(shè)置堆棧指針*/ T2MOD=0 x00;/*設(shè)置定時(shí)器2向上計(jì)數(shù)且時(shí)鐘輸出不使能*/ T2CON=0 x04; /*設(shè)置定時(shí)器2自動(dòng)重裝載、定時(shí)且啟動(dòng)T2計(jì)數(shù) TL
59、2=0 x18;TH2=0 xfc;/*裝載定時(shí)器2的定時(shí)初值*/ RCAP2H=0 xfc;RCAP2L=0 x18; /*裝載定時(shí)器2的定時(shí)初值*/ 103IE=0 xa0; /*允許T2中斷請(qǐng)求,總中斷允許*/ IP=0 x20;IPH=0 x20; /*設(shè)置T2為第4級(jí)中斷優(yōu)先級(jí)*/ while(1)/*踏步等待中斷*/ void timer1int(void) interrupt 5 TF2=0;/*清定時(shí)溢出標(biāo)志*/P16=!P16;/*P1.6輸出求反*/104捕獲方式【例6-7】設(shè)STC89C52單片機(jī)系統(tǒng)時(shí)鐘頻率為12MHZ,T2工作方式為捕獲方式,將捕獲的計(jì)數(shù)值低8位送P3
60、口,高8位送P2口,我們用頻率儀和示波器觀察P1.1引腳捕獲脈沖頻率值和波形。電路仿真圖如例題6-7圖所示。105 設(shè)計(jì)步驟:據(jù)題意知T2工作方式為捕獲方式,T2CON中EXEN2 選擇兩種選項(xiàng),此處選擇EXEN2=1,即外部捕獲,選定時(shí)模式 選擇向上計(jì)數(shù),即DCEN=0捕獲脈沖:是利用T0定時(shí)工作方式1,使P1.5輸出周期為2ms的方波,該方波接入到P1.1引腳作為捕獲脈沖。(1)求定時(shí)初值N:為了捕獲P1.1引腳脈沖頻率值,利用P1.1引腳負(fù)跳變觸發(fā)定時(shí)器T2外部中斷,第一次中斷時(shí),啟動(dòng)定時(shí)器T2開(kāi)始計(jì)數(shù),此時(shí)定時(shí)器T2的最初計(jì)數(shù)值為0,即TH2=00H,TL2=00H,而此時(shí)捕獲值RCA
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年阜陽(yáng)市人民醫(yī)院岳家湖院區(qū)研究生招聘考試真題
- 2024年成都市雙流區(qū)棠湖中學(xué)實(shí)驗(yàn)學(xué)校教職工招聘考試真題
- 2025至2030年繞線電機(jī)調(diào)速裝置項(xiàng)目投資價(jià)值分析報(bào)告
- 煤礦反“三違”培訓(xùn)課件
- 扣件式鋼管腳手架工程安全風(fēng)險(xiǎn)告知書(shū)
- 青蛙洗澡美術(shù)課件
- 2025至2030年電動(dòng)式碎木機(jī)項(xiàng)目投資價(jià)值分析報(bào)告
- 處事法則方針中英文版
- 2025至2030年點(diǎn)式玻璃幕項(xiàng)目投資價(jià)值分析報(bào)告
- 2025至2030年混合鉆套鉆項(xiàng)目投資價(jià)值分析報(bào)告
- 2024年浙江長(zhǎng)征職業(yè)技術(shù)學(xué)院?jiǎn)握芯C合素質(zhì)考試題庫(kù)附答案
- Unit 3Keep Fit.教案2024-2025學(xué)年人教版(2024)七年級(jí)英語(yǔ)下冊(cè)
- 保障公路、公路附屬設(shè)施質(zhì)量和安全的技術(shù)評(píng)價(jià)報(bào)告
- 2022年10月自考06779應(yīng)用寫(xiě)作學(xué)試題及答案
- 污水處理及配套管網(wǎng)工程-項(xiàng)目管理機(jī)構(gòu)配備情況
- 《2022年基礎(chǔ)教育省級(jí)教學(xué)成果獎(jiǎng)申報(bào)書(shū)》
- 火災(zāi)報(bào)警系統(tǒng)安裝檢查記錄
- 壓力性損傷管理制度
- 平面磨床控制線路
- 工地運(yùn)輸車(chē)輛的危險(xiǎn)源辨識(shí)與風(fēng)險(xiǎn)防控
- 2014—2015—2《刑法總論》教學(xué)大綱(修正版)
評(píng)論
0/150
提交評(píng)論