在學(xué)習(xí)定時/計數(shù)器之前,我們先了解一下在單片機(jī)中什么是定時/計數(shù)器。
在51單片機(jī)中有兩個定時/計數(shù)器T0和T1,在其增強(qiáng)型的52單片機(jī)中有三個定時/計數(shù)器T0、T1和T2。
定時/計數(shù)器系統(tǒng)是單片機(jī)內(nèi)部的一個獨(dú)立的硬件系統(tǒng),其與CPU和晶振通過內(nèi)部連接相互作用。當(dāng)CPU開啟其功能后,定時計數(shù)器便在晶振的作用下開始獨(dú)立工作。
定時/計數(shù)器本質(zhì)上是一個16位加1計數(shù)器,由高8位(TH0或TH1)和低8位(TL0或TL1)兩個寄存器組成。但是由于累加是在晶振的驅(qū)動下,所以可以當(dāng)做計時器。通過設(shè)置相應(yīng)的寄存器可以選擇啟用其定時功能或者計數(shù)功能。當(dāng)計數(shù)器溢出則溢出標(biāo)志位置1。
在此介紹其兩個特殊功能寄存器:TMOD-定時計數(shù)器工作模式寄存器和TCON-定時/計數(shù)器控制寄存器。
TMOD-定時/計數(shù)器工作模式寄存器 (不可位尋址)
TMOD用來確定定時/計數(shù)器的工作方式及功能選擇。

GATE-門控制位
(若GATE為0,則定時/計數(shù)器啟動和暫停只與相應(yīng)TCON寄存器中的運(yùn)行控制位有關(guān);若GATE為1,則定時計數(shù)器啟動和暫停由相應(yīng)TCON寄存器中的運(yùn)行控制位和外部中斷引腳上的電平狀態(tài)共同控制)
C/T'-定時器模式和計數(shù)器模式選擇位
(為0定時器模式,為1計數(shù)器模式)
M1、M2-工作方式選擇位

工作方式1:THx和TLx兩個8位寄存器組合構(gòu)成一個16位定時/計數(shù)器。THx存放高8位,TLx存放低8位。
工作方式2:THx存放初值,待TLx累加溢出時,THx內(nèi)的初值自動重裝入TLx開始累加,循環(huán)往復(fù)。
介紹了應(yīng)用較多兩種工作方式。
定時器的計算
定時/計數(shù)器本質(zhì)上是一個16位加1計數(shù)器,在晶振的驅(qū)動下,每過一個機(jī)器周期(12個時鐘周期)就自行加1。因此加1則意味著時間過了12/fs,其中f為晶振頻率。假如我們應(yīng)用定時器模式工作方式1。此模式下定時最長時間為((2^16-1)x12/f)s。本開發(fā)板上晶振為11.0592MHz,則最長定時時間約為71ms。所以當(dāng)定時時間大于71ms時,我們可以迭代使其達(dá)到。
假如我們要定時100ms,我們可以定時50ms,再迭代2次。定時50ms要重裝初值,假如用T0。定時50ms約需要累加(0.05s/(12/f))=46083次。故需要將(65535-46083)=19452(0x4bfc)裝入TH0和TL0中。
TCON-定時/計數(shù)器控制寄存器 (可位尋址)

TF1-定時計數(shù)器1溢出標(biāo)志位
(為1溢出申請中斷。中斷方式硬件自動清0,查詢方式需軟件清0)
TR1-定時計數(shù)器1運(yùn)行控制位
(若GATE==1且INT1為高電平,TR1為1運(yùn)行;若GATE==0,TR1為1運(yùn)行;TR1需軟件清0關(guān)閉)
TF0-定時計數(shù)器0溢出標(biāo)志位
(為1溢出申請中斷。中斷方式硬件自動清0,查詢方式需軟件清0)
TR0-定時計數(shù)器0運(yùn)行控制位
(若GATE==1且INT0為高電平,TR0為1運(yùn)行;若GATE==0,TR0為1運(yùn)行;TR0需軟件清0關(guān)閉)
IE1-外部中斷1請求標(biāo)志
(為1表明正在向CPU申請中斷,CPU轉(zhuǎn)向中斷服務(wù)程序后,硬件清0)
IT1-外部中斷1觸發(fā)方式選擇位
(為1為跳變沿觸發(fā)方式(負(fù)跳變),為0為低電平觸發(fā)方式)
IE0-外部中斷0請求標(biāo)志
(為1表明正在向CPU申請中斷,CPU轉(zhuǎn)向中斷服務(wù)程序后,硬件清0)
IT0-外部中斷0觸發(fā)方式選擇位
(為1為跳變沿觸發(fā)方式(負(fù)跳變),為0為低電平觸發(fā)方式)
定時計數(shù)器應(yīng)用
題目:定時/計數(shù)器1做計數(shù)器1,工作模式2,使用定時/計數(shù)器0做定時器0讓LED小燈100毫秒閃爍一次,計數(shù)器1記錄LED閃爍次數(shù),并且用數(shù)碼管實(shí)時顯示計數(shù)數(shù)值。硬件需要將P1^0與P3^5連接起來,使計數(shù)器得到觸發(fā)。
查詢方式
查詢方式就是利用計數(shù)器計數(shù)溢出會使相應(yīng)的溢出標(biāo)志位置1來進(jìn)行是否計數(shù)完成或計時完成。
1/*定時/計數(shù)器1做計數(shù)器1,工作模式2,使用定時器0讓LED小燈100毫秒閃爍一次,
  2計數(shù)器1記錄LED閃爍次數(shù),并且用數(shù)碼管實(shí)時顯示計數(shù)數(shù)值。*/
  3#include < reg52.h >
  4#define uchar unsigned char
  5#define uint  unsigned int
  6
  7sbit we = P2^7;
  8sbit du = P2^6;
  9sbit LED = P1^0;
 10  
 11uchar code leddata[]={ 
 12
 13                0x3F,  //"0"
 14                0x06,  //"1"
 15                0x5B,  //"2"
 16                0x4F,  //"3"
 17                0x66,  //"4"
 18                0x6D,  //"5"
 19                0x7D,  //"6"
 20                0x07,  //"7"
 21                0x7F,  //"8"
 22                0x6F,  //"9"
 23                0x77,  //"A"
 24                0x7C,  //"B"
 25                0x39,  //"C"
 26                0x5E,  //"D"
 27                0x79,  //"E"
 28                0x71,  //"F"
 29                0x76,  //"H"
 30                0x38,  //"L"
 31                0x37,  //"n"
 32                0x3E,  //"u"
 33                0x73,  //"P"
 34                0x5C,  //"o"
 35                0x40,  //"-"
 36                0x00,  //熄滅
 37                0x00  //自定義
  電子發(fā)燒友App
                        電子發(fā)燒友App
                     
                 
                 
           
        
