<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

51單片機定時/計數器詳解(工作原理及模式、應用)

h1654155282.3538 ? 來源:網絡整理 ? 2018-04-26 14:04 ? 次閱讀

51單片機是基礎入門的一個單片機,還是應用最廣泛的一種。本文主要介紹51單片機定時/計數器,首先介紹了51單片機定時/計數器的工作原理,其次介紹了51單片機定時/計數器的工作模式,最后闡述了51單片機定時/計數器的應用,具體的跟隨小編一起來了解一下吧。

51單片機的定時/計數器的概念

單片機中,脈沖計數與時間之間的關系十分密切,每輸入一個脈沖,計數器的值就會自動累加1,只要相鄰兩個計數脈沖之間的時間間隔相等,則計數值就代表了時間的流逝,因此,單片機中的定時器和計數器其實是同一個物理的電子元件,只不過計數器記錄的是單片機外部發生的事情(接受的是外部脈沖),而定時器則是由單片機自身提供的一個非常穩定的計數器,這個穩定的計數器就是單片機上連接的晶振部件;MCS-51單片機的晶振經過12分頻之后提供給單片機穩定脈沖;晶振的頻率是非常準確的,所以單片機的計數脈沖之間的時間間隔也是非常準確的。

51單片機的定時/計數器的工作原理

加1計數器輸入的計數脈沖有兩個來源,一個是由系統的時鐘振蕩器輸出脈沖經12分頻后送來;一個是T0或T1引腳輸入的外部脈沖源。

作為定時器使用時,定時器計數8051單片機片內振蕩器輸出經過12分頻后的脈沖個數,即:每個機器周期使定時器T0/T1的寄存器值自動累加1,直到溢出,溢出后繼續從0開始循環計數;所以,定時器的分辨率是時鐘振蕩頻率的1/12;

作為計數器使用時,通過引腳T0(P3.4)或T1(P3.5)對外部脈沖信號進行計數,當輸入的外部脈沖信號發生從1到0的負跳變時,計數器的值就自動加1由于檢測一個從1到0的下降沿需要2個機器周期,因此要求被采樣的電平至少要維持一個機器周期。當晶振頻率為12MHz時,最高計數頻率不超過1/2MHz,即計數脈沖的周期要大于2微秒。;計數器的最高頻率一般是時鐘振蕩頻率的1/24;

由此可知,不論是定時器還是計數器工作方式,定時器T0和T1均不占用CPU的時間,除非定時器/計數器T0和T1溢出,才可能引起CPU中斷,轉而去執行中斷處理程序。所以說,定時器/計數器是單片機中效率高而工作靈活的部件。

51單片機定時器工作原理圖:

51單片機定時/計數器詳解(工作原理及模式、應用)

由上圖可見與定時器相關的寄存器主要有下面這幾個:TMOD、 TCON、 TL0、TH0、TL1、TH1。下面介紹一下這幾個寄存器

16位加法計數器:

51單片機定時/計數器詳解(工作原理及模式、應用)

是定時計數器的核心,其中 TL0、TH0、是定時計數器0的底八位和高八位;TL1、TH1是定時計數器1的底八位和高八位;并且高八位和底八位可單獨使用。16位加法計數器主要是在設置定時計數器的初值時候使用

TMOD定時器工作模式及方式寄存器

51單片機定時/計數器詳解(工作原理及模式、應用)

GATE :定時操作開關控制位,當GATE=1時,INT0或INT1引腳為高電平,同時TCON中的TR0或TR1控制位為1時,計時/計數器0或1才開始工作。若GATE=0,則只要將TR0或TR1控制位設為1,計時/計數器0或1就開始工作。

C/T :定時器或計數器功能的選擇位。C/T=1為計數器,通過外部引腳T0或T1輸入計數脈沖。C/T=0時為定時器,由內部系統時鐘提供計時工作脈沖。

M1 M0:T0、T1工作模式選擇位

51單片機定時/計數器詳解(工作原理及模式、應用)

TCON定時器控制寄存器

51單片機定時/計數器詳解(工作原理及模式、應用)

TF1:定時器T1溢出標志,可由程序查詢和清零,TF1也是中斷請求源,當CPU響應T1中斷時由硬件清零。

TF0:定時器T0溢出標志,可由程序查詢和清零,TF0也是中斷請求源,當CPU響應T0中斷時由硬件清零。

TR1:T1充許計數控制位,為1時充許T1計數(定時)。

TR0:T0充許計數控制位,為1時充許T0計數(定時)。

IE1:外部中斷1請示源(INT1,P3.3)標志。IE1=1,外部中斷1正在向CPU請求中斷,當CPU響應該中斷時由硬件清“0”。

IT1:外部中斷源1觸發方式控制位。此位為1設置為底電平觸發,為0設置為下降沿觸發。

IE0:外部中斷0請示源(INT0,P3.2)標志。IE0=1,外部中斷1正在向CPU請求中斷,當CPU響應該中斷時由硬件清“0”。

IT0:外部中斷源0觸發方式控制位。此位為1設置為底電平觸發,為0設置為下降沿觸發。

51單片機定時器4種工作模式

工作模式0:

由TL0的低5位和TH0的全部8位共同構成一個13位的定時器/計數器,定時器/計數器啟動后,定時或計數脈沖個數加到TL0上,從預先設置的初值(時間常數)開始累加,不斷遞增1,當 TL0計滿后,向TH0進位,直到13位寄存器計滿溢出,TH0溢出時,置位TCON中的TF0標志,向CPU發出中斷請求。并且定時器/計數器硬件會自動地把13位的寄存器值清0,如果需要進一步定時/計數,需要使用相關指令重置時間常數,并把定時器/計數器的中斷標記TF0置0。

工作模式1:最常用的定時器工作模式

模式1與模式0幾乎完全相同,唯一的區別就是,模式1中的寄存器TH0和TL0共同構成的是一個16位定時器/計數器來參與操作,因此比模式0中的定時/計數范圍更大

51單片機定時/計數器詳解(工作原理及模式、應用)

工作模式2: 工作方式2特別適合于用作較精確的脈沖信號發生器。

這種模式又稱為自動再裝入預置數模式。有時候,我們的定時/計數操作是需要多次重復定時/計數的,如果溢出時不做任何處理,那么,在第二輪定時/計數時就是從0開始定時/計數了,而這并不是我們想要的。所以,要保證每次溢出之后,再重新開始定時/計數的操作是我們想要的,那就要把預置數(時間常數)重新裝入某個地方,而重新裝入預置數的操作是硬件設備自動完成的,不需要人工干預,所以這種工作模式就叫自動再裝入預置數方式。在工作模式2中,把自動重裝入的預置數存放在定時器/計數器的寄存器的高8位中,也就是存放在TH0中,而只留下TL0參與定時/計數操作。

這個工作模式常用于波特率發生器(串口通訊),T1工作在串口模式2;用于這種方式時,定時器就是為了提供一個時間基準;計數溢出之后,不需要做太多的事情,只做一件事就可以,就是重新裝入預置數,再開始重新計數,而且中間不需要任何延時。

51單片機定時/計數器詳解(工作原理及模式、應用)

工作模式3:

方式3只適用于定時/計數器T0,定時器T1處于方式3時相當于TR1=0,停止計數由于定時器/計數器T1沒有工作模式3,如果把定時器/計數器T0設置為工作模式3,那么TL0和TH0將被分割成兩個相互獨立的8位定時器/計數器。

51單片機定時/計數器詳解(工作原理及模式、應用)

51單片機的定時/計數器的應用

在protues下搭建仿真環境:

51單片機定時/計數器詳解(工作原理及模式、應用)

在這里介紹一下定時器初值的設定:

工作方式0:13位定時器/計數器工作模式,最多可計數2的13次方次,即:8192次

工作方式1:16位定時器/計數器工作模式,最多可計數2的16次方次,即:65536次

工作方式2:8位定時器/計數器工作模式,最多可計數2的8次方次,即:256次,

工作方式3:8位定時器/計數器工作模式,最多可計數2的8次方次,即:256次

以12M晶振為例:每秒鐘可以執行1000000次機器周期個機器周期。而定時器每次溢出 最多65536 個機器周期。

那么對12MHz的晶振來講

1個機器周期 1us ( 12/fosc = 1us)

方式0 13位定時器最大時間間隔 = 2^13 = 8.192ms

方式1 16位定時器最大時間間隔 = 2^16 = 65.536ms

方式2 8位定時器最大時間間隔 = 2^8 = 0.256ms =256 us

方式3 8位定時器最大時間間隔 = 2^8 = 0.256ms =256 us

以上是對定時器定時的最大時間間隔做一個說明,下面具體說明怎么計算初值(小于最大時間間隔)假如定時10ms那么的定時器初值計算如下:

-當使用12M晶振,12MHz除12為1MHz,也就是說一秒=1000000次機器周期。10ms=10000次 機器周期。

預置數的計算公式:預置數=最大值-需要計數的次數;(65536-10000)

再將預置數裝入16位定時計數器,如下:

TH0=(65536-10000)/256

TL0=(65536-10000)%256

-當使用11.0592M晶振,11.0592MHz除12為921600Hz,就是一秒921600次機器周期,10ms=9216次機器周期。

預置數的計算公式:預置數=最大值-需要計數的次數;(65536-9216)

再將預置數裝入16位定時計數器,如下:

TH0=(65536-9216)/256

TL0=(65536-9216)%256

介紹完初值的確定,下面介紹定時器最常見的兩種用法

定時:定時計數器作為定時器使用,配置步驟如下:

1.模式設置,配置TMOD寄存器

2.定時器初值設置 假設10ms中斷

3.開定時器中斷

4.開總中斷

5.打開定時器

通過以上5步就打開了一個定時器,定時器沒10毫秒發起一次中斷,即沒10毫秒進入一次中斷服務程序

示例程序如下:

#include《reg51.h》

sbit led=P1^0;

unsigned int flag;

void main()

{

TMOD=0x01;//1.模式設置,00000001,采用的是定時器0,工作與式1(M1=0,M0=1)。

TH0=(65536-10000)/256; //2.定時器設置,每隔10毫秒發起一次中斷。

TL0=(65536-10000)%256;

ET0=1; //3.開定時器0中斷

EA = 1; //4.開總中斷

TR0=1; //5.打開定時器

while(1)

{

if(flag==100)

{

led=~led;

flag=0;

}

}

}

void TIM0() interrupt 1 //中斷服務程序

{

TH0=(65536-10000)/256; //進入中斷要重新設置定時器處置,要注意。

TL0=(65536-10000)%256;

flag++;

}1234567891011121314151617181920212223242526272829

計數:定時計數器作為計數器使用,配置步驟如下:

1.模式設置,配置TMOD寄存器。

2.開計數器中斷

3.開總中斷

4.打開計數器

通過這簡單的四步,我們就打開了一個計數器,可以對P3.4或者P3.5進行下降沿的脈沖計數,這里有一點要注意就是計數器可以不開中斷,這樣溢出時只是不會進去中斷服務程序。

示例程序如下:

#include《reg51.h》

sbit led=P1^0;

sbit s=P3^4;

unsigned int count;

void main()

{

TMOD=0x05; //1.模式設置,00000101,采用的是計數器0,工作模式1(M1=0,M0=1)。

TH0=0; //計數器清零

TL0=0;

ET0=1; //2.開計數器0中斷

EA=1; //3.開總中斷

TR0=1; //4.打開計數器

led=1;

while(1)

{

count=(TH0《《8)|TL0;

if((count*10000)==50000)//按5下按鍵led狀態取反

{

led=0;

TH0=0XFF;

TL0=0XFF; //人為的讓計數器進入中斷

}

}

}

void TIM0() interrupt 1 //中斷服務程序

{

led=1;

TH0=0;

TL0=0;

}

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 51單片機
    +關注

    關注

    270

    文章

    5649

    瀏覽量

    121162
收藏 人收藏

    評論

    相關推薦

    定時/計數器的最基本工作原理

    定時/計數器的最基本工作原理是進行計數。對內部時鐘脈沖進行計數時,作為定時器;對外部脈沖信號
    發表于 11-18 06:02

    51單片機什么時候處于定時器\計數器工作方式

    51單片機定時器\計數器工作原理定時器/計數器的結構:何時處于
    發表于 11-18 06:41

    52單片機定時器計數器的區別

    、定時器2中的寄存1.T2CON(定時器2控制寄存)2.T2MOD(定時器2模式控制寄存
    發表于 11-18 09:11

    AT89C51單片機定時/計數器詳解

    繼上篇的《單片機(AT89C51定時/計數器詳解及其實驗案例》由于各種原因里面沒有實驗案例現在在此補上。
    發表于 11-18 08:52

    MCS-51單片機內部的定時/計數器采用什么工作模式

    定時器計數器MCS-51單片機內部有兩個16位的定時/計數器,T0和T1,他們的
    發表于 12-01 07:01

    單片機計數器_定時工作原理_

    單片機計數器_定時工作原理,定時器、計數器寄存器,以及定時
    發表于 05-06 14:12 ?1次下載

    80C51單片機定時器/計數器詳解(含工作方式)

    80C51單片機要實現定時功能,比較方便的辦法是利用單片機內部的定時/計數器。下面我們將對80C
    發表于 11-09 20:10 ?5.7w次閱讀
    80C<b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>定時</b>器/<b class='flag-5'>計數器</b><b class='flag-5'>詳解</b>(含<b class='flag-5'>工作</b>方式)

    MCS-51單片機定時器和計數器的4種工作方式解析

    MCS-51單片機含有2個定時器/計數器,具有4種工作方式。具有兩種工作
    發表于 10-22 16:24 ?3.1w次閱讀
    MCS-<b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>定時</b>器和<b class='flag-5'>計數器</b>的4種<b class='flag-5'>工作</b>方式解析

    51單片機定時/計數器工作原理

    定時/計數器的最基本工作原理是進行計數。對內部時鐘脈沖進行計數時,作為定時器;對外部脈沖信號
    發表于 11-10 20:36 ?14次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>定時</b>/<b class='flag-5'>計數器</b>的<b class='flag-5'>工作原理</b>

    51單片機定時器\計數器工作原理

    51單片機定時器\計數器工作原理定時器/計數器的結構:何時處于
    發表于 11-11 11:36 ?10次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>之<b class='flag-5'>定時</b>器\<b class='flag-5'>計數器</b>的<b class='flag-5'>工作原理</b>

    51單片機定時器、計數器配置

    一、51單片機定時/計數器工作原理在了解了單片機的時鐘頻率、時鐘周期、機器周期之后,顯然我們
    發表于 11-11 13:51 ?17次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>定時</b>器、<b class='flag-5'>計數器</b>配置

    單片機(AT89C51定時/計數器實驗案例

    繼上篇的《單片機(AT89C51定時/計數器詳解及其實驗案例》由于各種原因里面沒有實驗案例現在在此補上。
    發表于 11-11 15:06 ?16次下載
    <b class='flag-5'>單片機</b>(AT89C<b class='flag-5'>51</b>)<b class='flag-5'>定時</b>/<b class='flag-5'>計數器</b>實驗案例

    51單片機定時/計數器

    定時計數器什么是定時/計數器以及用處51單片機有2個16位定時器/
    發表于 11-12 14:51 ?13次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>定時</b>/<b class='flag-5'>計數器</b>

    單片機(AT89C51定時/計數器詳解及其實驗案例

    單片機(AT89C51定時/計數器及其實驗案例目錄:定時/計數器應用范圍
    發表于 11-17 10:06 ?114次下載
    <b class='flag-5'>單片機</b>(AT89C<b class='flag-5'>51</b>)<b class='flag-5'>定時</b>/<b class='flag-5'>計數器</b><b class='flag-5'>詳解</b>及其實驗案例

    51單片機定時器/計數器

    一、課前須知:1、51單片機有兩組定時器/計數器,因為既可以定時,也可以計數,所以稱之為
    發表于 11-20 20:06 ?46次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>定時</b>器/<b class='flag-5'>計數器</b>
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>