




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