單片機(jī)C語言編程(定時器計數(shù)器).ppt_第1頁
單片機(jī)C語言編程(定時器計數(shù)器).ppt_第2頁
單片機(jī)C語言編程(定時器計數(shù)器).ppt_第3頁
單片機(jī)C語言編程(定時器計數(shù)器).ppt_第4頁
單片機(jī)C語言編程(定時器計數(shù)器).ppt_第5頁
已閱讀5頁,還剩96頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第6章 MCS-51單片機(jī)定時器/計數(shù)器,本章制作:劉曉霞,第6章 MCS-51單片機(jī)定時器/計數(shù)器,目 錄 6.1 MCS-51定時器/計數(shù)器的結(jié)構(gòu)及原理 6.2 定時器T0、T1 6.3 定時器T2 6.4 定時器應(yīng)用舉例,本章主要討論MCS-51單片機(jī)定時器/計數(shù)器的邏輯結(jié)構(gòu)和工作原理。內(nèi)容主要有MCS-51單片機(jī)定時器T0、T1、T2的邏輯結(jié)構(gòu),工作方式的選擇和應(yīng)用。 本章為單片機(jī)的主要內(nèi)容,也是第七章串行口的學(xué)習(xí)的基礎(chǔ)。,第6章 MCS-51單片機(jī)的定時器/計數(shù)器,6.1 MCS-51單片機(jī)定時器/計數(shù)器的結(jié)構(gòu)及原理,主要內(nèi)容 6.1.1 MCS-51單片機(jī)定時器的結(jié)構(gòu) 6.1.2

2、MCS-51單片機(jī)定時器的工作原理 6.1.3 定時器/計數(shù)器的控制寄存器,6.1.1 MCS-51單片機(jī)定時器的結(jié)構(gòu),MCS-51單片機(jī)定時器/計數(shù)器邏輯結(jié)構(gòu)圖:,6.1.1 MCS-51單片機(jī)定時器的結(jié)構(gòu),MCS-51主要由如下構(gòu)成: 三個16位的可編程定時器/計數(shù)器:定時器/計數(shù)器0、1和2。 每個定時器有兩部分構(gòu)成:THx和TLx 特殊功能寄存器T2MOD和T2CON ,主要對T2進(jìn)行控制。 特殊功能寄存器TMOD和TCON ,主要對T0和T1進(jìn)行控制。,6.1.1 MCS-51單片機(jī)定時器的結(jié)構(gòu),引腳P3.5、P3.4、P1.0,輸入計數(shù)脈沖。 定時器T0、T1和T2是3個中斷源,可

3、以向CPU 發(fā)出中斷請求。 定時器/計數(shù)器T2增加了兩個8位的寄存器: RCAP2H和RCAP2L。 特殊功能寄存器之間通過內(nèi)部總線和控制邏輯電路連接起來。,6.1.2 MCS-51單片機(jī)定時器的工作原理,定時器/計數(shù)器T0、T1、T2 的內(nèi)部結(jié)構(gòu)簡圖如下圖所示。,6.1.2 MCS-51單片機(jī)定時器/計數(shù)器的工作原理,從上圖可以看出: 定時器的實質(zhì)是一個加1計數(shù)器。 C/T =0 ,為定時器方式。 計數(shù)信號由片內(nèi)振蕩電路提供,振蕩脈沖12分頻送給計數(shù)器,每個機(jī)器周期計數(shù)器值增1。 例如:如果晶振頻率為12MHz,則最高計數(shù)頻率為0.5MHz,6.1.2 MCS-51單片機(jī)定時器/計數(shù)器的工作

4、原理,C/T =1 ,為計數(shù)方式。 計數(shù)信號由Tx引腳(P3.4、P3.5和P1.0)輸入,每輸入一有效信號,相應(yīng)的計數(shù)器中的內(nèi)容進(jìn)行加1。 控制信號TRx=1時,定時器啟動。 當(dāng)定時器由全1加到全0時計滿溢出,從0開始繼續(xù)計數(shù),TFx=1 ,向CPU申請中斷。,6.1.3 定時器/計數(shù)器的方式和控制寄存器,1、T0、T1 工作模式寄存器TMOD 功能:確定定時器的工作模式。 其格式如圖6-3所示:,GATE外部門控制位。 GATE1,使用外部控制門。 TRx=1,P3.2(P3.3)=1時,啟動定時器。,6.1.3 定時器/計數(shù)器的方式和控制寄存器,GATE0,不使用外部門控制計數(shù)器 C/T

5、定時或計數(shù)方式選擇位 。 C/T0時,為定時器 C/T1時,為計數(shù)器 采樣過程:CPU在每機(jī)器周期S5P2期間,輸入信號進(jìn)行采樣。若前一機(jī)器周期采樣值為1,下一機(jī)器周期采樣值為0,則計數(shù)器增1,隨后的機(jī)器周期S3P1期間,新的計數(shù)值裝入計數(shù)器。,6.1.3 定時器/計數(shù)器的方式和控制寄存器,M1、M0工作模式選擇位。 如下表所示:,6.1.3 定時器/計數(shù)器的方式和控制寄存器,2、T0、T1的控制寄存器TCON,TF1、TF0:T1、T0的溢出標(biāo)志位 計數(shù)溢出,TFx=1。 中斷方式:自動清零; 查詢方式:軟件清零。,6.1.3 定時器/計數(shù)器的方式和控制寄存器,TR1、TR0:T1、T0啟停

6、控制位。 置1,啟動定時器; 清0,關(guān)閉定時器。 IE1、IE0:外部中斷1、0請求標(biāo)志位 IT1、IT0:外部中斷1、0觸發(fā)方式選擇位 注意: GATE=1 ,TRx與P3.2(P3.3) 的配合。,6.2 定時器T0、T1的工作模式及應(yīng)用,主要內(nèi)容 6.2.1 模式0的邏輯結(jié)構(gòu)及應(yīng)用 6.2.2 模式1的邏輯結(jié)構(gòu)及應(yīng)用 6.2.3 模式2的邏輯結(jié)構(gòu)及應(yīng)用 6.2.4 模式3的邏輯結(jié)構(gòu)及應(yīng)用,6.2.1 模式0的邏輯結(jié)構(gòu)及應(yīng)用,M1M000,選擇模式0。邏輯結(jié)構(gòu)如圖6-5所示。(以T0為例) T0的結(jié)構(gòu):13位定時器/計數(shù)器。 由TH0的8位、TL0的低5位構(gòu)成(高3位未用) 工作過程:TL

7、0溢出后向TH0進(jìn)位,TH0溢出后將TF0置位,并向CPU申請中斷。 定時時間=(213-定時初值)機(jī)器周期 最大定時時間:213機(jī)器周期,6.2.1 模式0的邏輯結(jié)構(gòu)及應(yīng)用,C/T=1,計數(shù)方式。計數(shù)脈沖由P3.4引腳輸入。 C/T=0時,定時方式。,圖6-5 模式0的邏輯結(jié)構(gòu)圖,6.2.2 模式1的邏輯結(jié)構(gòu)及應(yīng)用,M1M001時,選擇模式1。邏輯結(jié)構(gòu)如下頁圖所示。 T0的結(jié)構(gòu):16位定時器/計數(shù)器。 TL0:存放計數(shù)初值的低8位。 TH0存放計數(shù)初值的高8位; 定時時間=(216-定時初值)機(jī)器周期 最大定時時間:216機(jī)器周期,6.2.2 模式1的邏輯結(jié)構(gòu)及應(yīng)用,工作過程:當(dāng)TL0計滿時

8、,向TH0進(jìn)1;當(dāng)TH0計滿時,溢出使TF0=1,向CPU申請中斷。 MCS-51單片機(jī)之所以設(shè)置幾乎完全一 樣 的方式0和方式1,是出于與 MCS-48單片機(jī)兼容的。,6.2.3 模式2的邏輯結(jié)構(gòu)及應(yīng)用,M1 M0 10時,選擇模式2。邏輯結(jié)構(gòu)如圖6-7所示。 T0的結(jié)構(gòu): TL0:8位的定時器/計數(shù)器; TH0:8位預(yù)置寄存器,用于保存初值。 工作過程:當(dāng)TL0計滿溢出時,TF0置1,向CPU發(fā)出中斷請求;同時引起重裝操作(TH0的計數(shù)初值送到TL0),進(jìn)行新一輪計數(shù)。,6.2.3 模式2的邏輯結(jié)構(gòu)及應(yīng)用,圖6-7 模式2的邏輯結(jié)構(gòu)圖,6.2.3 模式2的邏輯結(jié)構(gòu)及應(yīng)用,定時時間=(28

9、- 初值)機(jī)器周期 最大定時時間=28 機(jī)器周期 優(yōu)點(diǎn):模式2能夠進(jìn)行自動重裝載。模式0和1計數(shù)溢出后,計數(shù)器為全0。循環(huán)定時或計數(shù)時,需要重新設(shè)置初值。 說明:在模式2能夠滿足計數(shù)或定時要求時,盡可能使用模式2。,6.2.4 模式3的邏輯結(jié)構(gòu)及應(yīng)用,1、T0模式3的結(jié)構(gòu)特點(diǎn) M1 M0 11,選擇模式3。邏輯結(jié)構(gòu)如圖6-8和6-9所示: 結(jié)構(gòu): TL0、TH0分為兩個獨(dú)立的8位計數(shù)器 TL0: 8位定時器/計數(shù)器 使用T0所有的資源和控制位 TH0:8位定時器 使用T1所有的資源(中斷向量、中斷控制ET1、PT1)和控制位(TR1、TF1),6.2.4 模式3的邏輯結(jié)構(gòu)及應(yīng)用,圖6-8 模式

10、3下T0的邏輯結(jié)構(gòu)圖,6.2.4 模式3的邏輯結(jié)構(gòu)及應(yīng)用,2、T0模式3時T1的工作模式 T1可以模式0模式2工作。 T1的結(jié)構(gòu)如圖6-9所示 由于TF1及中斷矢量被TH0占用,所以T1僅用作波特率發(fā)生器或其它不用中斷的地方。 T1作波特率發(fā)生器,其計數(shù)溢出直接送至串行口。設(shè)置好工作方式,串行口波特率發(fā)生器開始自動運(yùn)行。 TMOD中T1的M1M0=11,T1停止工作。,6.2.4 模式3的邏輯結(jié)構(gòu)及應(yīng)用,圖6-9 模式3下,T1的邏輯結(jié)構(gòu)圖,思考:T0工作在模式3,T1怎么進(jìn)行方式設(shè)置?,串行口,6.2.4 模式3的邏輯結(jié)構(gòu)及應(yīng)用,1、定時器/計數(shù)器工作模式的選擇方法 (1)首先計算計數(shù)值N

11、(2)確定工作模式 原則是盡可能地選擇模式2 若 N 256選擇模式2,否則選擇模式1 (3)如果需要增加一個定時器/計數(shù)器 選擇模式3。,6.2.4 模式3的邏輯結(jié)構(gòu)及應(yīng)用,2、定時器/計數(shù)器初值X的計算方法 因為X + N = 28或216 所以X = 28或216-N (1)對定時器 設(shè)定時時間為tN = t/機(jī)器周期 所以X = 28或216- t/機(jī)器周期 (2)對計數(shù)器 X = 28或216- N,6.2.4 模式3的邏輯結(jié)構(gòu)及應(yīng)用,例6-1 設(shè)單片機(jī)的振蕩頻率為12MHz,用定時器/計數(shù)器0的模式1編程,在P1.0引腳產(chǎn)生一個周期為1000s的方波,定時器T0采用中斷的處理方式。

12、 定時器的分析過程。 工作方式選擇 需要產(chǎn)生周期信號時,選擇定時方式。定時時間到了對輸出端進(jìn)行周期性的輸出即可。 工作模式選擇 根據(jù)定時時間長短選擇工作模式。 首選模式2,可以省略重裝初值操作。,6.2.4 模式3的邏輯結(jié)構(gòu)及應(yīng)用,定時時間計算:周期為1000s的方波要求定時器的定時時間為500s,每次溢出時,將P1.0引腳的輸出取反,就可以在P1.0上產(chǎn)生所需要的方波。 定時初值計算: 振蕩頻率為12MHz,則機(jī)器周期為1s。 設(shè)定時初值為X, (65536-X)1s=500s X=65036=0FE0CH 定時器的初值為:TH0=0FEH,TL0=0CH,6.2.4 模式3的邏輯結(jié)構(gòu)及應(yīng)用

13、,C語言程序: #include /包含特殊功能寄存器庫 sbitP1_0=P10; /進(jìn)行位定義 void main( ) TMOD=0 x01; /T0做定時器,模式1 TL0=0 x0c; TH0=0 xfe;/設(shè)置定時器的初值 ET0=1; /允許T0中斷 EA=1; /允許CPU中斷 TR0=1; /啟動定時器 while(1); /等待中斷 ,6.2.4 模式3的邏輯結(jié)構(gòu)及應(yīng)用,void time0_int(void) interrupt 1 /中斷服務(wù)程序 TL0=0 x0c; TH0=0 xfe;/定時器重賦初值 P1_0=P1_0;/P1.0取反,輸出方波 匯編語言程序: O

14、RG0000H SJMPMAIN ORG000BH LJMPTIME0,6.2.4 模式3的邏輯結(jié)構(gòu)及應(yīng)用,MAIN: MOV TMOD,#01H;T0定時,模式1 MOVTL0,#0CH;置定時初值 MOVTH0,#0FEH SETBET0;定時器T0開中斷 SETBEA;CPU開中斷 SETBTR0;啟動定時器T0 SJMP$;等待定時器溢出 TIME0: ;中斷服務(wù)程序 MOV TL0,#0CH MOVTH0,#0FEH;重裝定時初值 CPLP1.0 ;P1.0取反 RETI ;中斷返回 END,6.2.4 模式 3的邏輯結(jié)構(gòu)及應(yīng)用,例6-2 設(shè)單片機(jī)的振蕩頻率為12MHz,用定時器/計

15、數(shù)器0編程實現(xiàn)從P1.0輸出周期為500s的方波。 分析:方法同例6-1 定時時間: 方波周期為500s,定時250s。 模式選擇: 定時器0可以選擇模式0、1和2。模式2最大的定時時間為256s,滿足250s的定時要求,選擇模式2。,6.2.4 模式 3的邏輯結(jié)構(gòu)及應(yīng)用,(1)初值計算 (256-X)1s=250s X=6;則TH0=TL0=6 (2)程序: 采用中斷處理方式的程序 : C語言程序 : # include /包含特殊功能寄存器庫 sbit P1_0=P10;,6.2.4 模式3的邏輯結(jié)構(gòu)及應(yīng)用,voidmain( ) TMOD=0 x02; /選擇工作模式 TL0=0 x06

16、; TH0=0 x06; /為定時器賦初值 ET0=1; /允許定時0中斷 EA=1; TR0=1;/啟動定時器0 while(1);/等待中斷 void time0_int(void) interrupt 1 P1_0=P1_0; ,6.2.4 模式3的邏輯結(jié)構(gòu)及應(yīng)用,匯編語言程序: ORG0000H LJMPMAIN ORG000BH;中斷處理程序 CPLP1.0 RETI ORG 0030H;主程序 MAIN: MOV TMOD,#02H MOV TL0,#06H MOV TH0,#06H SETB ET0;允許定時器0中斷 SETB EA;允許CPU中斷 SETB TR0;啟動定時器0

17、 SJMP $;等待中斷 END,6.2.4 模式3的邏輯結(jié)構(gòu)及應(yīng)用,采用查詢方式處理的程序: C語言程序: # include sbitP1_0=P10; void main() TMOD=0 x02; TL0=0 x06; TH0=0 x06; TR0=1; while (1) while(!TF0) ;/查詢計數(shù)溢出TF0=0; P1_0=P1_0; ,6.2.4 模式3的邏輯結(jié)構(gòu)及應(yīng)用,匯編語言程序: MAIN: MOV TMOD,#02H;主程序 MOVTL0,#06H MOVTH0,#06H SETBTR0 LOOP: JNBTF0,$;查詢計數(shù)溢出 CLRTF0 CPLP1.0

18、SJMPLOOP END,6.3 定時器/計數(shù)器T2,主要內(nèi)容 6.3.1 定時器T2的特殊寄存器 6.3.2 定時器T2的工作方式及結(jié)構(gòu),6.3.1 定時器/計數(shù)器T2的特殊寄存器,89C52中的T2是一個16位的、具有自動重裝載和捕獲能力的定時器/計數(shù)器。 T2的結(jié)構(gòu):除TL2、TH2和控制寄存器T2CON及T2MOD之外,還增加了捕獲寄存器RCAP2L(低字節(jié))和RCAP2H(高字節(jié))。 T2的計數(shù)脈沖源有兩個:一個是內(nèi)部機(jī)器周期,另一個是由T2(P10)端輸入的外部計數(shù)脈沖。,6.3.1 定時器/計數(shù)器T2的特殊功能寄存器,T2有4種工作方式自動重裝、捕獲和波特率發(fā)生器、可編程時鐘輸出

19、。 增加了兩個引腳: T2(P1.0),T2EX(P1.1)。 1、定時器/計數(shù)器2的控制寄存器T2CON 可位尋址和字節(jié)尋址。 功能:選擇T2的工作方式和工作模式。 允許位尋址和字節(jié)尋址。其格式如下:,6.3.1 定時器/計數(shù)器T2的特殊功能寄存器,TF2 :定時器/計數(shù)器2的溢出中斷標(biāo)志位 T2溢出時置位,申請中斷。軟件清零。 波特率發(fā)生器方式下,RCLK1或TCLK1時,定時器溢出不對TF2進(jìn)行置位。 EXF2(T2CON.6):定時器/計數(shù)器2外部觸發(fā)標(biāo)志位,6.3.1 定時器/計數(shù)器T2的特殊功能寄存器,EXEN21,且T2EX引腳上有負(fù)跳變將觸發(fā)捕獲或重裝操作,EXF2=1,向CP

20、U發(fā)出中斷請求。 軟件復(fù)位。 RCLK:串行口接收時鐘允許標(biāo)志位 RCLK=1時,T2溢出信號分頻后做串行口工作在模式1和3的接收波特率。 RCLK=0時,T1溢出信號分頻信后做串行口接收波特率。,6.3.1 定時器/計數(shù)器T2的特殊功能寄存器,TCLK:串行口發(fā)送時鐘允許標(biāo)志位 TCLK=1時,T2溢出信號分頻后做串行口工做在模式1和3的發(fā)送波特率。 TCLK=0時,T1溢出信號分頻后做串行口的發(fā)送波特率。,6.3.1 定時器/計數(shù)器T2的特殊功能寄存器,EXEN2 ( T2CON3 ) :定時器/計數(shù)器2外部允許標(biāo)志位 EXEN2=1,定時器/計數(shù)器2沒有工作在波特率發(fā)生器方式,如T2EX

21、(P1.1)引腳上產(chǎn)生負(fù)跳變時,將激活“捕獲”或“重裝”操作。 EXEN2=0,T2EX引腳上的電平變化對定時器/計數(shù)器2不起作用。,6.3.1 定時器/計數(shù)器T2的特殊功能寄存器,TR2 :定時器/計數(shù)器2啟動控制位 TR2=1,啟動定時器/計數(shù)器2。 TR2=0,停止定時器/計數(shù)器2。 C/T2:T2的定時器或計數(shù)器方式選擇位。 C/T2=1,T2為計數(shù)器。 對T2(P1.0)引腳輸入脈沖進(jìn)行計數(shù)(下降沿觸發(fā));當(dāng)T2(P1.0)產(chǎn)生負(fù)跳變時,計數(shù)器增1。,6.3.1 定時器/計數(shù)器T2的特殊功能寄存器,C/T2=0, T2做定時器。 每個機(jī)器周期T2加1。 CP/RL2 :捕獲和重裝載方

22、式選擇控制位 捕獲方式: CP/RL2=1,EXEN2=1,T2EX(P1.1)引腳負(fù)跳變將觸發(fā)捕獲操作。 重裝載方式: CP/RL2=0,EXEN2=1,T2EX引腳有負(fù)跳變或T2計滿溢出時,觸發(fā)自動重裝操作。,6.3.1 定時器/計數(shù)器T2的特殊功能寄存器,RCLK=1或TCLK=1時,定時器/計數(shù)器2做波特率發(fā)生器。CP/RL2標(biāo)志位不起作用,當(dāng)T2溢出時強(qiáng)制自動裝載。 2、數(shù)據(jù)寄存器TH2、TL2 8位的數(shù)據(jù)寄存器,組成16位定時器/計數(shù)器。 字節(jié)尋址,地址分別為CDH和CCH。 復(fù)位后,TH2=00H,TL2=00H。 3、捕獲寄存器RCAP2H和RCAP2L,6.3.1 定時器/計

23、數(shù)器T2的特殊功能寄存器,RCAP2H:高8位捕獲寄存器,字節(jié)地址為CBH。 RCAP2L:低8位捕獲寄存器,字節(jié)地址為CAH。 捕獲方式,保存當(dāng)前捕獲的計數(shù)值。 重裝方式,保存重裝初值。 復(fù)位后均為00H。,6.3.1 定時器/計數(shù)器T2的特殊功能寄存器,功能: 對定時器的加1減1計數(shù)方式進(jìn)行設(shè)置。 選擇是否工作在可編程時鐘輸出方式。 復(fù)位后為00B。,4、定時器/計數(shù)器2的模式控制寄存器T2MOD,6.3.1 定時器/計數(shù)器T2的特殊功能寄存器,T2MOD中標(biāo)志 :保留位,未定義,為未來功能擴(kuò)展用。 T2OE:定時器/計數(shù)器2輸出啟動位。 T2OE1,工作在可編程時鐘輸出方式。 輸出方波信

24、號至T2(P1.0)引腳。,DCEN:定時器/計數(shù)器2向上/向下計數(shù)控制位。 當(dāng)DCENl,T2自動向下(遞減)計數(shù) 當(dāng)DCEN0, T2自動向上(遞增)計數(shù),6.3.2 定時器/計數(shù)器T2的工作方式,定時器/計數(shù)器2是一個16位的加1計數(shù)器,具有四種工作方式。如表6-2所示: 方式選擇寄存器: T2CON和T2MOD。 注意:無論T2做定時器還是計數(shù)器,都具有捕獲和自動重裝的功能。,6.3.2 定時器/計數(shù)器T2的工作方式,6.3.2 定時器/計數(shù)器T2的工作方式,一、16位自動重裝方式 CPRL20,DCEN=0時,選擇自動重裝方式。結(jié)構(gòu)如下圖所示: T2計滿溢出時, TF2置1,申請中斷

25、。打開重裝載三態(tài)緩沖器,將RCAP2H和RCAP2L的內(nèi)容自動裝載到TH2和TL2中。 EXEN21且T2EX(P11)端的信號有負(fù)跳變時, EXF2置1,申請中斷。引起重裝載操作。,6.3.2 定時器/計數(shù)器T2的工作方式,6.3.2 定時器/計數(shù)器T2的工作方式,CP/RL20,DCEN=1時,定時器/計數(shù)器2既可以增量(加1)和減量(減1)計數(shù)。 T2EX電平控制計數(shù)方向: 當(dāng)T2EX(P1.1)引腳輸入為高電平1時,T2執(zhí)行增量(加1)計數(shù)。 增量計數(shù)過程:計滿溢出時,一方面置位TF2,向主機(jī)請求中斷處理;另一方面將存放在寄存器RCAP2L和RCAP2H中的16位計數(shù)初值自動重裝TL2

26、和TH2中,進(jìn)行新一輪加1計數(shù)。,6.3.2 定時器/計數(shù)器T2的工作方式,6.3.2 定時器/計數(shù)器T2的工作方式,T2EX(P1.1)引腳為低電平0時,定時器/計數(shù)器2執(zhí)行減量(減1)計數(shù)。 減量計數(shù)過程:是用FFH分別初始化(預(yù)置)TL2和TH2,用0FFFFH減去計數(shù)次數(shù)所求得的下限初始化RCAP2L和RCAP2H。計數(shù)器不斷減1,直至計數(shù)器中的值等于寄存器RCAP2L和RCAP2H中預(yù)置的值時,計滿溢出。 0FFH重裝TL2和TH2,進(jìn)行新一輪的計數(shù)操作,6.3.2 定時器/計數(shù)器T2的工作方式,增量(加1)計數(shù)是以65536為模。對計數(shù)次數(shù)求補(bǔ)得到計數(shù)初值,此初值初始化TL2、TH

27、2和RCAP2L、RCAP2H陷阱寄存器。 在電平控制重裝方式下,無論減量增量計數(shù),溢出時TF2置1,EXF2狀態(tài)翻轉(zhuǎn),相當(dāng)于17位計數(shù)器的最高位。,6.3.2 定時器/計數(shù)器T2的工作方式,二、捕獲方式 當(dāng)CPRL2l,選擇捕獲方式。存在以下兩種情況。T2結(jié)構(gòu)如下圖所示,有兩種情況: EXEN=0 定時器2的計數(shù)溢出,置位TF2,申請中斷。 EXEN21 T2EX(P11)端的信號有負(fù)跳變時,觸發(fā)捕獲操作。將TH2和TL2的內(nèi)容自動捕獲到寄存器RCAP2H和RCAP2L中同時EXF2置1,申請中斷。,6.3.2 定時器/計數(shù)器T2的工作方式,圖6-14 捕獲方式的邏輯結(jié)構(gòu)圖,6.3.2 定時

28、器/計數(shù)器T2的工作方式,三、波特率發(fā)生器方式 RCLK=1或TCLK 1時,選擇波特率發(fā)生器方式。結(jié)構(gòu)如下圖所示,從圖可以看出: RCLK=1,T2為接收波特率發(fā)生器。 TCLK=1,T2為發(fā)送波特率發(fā)生器。 C/T20,選用內(nèi)部脈沖。 C/T21,選用外部脈沖。 T2(P1.0)輸入負(fù)跳變時,計數(shù)值增l。,6.3.2 定時器/計數(shù)器T2的工作方式,6.3.2 定時器/計數(shù)器T2的工作方式,計數(shù)溢出時,觸發(fā)自動裝載操作。 RCAP2H和RCAP2L的內(nèi)容自動裝載到TH2和TL2中。 T2用做波特率發(fā)生器時,TH2的溢出不會將TF2置位,不產(chǎn)生中斷請求。 T2EX還可以作為一個附加的外部中斷源

29、。 T2用做波特率發(fā)生器時,若EXEN2=1,當(dāng)T2EX有負(fù)跳變時,EXF2置1,由于不發(fā)生重裝載或捕獲操作,此時T2EX引腳可外接一中斷源。,6.3.2 定時器/計數(shù)器T2的工作方式,定時器/計數(shù)器T2作為波特率發(fā)生器使用時的編程方法如下: RCAP2H=0 x30;/設(shè)置波特率 RCAP2L=0 x38; TCLK=1;/選擇定時器2的溢出脈沖作為波特率發(fā)生器 注意:在波特率發(fā)生器工作方式下,在 T2計數(shù)過程中不能再讀/寫 TH2和TL2的內(nèi)容。,6.3.2 定時器/計數(shù)器T2的工作方式,四、可編程時鐘輸出方式 T2OE=1時,C/T2=0時,T2工作于時鐘輸出方式。結(jié)構(gòu)如下圖所示: 工作

30、過程:當(dāng)T2計滿溢出時,T2(P1.0)引腳狀態(tài)翻轉(zhuǎn),從而輸出頻率可調(diào)、精度很高的方波信號;同時使RCAP2H和RCAP2L寄存器內(nèi)容裝入TH2和TL2寄存器中,重新計數(shù)。 在時鐘輸出方式下,T2溢出時不置位TF2。,6.3.2 定時器/計數(shù)器T2的工作方式,當(dāng)EXEN2=1,T2EX(P1.1)引腳有負(fù)跳變時,EXF2將置1。(同波特率發(fā)生器方式) 從P1.0引腳輸出的時鐘信號頻率為: Fosc/(4(65536-(RCAP2H,RCAP2L),6.3.2 定時器/計數(shù)器T2的工作方式,圖6-16 T2時鐘輸出方式下的邏輯結(jié)構(gòu)圖,6.4 定時器應(yīng)用舉例,主要內(nèi)容 6.4.1 定時器的初始化

31、6.4.2 定時器應(yīng)用舉例,6.4.1 定時器的初始化,在使用定時器/計數(shù)器前,應(yīng)首先對其進(jìn)行初始化編程。 一、定時器的初始化步驟 1、選擇工作模式和工作方式。 設(shè)置TMOD、T2MOD。 2、設(shè)置定時器的計數(shù)初值。 設(shè)置THx和TLx,RCAP2H和RCAP2L。 3、中斷設(shè)置:設(shè)置IE。 4、啟動定時器。 設(shè)置TCON或T2CON。 可以使用位操作指令。例如:SETB TRx。,6.4.1 定時器的初始化,二、定時器/計數(shù)器初值計算 根據(jù)定時器/計數(shù)器的模式和方式,計算計數(shù)初值(注意T2) 計數(shù)器的長度為n,則計數(shù)的最大值為2n 。 1、工作于定時方式 計數(shù)脈沖由內(nèi)部的時鐘提供,每個機(jī)器周

32、期進(jìn)行加1。 設(shè)晶振頻率為fosc,則計數(shù)脈沖的頻率為fosc/12,計數(shù)脈沖周期T=1/(fosc/12)。,6.4.1 定時器的初始化,如果進(jìn)行定時時間為t,計數(shù)初值為X,則: t=( 2n -X)12/fosc 2、工作于計數(shù)方式 當(dāng)工作在計數(shù)方式時,對外部脈沖計數(shù)。利用計數(shù)器計數(shù)結(jié)束產(chǎn)生溢出的特性,來計算初值X 。則有: X= 2n計數(shù)次數(shù),6.4.2 定時器的應(yīng)用舉例,例6-3 利用定時器T1的模式2對外部信號進(jìn)行計數(shù),要求每計滿100次,將P1.0端取反。 分析:T1工作在計數(shù)方式。脈沖數(shù)100。 模式2,模式字TMOD=0110b。 1、初值計數(shù): 在模式2下:X= 28-100

33、=156D=9CH 2、C語言程序: #include sbit p1_0=p10;/進(jìn)行位定義,6.4.2 定時器的應(yīng)用舉例,void main ( ) TMOD=0 x60;/T1工作在模式2,計數(shù) TL1=0 x9c;/裝入計數(shù)(重裝)初值 TH1=0 x9c; ET1=1;/允許定時器1中斷 EA=1;/開中斷 TR1=1 ;/啟動定時器1 while(1); ,6.4.2 定時器的應(yīng)用舉例,void time0_int(void) interrupt 3 /中斷服務(wù)程序 P1_0=P1_0;/取反,產(chǎn)生方波 3、匯編語言程序: MAIN: MOV TMOD,#60H;T1工作在模式2

34、,計數(shù) MOVTL1,#9CH;裝入計數(shù)初值 MOVTH1,#9CH;裝入計數(shù)(重裝)初值,6.4.2 定時器的應(yīng)用舉例,MOVIE,#88H;允許定時器中斷 SETBTR1;啟動定時器 HERE:SJMP HERE;等待中斷 中斷服務(wù)程序: ORG 001BH;中斷服務(wù)程序入口地址 CPLP1.0;對P1.0引腳信號取反RETI;中斷返回,6.4.2 定時器的應(yīng)用舉例,例6-4 某一應(yīng)用系統(tǒng)需要對INT0引腳的正脈沖測試其脈沖寬度。 分析:可以設(shè)置定時器/計數(shù)器0為定時方式,工作在模式1,且置位GATE位為1,將外部需測試的脈沖從INT0引腳輸入,設(shè)機(jī)器周期為1s。,6.4.2 定時器的應(yīng)用

35、舉例,C語言程序: 計算脈寬和處理程序略。 #include sbit P3_2=P32; unsigned int_test( ) TMOD=0 x09; TL0=0 x00; TH0=0 x00; while(P3_2); TR0=1;,6.4.2 定時器的應(yīng)用舉例,while(!P3_2); while(P3_2); TR0= 0; return (TH0*256+TL0); 匯編語言程序: INT00:MOV TMOD,#09H MOV TL0,#00H;設(shè)置計數(shù)初值 MOV TH0,#00H LOP1:JBP3.2,LOP1;等待P3.2變低電平,6.4.2 定時器的應(yīng)用舉例,SET

36、B TR0;啟動T0計數(shù) LOP2:JNBP3.2,LOP2;等待P3.2變成高電平 LOP3:JBP3.2,LOP3;等待P3.2變成低電平 CLRTR0;停止T0計數(shù) MOV A,TL0;計數(shù)器TL0中的內(nèi)容送AMOV B,TH0;計數(shù)器TH0中的內(nèi)容送B 本題也可以使用定時器/計數(shù)器2工作在捕獲方式下進(jìn)行脈寬測試。 注意:T2脈寬測試必須在定時器未溢出的情況下才有效。,6.4.2 定時器的應(yīng)用舉例,例6-5 某應(yīng)用系統(tǒng)要求通過P1.0和P1.1口分別輸出脈沖周期為200s和400s的方波,fosc=6MHz。 分析:需要兩個定時器??梢赃x擇使用定時器/計數(shù)器0,設(shè)置為定時模式,工作模式3

37、,分成兩個8位的定時器。 1、計算定時初值。 t=(256 -X)12/fosc 初值分別為0CEH和9CH。,6.4.2 定時器的應(yīng)用舉例,2、C語言程序: # include sbitP1_0=P10;/進(jìn)行位定義 sbitP1_1=P11; void main( ) TMOD=0 x03;/設(shè)置T0定時,工作在模式3 TL0=0 xce;/設(shè)置TL0計數(shù)初值,產(chǎn)生 200s方波 TH0=0 x9c;/設(shè)置TH0計數(shù)初值,產(chǎn)生 400s方波 ET0=1;/設(shè)置定時器0中斷允許位,6.4.2 定時器的應(yīng)用舉例,ET1=1;/設(shè)置定時器/計數(shù)/器1中斷允許位 EA=1;/設(shè)置總中斷允許位 TR

38、0=1;/啟動定時器T0 TR1=1;/啟動定時器T1 while(1); /等待溢出 void time0L_int(void) interrupt 1 /T0中斷服務(wù)程序 TL0=0 xce;/定時器重賦初值 P1_0=P1_0;/產(chǎn)生方波 ,6.4.2 定時器的應(yīng)用舉例,void time0H_int(void) interrupt 3 /T1中斷服務(wù)程序 TH0=0 x9c;/定時器重賦初值 P1_1=P1_1;/產(chǎn)生方波 3、匯編語言程序: 主程序: ORG0000H LJMPMAIN,6.4.2 定時器的應(yīng)用舉例,ORG000BH LJMPT0S ORG001BH LJMPT1S

39、MAIN: MOVTMOD,#03H; 設(shè)置T0定時,模式3 MOVTL0,#0CEH;設(shè)置TL0計數(shù)初值,產(chǎn)生200s方波 MOVTH0,#9CH;設(shè)置TH0計數(shù)初值,產(chǎn)生400s方波,6.4.2 定時器的應(yīng)用舉例,SETBEA;設(shè)置總中斷允許位 SETBET0;允許定時器0中斷SETBET1;允許定時器1中斷 SETBTR0;啟動定時器T0 SETBTR1;啟動定時器T1 T0中斷服務(wù)程序: T0S: MOVTL0,#0CEH;重新設(shè)置定時初值 CPLP1.0;P1.0口的輸出取反 RETI,6.4.2 定時器的應(yīng)用舉例,T1中斷服務(wù)程序: T1S: MOVTH0,#9CH ;重新設(shè)置定時

40、初值 CPLP1.1 ;對P1.0口輸出信號取反 RETI ;中斷返回 例6-6 利用定時器精確定時1s控制LED以秒為單位閃爍。已知fosc=12MHz。 分析:定時器/計數(shù)器在定時方式下,各個模式最大定時時間分別為:,6.4.2 定時器應(yīng)用舉例,定時器0=(8192-0)12/fosc=8.192ms 定時器1=(65536-0)12/fosc=65.536ms 定時器2=(256-0)12/fosc=0.256ms 選擇模式1。定時時間為10ms,當(dāng)10ms的定時時間到,TF1=1,連續(xù)定時100次,調(diào)用亮燈函數(shù);再連續(xù)定時100次,調(diào)用滅燈函數(shù)。循環(huán)工作,即達(dá)到1s閃爍1次的效果。 1、初值計算: (256-X)12/fosc=10ms 初值X=55536=0D8F0H,6.4.2 定時器應(yīng)用舉例,2、程序設(shè)計: C語言程序: #include sbit LED=P10; unsigned char i; void main() LED=0;/定義燈的初始狀態(tài)為滅 TMOD=0 x10;/設(shè)置定時器1工作在模式1 TL

溫馨提示

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

評論

0/150

提交評論