導航:首頁 > 操作系統 > 單片機t2定時器使用說明

單片機t2定時器使用說明

發布時間:2023-03-07 17:19:33

單片機定時器的使用方法

第一步:設置特殊功能寄存器 TMOD,配置好工作模式。

第二步:設置計數寄存器 TH0 和 TL0 的初值。

第三步:設置 TCON,通過 TR0 置 1 來讓定時器開始計數。

第四步:判斷 TCON 寄存器的 TF0 位,監測定時器溢出情況。

寫程序之前,我們要先來學會計算如何用定時器定時時間。我們的晶振是 11.0592M,時鍾周期就是 1/11059200,機器周期是 12/11059200,假如要定時 20ms,就是 0.02 秒,要經過x 個機器周期得到 0.02 秒,我們來算一下 x*12/11059200=0.02,得到 x= 18432。16 位定時器的溢出值是 65536(因 65535 再加 1 才是溢出),於是我們就可以這樣操作,先給 TH0 和 TL0一個初始值,讓它們經過 18432 個機器周期後剛好達到 65536,也就是溢出,溢出後可以通過檢測 TF0 的值得知,就剛好是 0.02 秒。那麼初值 y = 65536 - 18432 = 47104,轉成 16 進制就是 0xB800,也就是 TH0 = 0xB8,TL0 = 0x00。

這樣 0.02 秒的定時我們就做出來了,細心的同學會發現,如果初值直接給一個 0x0000,一直到 65536 溢出,定時器定時值最大也就是 71ms 左右,那麼我們想定時更長時間怎麼辦呢?用你小學學過的邏輯,倍數關系就可以解決此問題。

好了,我們下面就用程序來實現這個功能。

#include

sbit LED = P0^0;

sbit ADDR0 = P1^0;

sbit ADDR1 = P1^1;

sbit ADDR2 = P1^2;

sbit ADDR3 = P1^3;

sbit ENLED = P1^4;

void main(){

unsigned char cnt = 0; //定義一個計數變數,記錄 T0 溢出次數

ENLED = 0; //使能 U3,選擇獨立 LED

ADDR3 = 1;

ADDR2 = 1;

ADDR1 = 1;

ADDR0 = 0;

TMOD = 0x01; //設置 T0 為模式 1

TH0 = 0xB8; //為 T0 賦初值 0xB800

TL0 = 0x00;

TR0 = 1; //啟動 T0

while (1){

if (TF0 == 1){ //判斷 T0 是否溢出

TF0 = 0; //T0 溢出後,清零中斷標志

TH0 = 0xB8; //並重新賦初值

TL0 = 0x00;

cnt++; //計數值自加 1

if (cnt 》= 50){ //判斷 T0 溢出是否達到 50 次

cnt = 0; //達到 50 次後計數值清零

LED = ~LED; //LED 取反:0--》1、1--》0

}

}

}

}

程序中都寫了注釋,結合前幾章學的內容,自己分析一下,不難理解。本程序實現的結果是開發板上最右邊的小燈點亮一秒,熄滅一秒,也就是以 0.5Hz 的頻率進行閃爍

Ⅱ 52單片機定時器2,T2口怎麼用

T2CON(T2的控制寄存器),位元組地址0C8H:
位地址
符號TF2EXF2RCLKTCLKEXEN2TR2C/T2CP/RT2
各位的定義如下:
TF2:定時/計數器2溢出標志,T2溢出時置位,並申請中斷。只能用軟體清除,但T2作為波特率發生器使用的時候,(即RCLK=1或TCLK=1),T2溢出時不對TF2置位。
EXF2:當EXEN2=1時,且T2EX引腳(P1.0)出現負跳變而造成T2的捕獲或重裝的時候,EXF2置位並申請中斷。EXF2也是只能通過軟體來清除的。
RCLK:串列接收時鍾標志,只能通過軟體的置位或清除;用來選擇T1(RCLK=0)還是T2(RCLK=1)來作為串列接收的波特率產生器
TCLK:串列發送時鍾標志,只能通過軟體的置位或清除;用來選擇T1(TCLK=0)還是T2(TCLK=1)來作為串列發送的波特率產生器
EXEN2:T2的外部允許標志,只能通過軟體的置位或清除;EXEN2=0:禁止外部時鍾觸發T2;EXEN2=1:當T2未用作串列波特率發生器時,允許外部時鍾觸發T2,當T2EX引腳輸入一個負跳變的時候,將引起T2的捕獲或重裝,並置位EXF2,申請中斷。
TR2:T2的啟動控制標志;TR2=0:停止T2;TR2=1:啟動T2
C/T2:T2的定時方式或計數方式選擇位。只能通過軟體的置位或清除;C/T2=0:選擇T2為定時器方式;C/T2=1:選擇T2為計數器方式,下降沿觸發。
CP/RT2:捕獲/重裝載標志,只能通過軟體的置位或清除。CP/RT2=0時,選擇重裝載方式,這時若T2溢出(EXEN2=0時)或者T2EX引腳(P1.0)出現負跳變(EXEN2=1時),將會引起T2重裝載;CP/RT2=1時,選擇捕獲方式,這時若T2EX引腳(P1.0)出現負跳變(EXEN2=1時),將會引起T2捕獲操作。但是如果RCLK=1或TCLK=1時,CP/RT2控制位不起作用的,被強制工作於定時器溢出自動重裝載模式。
T2MOD(方式寄存器),位元組地址0C9H:
D7D6D5D4D3D2D1D0
------------T2OEDCEN
T2OE:T2輸出允許位,當T2OE=1的時候,允許時鍾輸出到P1.0。(僅對80C54/80C58有效)
DCEN:向下計數允許位。DCEN=1是允許T2向下計數,否則向上計數。
T2的數據寄存器TH2、TL2和T0、T1的用法一樣,而捕獲寄存器RCAP2H、RCAP2L只是在捕獲方式下,產生捕獲操作時自動保存TH2、TL2的值。
以上是T2的相關寄存器的描述,其實用法上跟T0、T1是差不多的,只是功能增強了,設置的東西多了而已。
定時/計數器2其實用到最多的就是T2CON這個寄存器啦,它設定的定時和計數的方式。有三種工作方式,捕獲,自動重裝,波特率發生器。下面我是在網路裡面找的少許資料:
捕獲方式:
在捕獲方式下,通過T2CON控制位EXEN2來選擇兩種方式。如果EXEN2=0,定時器2是一個16位定時器或計數器,計數溢出時,對T2CON的溢出標志TF2置位,同時激活中斷。如果EXEN2=1,定時器2完成相同的操作,而當T2EX引腳外部輸入信號發生1至0負跳變時,也出現TH2和TL2中的值分別被捕獲到RCAP2H和RCAP2L中。另外,T2EX引腳信號的跳變使得T2CON中的EXF2置位,與TF2相仿,EXF2也會激活中斷。捕獲方式如圖4所示。
自動重裝載(向上或向下計數器)方式:
當定時器2工作於16位自動重裝載方式時,能對其編程為向上或向下計數方式,這個功能可通過特殊功能寄存器T2CON(見表5)的DCEN位(允許向下計數)來選擇的。復位時,DCEN位置「0」,定時器2默認設置為向上計數。當DCEN置位時,定時器2既可向上計數也可向下計數,這取決於T2EX引腳的值,參見圖5,當DCEN=0時,定時器2自動設置為向上計數,在這種方式下,T2CON中的EXEN2控制位有兩種選擇,若EXEN2=0,定時器2為向上計數至0FFFFH溢出,置位TF2激活中斷,同時把16位計數寄存器RCAP2H和RCAP2L重裝載,RCAP2H和RCAP2L的值可由軟體預置。若EXEN2=1,定時器2的16位重裝載由溢出或外部輸入端T2EX從1至0的下降沿觸發。這個脈沖使EXF2置位,如果中斷允許,同樣產生中斷。
定時器2的中斷入口地址是:002BH——0032H。
當DCEN=1時,允許定時器2向上或向下計數,如圖6所示。這種方式下,T2EX引腳控制計數器方向。T2EX引腳為邏輯「1」時,定時器向上計數,當計數0FFFFH向上溢出時,置位TF2,同時把16位計數寄存器RCAP2H和RCAP2L重裝載到TH2和TL2中。T2EX引腳為邏輯「0」時,定時器2向下計數,當TH2和TL2中的數值等於RCAP2H和RCAP2L中的值時,計數溢出,置位TF2,同時將0FFFFH數值重新裝入定時寄存器中。
當定時/計數器2向上溢出或向下溢出時,置位EXF2位。
波特率發生器:
當T2CON(表3)中的TCLK和RCLK置位時,定時/計數器2作為波特率發生器使用。如果定時/計數器2作為發送器或接收器,其發送和接收的波特率可以是不同的,定時器1用於其它功能,如圖7所示。若RCLK和TCLK置位,則定時器2工作於波特率發生器方式。
波特率發生器的方式與自動重裝載方式相仿,在此方式下,TH2翻轉使定時器2的寄存器用RCAP2H和RCAP2L中的16位數值重新裝載,該數值由軟體設置。
在方式1和方式3中,波特率由定時器2的溢出速率根據下式確定:
方式1和3的波特率=定時器的溢出率/16
定時器既能工作於定時方式也能工作於計數方式,在大多數的應用中,是工作在定時方式(C/T2=0)。定時器2作為波特率發生器時,與作為定時器的操作是不同的,通常作為定時器時,在每個機器周期(1/12振盪頻率)寄存器的值加1,而作為波特率發生器使用時,在每個狀態時間(1/2振盪頻率)寄存器的值加1。波特率的計算公式如下:
方式1和3的波特率=振盪頻率/{32*[65536-(RCP2H,RCP2L)]}式中(RCAP2H,RCAP2L)是RCAP2H和RCAP2L中的16位無符號數。
定時器2作為波特率發生器使用的電路如圖7所示。T2CON中的RCLK或TCLK=1時,波特率工作方式才有效。在波特率發生器工作方式中,TH2翻轉不能使TF2置位,故而不產生中斷。但若EXEN2置位,且T2EX端產生由1至0的負跳變,則會使EXF2置位,此時並不能將(RCAP2H,RCAP2L)的內容重新裝入TH2和TL2中。所以,當定時器2作為波特率發生器使用時,T2EX可作為附加的外部中斷源來使用。需要注意的是,當定時器2工作於波特率器時,作為定時器運行(TR2=1)時,並不能訪問TH2和TL2。因為此時每個狀態時間定時器都會加1,對其讀寫將得到一個不確定的數值。
然而,對RCAP2則可讀而不可寫,因為寫入操作將是重新裝載,寫入操作可能令寫和/或重裝載出錯。在訪問定時器2或RCAP2寄存器之前,應將定時器關閉(清除TR2)。

Ⅲ 怎樣使用51單片機的定時器

51單片機定時器的使用

51單片機定時器/計時器的使用
步驟:
1、 打開中斷允許位:
對IE寄存器進行控制,IE寄存器各位的信息如下圖所示:
EA: 為0時關所有中斷;為1時開所有中斷
ET2:為0時關T2中斷;為1時開T2中斷,只有8032、8052、8752才有此中斷 ES: 為0時關串口中斷;為1時開串口中斷 ET1:為0時關T1中斷;為1時開T1中斷 EX1:為0時關1時開 ET0:為0時關T0中斷;為1時開T0中斷 EX0:為0時關1時開
2、 選擇定時器/計時器的工作方式:
定時器TMOD格式

CPU在每個機器周期內對T0/T1檢測一次,但只有在前一次檢測為

1和後一次檢測為0時才會使計數器加1。因此,計數器不是由外部時鍾負邊沿觸發,而是在兩次檢測到負跳變存在時才進行計數的。由於兩次檢測需要24個時鍾脈沖,故T0/T1線上輸入的0或1的持續時間不能少於一個機器周期。通常,T0或T1輸入線上的計數脈沖頻率總小於100kHz。
方式0:定時器/計時器按13位加1計數,這13位由TH中的高8位和TL中的低5位組成,其中TL中的高3位棄之不用(與MCS-48兼容)。

13位計數器按加1計數器計數,計滿為0時能自動向CPU發出溢出中斷請求,但要它再次計數,CPU必須在其中斷服務程序中為它重裝初值。
方式1:16位加1計數器,由TH和TL組成,在方式1的工作情況和方式0的相同,只是計數器值是方式0的8倍。

1
1/3
方式2:計數器被拆成一個8位寄存器TH和一個8位計數器TL,CPU對它們初始化時必須送相同的定時初值。當計數器啟動後,TL按8位加1計數,當它計滿回零時,一方面向CPU發送溢出中斷請求,另一方面從TH中重新獲得初值並啟動計數。

方式3:T0和T1工作方式不同,TH0和TL0按兩個獨立的8位計數器工作,T1隻能按不需要中斷的方式2工作。 在方式3下的TH0和TL0是有區別的:TL0可以設定為定時器/計時器或計數器模式工作,仍由TR0控制,並採用TF0作為溢出中斷標志;TH0隻能按定時器/計時器模式工作,它借用TR1和TF1來控制並存放溢出中斷標志。因此,T1就沒有控制位可以用了,故TL1在計滿回零時不會產生溢出中斷請求的。 顯然,T0和T1設定為方式3實際上就相當於設定了3個8位計數器同時工作,其中TH0和TL0為兩個由軟體重裝的8位計數器,TH1和TL1為自動重裝的8位計數器,但無溢出中斷請求產生。由於TL1工作於無中斷請求狀態,故用它來作為串口可變波特

3、 為計數器賦值
計數器初值計算
TC=M−C
TC:計數器初值,M:計數器模值(2k),C:把計數器計滿的計數值 定時器初值計算
T=(M−TC)T計數


TC=M−T/𝑇計數
M:模值,T計數:單片機時鍾周期TCLK(ΦCLK的倒數)的12倍;TC為定時器的定時初值,T為欲定時的時間。
TC=M−T×𝛷𝐶𝐿𝐾/12
M:模值,ΦCLK:單片機時鍾周期ΦCLK;TC為定時器的定時初值,T為欲定時的時間。 例如:單片機主脈沖頻率ΦCLK為12MHz,最大定時時間為: 方式0時 TMAX = 213×1us = 8.192ms 方式1時 TMAX = 216×1us = 65.536ms 方式2和方式3 TMAX = 28×1us = 0.256ms
4TR0:為0時,停T0計數;為1時,啟T0計數

2
2/3

TF0:為0時,無T0中斷(硬體復位);為1時,有T0溢出中斷 TR1:為0時,停T1計數;為1時,啟T1計數 TF1:為0時,無T1中斷(硬體復位);為1時,有T1溢出中斷 IE1:為0時,硬體復位;為1時 IT1:為0時,INT1電平觸發(軟體復位);為1時,INT1負邊沿觸發 IE0:為0時,硬體復位;為1時 IT0:為0時,INT0電平觸發(軟體復位);INT0負邊沿觸發
5

在C51的C語言中使用interrupt x來指定中斷入口地址,x為中斷號,例T0中斷: void Time0_Int() interrupt 1 //定時器T0的中斷入口程序

Ⅳ 有關單片機定時器的使用和定時器的介紹

導語:單片機,其實就是一種用於集成電路中的晶元,而單片機的定時器是一個電子元件,它是一個穩定的計數器,是由單片機本身提供的。它也是單片機上的一個連接部件,可以用來編程。定時器還有一個功能顯而易見就是可以用來定時,同時,它也可以用來統計一些脈沖信號。下面就來介紹下單片機定時器的使用的相關內容。


定時器的結構

定時器是由兩個寄存器組成的,其中一個寄存器是用來確定計數器的工作形式和功能的,另外一個計時器是用來控制單片機的啟動和停止的,同時它也是設置溢出的一個標志。


計數過程

每來一個脈沖計數器加1,當加到計數器為全1(即FFFFH)時,再輸入一個脈沖就使計數器回零,且計數器的溢出使TCON中TF0或TF1置1,向CPU發出中斷請求(定時器/計數器中斷允許時)。如果定時器/計數器工作於定時模式,則表示定時時間已到;如果工作於計數模式,則表示計數值已滿。

定時應用

用作定時器:此時設置為定時器模式,加1計數器是對內部機器周期計數(1個機器周期等於12個振盪周期,即計數頻率為晶振頻率的1/12)。計數值N乘以機器周期Tcy就是定時時間t。

計數運用

用作計數器:此時設置為計數器模式,外部事件計數脈沖由T0或T1引腳輸入到計數器。每來一個外部脈沖,計數器加1。但單片機對外部脈沖有基本要求:脈沖的高低電平持續時間都必須大於1個機器周期。



定時器的使用

定時器的使用主要分為五個步驟,首先是要打開中斷的可以允許的位置,主要是對IE寄存器的控制,然後選擇定時器的工作的形式,定時器的一個格式是TMOD的形式,主要有四種方式。第一種計數的方式是十三位加一的形式,第二種是十六位加一的計數器,第三種的定數器被分解成兩部分,一個是八位的寄存器,另外一個是八位的計數器。第三步就是要為定時器進行賦值,首先定時器的初值是等於計數器模值減去計數器記滿的招滿值,而定時器的初值是等於模值減去預定時的時間與單片機時鍾周期的十二倍。接下來就是啟動計時器,當TRO為0的時候,停止TO開始計數,而TRO值為1的時候,就啟動TO進行計數。當TFO為0的時候,沒有TO的中斷,這時是沒有硬體復位,而當值為1的時候有TO溢出中斷的情況。當TR1為0的時候,停止TI進行計數,而值為1的時候開啟T1進行計數。


當TF1為0的時候,沒有T1的中斷,為1的時候會出現T1的溢出中斷情況。當IE1的值為0的時候時,出現硬體的復位而當其值為1的時候出現中斷。當IT1的值為0的時候INT1出現電平觸發的情況,也就是軟體復位,而當值為1的時候,INT1的負邊沿會出現觸發的情況。當IE0的值為0時會出現硬體復位,而當IEO的值為1的時候,INT0上會有中斷的情況。當IT0的值為0時,INT0會發生電平觸發,也就是軟體復位,同時INT0的負邊沿觸發。最後一步就是計數器中斷入口程序。


定時器/計數器的工作方式

方式0為13位計數,由TL0的低5位(高3位未用)和TH0的8位組成TL0的低5位溢出時向TH0進位,TH0溢出時,置位TCON中的TF0標志,向CPU發出中斷請求。

方式1的計數位數是16位,由TL0(TL1)作為低8位、TH0(TH1)作為高8位,組成了16位加1計數器。

方式2為自動重裝初值的8位計數方式。

在方式2下,當計數器計滿255(FFH)溢出時,CPU自動把TH的值裝入TL中,不需用戶干預。因此特別適合於用作較精確的脈沖信號發生器。

方式3隻適用於定時器/計數器T0,定時器T1方式3時相當於TR1=0,停止計數。

工作方式3將T0分成為兩個獨立的8位計數器TL0和TH0。


總而言之,定時器的使用可以為單片機的功能增加一些性能上的增強。所以,合理的運用定時器將會幫助我們使用單片機。以上就是有關單片機定時器的使用的相關內容,希望能對大家有所幫助!

閱讀全文

與單片機t2定時器使用說明相關的資料

熱點內容
760貼片機編程視頻 瀏覽:333
歐姆龍plc編程第36講 瀏覽:915
我的世界如何將一個伺服器弄崩 瀏覽:8
php網站訪問量代碼 瀏覽:431
怠速壓縮機咔咔響 瀏覽:176
怎麼才能修改APP中的數據 瀏覽:688
哪裡有搶單的app 瀏覽:462
演算法概率題 瀏覽:465
長方形拉伸的命令 瀏覽:279
python代碼函數編程技術 瀏覽:194
java正則式 瀏覽:429
外包程序員好進嗎 瀏覽:384
雲伺服器服務模型架構 瀏覽:901
刪文件夾什麼指令 瀏覽:509
極速抖音已加密怎麼辦 瀏覽:603
matlab拉格朗日演算法框圖 瀏覽:430
華為公司計算機視覺演算法顧問 瀏覽:254
夏老師講的單片機 瀏覽:298
在編程中如何將圖片放大 瀏覽:163
appstore怎麼看是否付費 瀏覽:603