精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

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

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

3天內不再提示

51單片機定時器和計數器

汽車電子技術 ? 來源:嵌入式悅翔園 ? 作者:JamesBin ? 2023-02-17 14:51 ? 次閱讀

8051單片機內部有兩個定時/計數器T0及T1,具有定時和計數兩種功能。T0及T1在計數過程中不需要CPU參與,也不影響CPU的其他工作。當計數溢出后,定時/計數器給出中斷信號,申請CPU停止當前的工作,去處理預先設定的中斷事件。

一、T1內部結構

圖片

定時器工作模式:對內部時鐘信號計數。由于時鐘頻率是定值,所以可根據計數值計算出定時時間。

計數器工作模式:是對加在T1(P3.5)引腳上的外部脈沖進行計數。

二、計數功能

計數器用于統計從TO(P3.4)和Tl(P3.5)兩個引腳輸入脈沖的負跳變數量。負跳變是指前一個機器周期采樣為高電平,后一個機器周期為低電平。每輸入一個脈沖負跳變,計數器加1。

輸入脈沖的高電平與低電平至少應保持一個機器周期時間,以確保正確采樣,因此輸入脈沖的頻率最高為單片機內部脈沖頻率的一半。如果內部脈沖頻率為1 MHZ,則最高計數頻率為0.5 MHz。

三、定時功能

定時功能是單片機通過對內部機器脈沖信號計數實現的,計數值乘以機器周期就是相應的時間。例如,如果單片機采用12 MHz的晶振,則機器內部脈沖頻率為1 MHz,則機器周期為1us,若共計數1000,則用時為1ms時間。

圖片

圖片

四、工作方式

工作方式寄存器TMOD

工作方式寄存器TMOD用于控制定時/計數器的工作方式和工作模式,長度為一個字節,只能按字節整體賦值。

圖片

(1)Ml和M0用于設置TO(T1)的工作方式。

圖片

圖片

(2)C/T用于設置TRO(TR1)是工作于計數器或定時器模式。

C/T—計數器模式和定時器模式選擇位

0:定時器工作模式,對單片機的晶體振蕩器12分頻后的脈沖進行計數。

1:計數器工作模式,計數器對外部輸入引腳T0(P3.4)或T1(P3.5)的外部脈沖(負跳變)計數。

圖片

(3)GATE(門控制位)用于設置TO(T1)的啟動方式。

GATE—門控位。

0:僅由運行控制位TRx(x =0,1)來控制定時器/計數器運行。

1:用外中斷引腳INT0(或INT1 )上的電平與運行控制位TRx共同來控制定時器/計數器運行。

圖片

例:設定時器1為定時工作方式,按方式2工作,定時器0為計數方式,按方式1工作,均由程序單獨控制啟動和停止,請給出TMOD控制字。

解:

定時器1做定時器使用則D6=0;按方式2工作則D5=1,D4=0;
由程序單獨控制啟停則D7=0 。
定時器0做計數器使用則D2=1;按方式1工作則D0=0,D1=1;
由程序單獨控制啟停則D3=0。
因此命令字TMOD的值應為00100101B,即25H。

圖片

定時器控制寄存器TCON (Timer controller)

TCON也是8位寄存器,與TMOD不同的是它可按位單獨賦值,其各位的意義見下表。

圖片

1、TF1、TF0—計數溢出標志位。

當計數器計數溢出時,該位置“1”。

使用中斷方式時,此位作為中斷請求標志位,標志位由硬件自動清“0”。使用查詢方式時,應注意查詢有效后使用軟件及時將該位清“0”。

2、TR1、TR0—計數運行控制位。

TR1位(或TR0位)=1,啟動定時器/計數器工作的必要條件。

TR1位(或TR0位)=0,停止定時器/計數器工作。

4.1、工作方式0

方式0是13位的定時/計數器,它由TL的低5位和TH的8位構成。

圖片

4.2、工作方式1

方式1是16位的定時/計數器,由TH的8位和TL的8位構成。方式0和方式1的工作原理基本相同。

圖片

方式0和方式1的特點:

T1啟動后,在TL1和TH1中存儲的計數初值基礎上進行加“1”計數,直至溢出。溢出時T1寄存器被清零,TF1被置位,并申請中斷。此后,若T1重新啟動,則從零重新開始計數。若希望T1從某一數值開始計數,則應給計數器賦初值。

若所需計數長度為N,則計數初值X=2M-N(1≤N≤2M),其中當工作于方式0時,M=13,當工作于方式1時,M=16。在為計數器賦初值時,應將初值拆成高低兩部分字節,分別送入TL1和TH1。

實例:欲采用8051單片機控制8個LED同時以1s為周期閃爍,設計電路原理圖并編寫程序。

圖片

設置定時/計數器的過程:

1)先初始化工作方式寄存器TMOD

2)為定時/計數器賦初值

3)通過控制寄存器TCON中的TRO或TRl實現啟動或停止。

#include                  //  將8051單片機頭文件包含到文件中
main(void )
{
    unsigned char counter;   //設置無符號字符型變量,存儲定時器中斷次數。
     TMOD=0x01; //設T0為定時模式,由TR0控制啟動和停止,且工作于方式1
  TH0=(65536-46083)/256;         //初始化T0的高8位
  TL0=(65536-46083)%256;        //初始化T0的低8位
  TF0=0;                       //初始化定時器溢出標志
  P0=0xff;                      //關閉LED
    counter=0;                    //從0開始計數  
    TR0=1;                       //啟動定時器0
   while(1)
    {
     while(TF0==1)              //如果定時器溢出
    {
          counter++;              //計時次數加1
          if(counter==20)          //計時時間達到1s
           {
             P0=~P0;                // P0所有位取反,使LED閃爍              
             counter=0;              //重新從0開始計數
           }
            TH0=(65536-46083)/256;  //重新初始化T0的高8位
            TL0=(65536-46083)%256; //重新初始化T0的低8位
            TF0=0;                 //重新初始化定時器溢出標志
       }
    }
}

方式0和方式1的特點:

T1啟動后,在TL1和TH1中存儲的計數初值基礎上進行加“1”計數,直至溢出。溢出時T1寄存器被清零,TF1被置位,并申請中斷。此后,若T1重新啟動,則從零重新開始計數。若希望T1從某一數值開始計數,則應給計數器賦初值。

若所需計數長度為N,則計數初值X=2M-N(1≤N≤2M),其中當工作于方式0時,M=13,當工作于方式1時,M=16。在為計數器賦初值時,應將初值拆成高低兩部分字節,分別送入TL1和TH1。

實例:欲采用8051單片機控制8個LED同時以1s為周期閃爍,設計電路原理圖并編寫程序。

圖片

設置定時/計數器的過程:

1)先初始化工作方式寄存器TMOD

2)為定時/計數器賦初值

3)通過控制寄存器TCON中的TRO或TRl實現啟動或停止。

#include                  //  將8051單片機頭文件包含到文件中
main(void )
{
    unsigned char counter;   //設置無符號字符型變量,存儲定時器中斷次數。
     TMOD=0x01; //設T0為定時模式,由TR0控制啟動和停止,且工作于方式1
  TH0=(65536-46083)/256;         //初始化T0的高8位
  TL0=(65536-46083)%256;        //初始化T0的低8位
  TF0=0;                       //初始化定時器溢出標志
  P0=0xff;                      //關閉LED
    counter=0;                    //從0開始計數  
    TR0=1;                       //啟動定時器0
   while(1)
    {
     while(TF0==1)              //如果定時器溢出
    {
          counter++;              //計時次數加1
          if(counter==20)          //計時時間達到1s
           {
             P0=~P0;                // P0所有位取反,使LED閃爍              
             counter=0;              //重新從0開始計數
           }
            TH0=(65536-46083)/256;  //重新初始化T0的高8位
            TL0=(65536-46083)%256; //重新初始化T0的低8位
            TF0=0;                 //重新初始化定時器溢出標志
       }
    }

4.3、工作方式2

方式2的特點是能自動加載計數初值。16位計數器被分為兩部分,以TL0作為計數器,以TH0作為存儲器。初始化時把計數初值分別加載至TL0和TH0中,當計數溢出時,由存儲器TH0自動給計數器TL0加載計數初值。若所需計數長度為N,則計數初值X=28-N(1≤N≤256)。

圖片

實例:下圖是產品包裝生產線的計數系統,每個產品經過計數裝置時由機械桿碰合按鍵S1一次。當第一次計滿一包(5個)則D1亮,計滿第二包則D2亮…,計滿第八包則D1~D8全亮,八包包裝成一箱,此后重復以上過程。編寫程序實現此功能。

圖片

#include            //  包含51單片機寄存器定義的頭文件
unsigned char counter;      //計數初值
main(void )
{     
   TMOD=0x60;                //使用T1的工作方式2
  TH1=256-5;              // T1的高8位賦初值
  TL1=256-5;              // T1的低8位賦初值  
  counter=0;  
  TR1=1;                    //啟動T1
  while(1)               
    {
     while(TF1==1)           //如果計滿
        {
            TF1=0;             //計數器溢出后,將TF1清0
            counter++;         //計數加1
    switch (counter)  //檢查中斷計數值
      {
                case 1: P0=0xfe; break;  //則第1個燈亮
                case 2: P0=0xfd; break;  //第2個燈亮
                case 3: P0=0xfb; break;  //第3個燈亮
                case 4: P0=0xf7; break;  //第4個燈亮
                case 5: P0=0xef; break; //第5個燈亮
                case 6: P0=0xdf; break; //第6個燈亮
                case 7: P0=0xbf; break; //第7個燈亮
                case 8: P0=0x00; counter=0; break; //8個燈全亮
             }                             
          }          
   }
 }

4.4、工作模式3

TO被拆成兩個獨立的8位計數器TLO和THO,TL0獨占T0的各控制位、引腳和中斷源,既可以用作定時器也可作計數器。TH0只能作為定時器使用,且需要占用T1的控制位TR1和TF1實現啟停和中斷。

圖片

兩個定時/計數器的使用方法與方式0或1相似。工作方式3只適用于T0,不適用于T1。若將T1強行設置為模式3,將使T1立即停止計時或計數,相當于使TR1=0。

當T0作方式3時,T1仍可以設置為除工作方式3外的其它工作方式,但由于它的TR1和TF1已被T0占用,因此無法按正常計時/計數器工作,常用于串行通信時的波特率發生器,以控制傳輸數據的速度。

單片機的P0口接了8個發光二極管,要求使用定時器T0中斷實現流水燈操作,流水頻率為每0.5秒鐘更替一次(假設單片機外接11.0592MHz的晶振)。

圖片

#include
unsigned char cnt=0;    //用于中斷次數計數
unsigned char led =0xfe;  //初始化流水燈
int main(void)
{
  TMOD=0x01;       //16位定時方式
  TH0=(65536-46083)/256;   //初始化T0的高8位
  TL0=(65536-46083)%256;   //初始化T0的低8位
  EA=1;
  ET0=1;      //開中斷
  TR0=1;      //啟動T0工作
   while(1);
}
void T0_int(void)  interrupt 1   
{
  cnt++;
  if( cnt==10 )    //0.5秒鐘的時間到了
  {
    cnt=0;      //清除次數統計
    led =(led <<1)|1;    //更新流水燈數據
    if(led ==0xff)
    {
      led =0xfe;
    }
    P0=led;      //顯示流水燈
  }
   TH0=(65536-46083)/256;       //初始化T0的高8位
  TL0=(65536-46083)%256;       //初始化T0的低8位
}
聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 計數器
    +關注

    關注

    32

    文章

    2254

    瀏覽量

    94371
  • 定時器
    +關注

    關注

    23

    文章

    3241

    瀏覽量

    114513
  • 8051單片機
    +關注

    關注

    5

    文章

    153

    瀏覽量

    25482
收藏 人收藏

    評論

    相關推薦

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

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

    51單片機定時器計數器的原理及應用實例詳細資料說明

    本文檔的主要內容詳細介紹的是51單片機定時器計數器的原理及應用實例詳細資料說明。
    發表于 08-13 17:32 ?1次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>的<b class='flag-5'>定時器</b>和<b class='flag-5'>計數器</b>的原理及應用實例詳細資料說明

    51單片機定時器計數器詳細資料介紹和應用程序免費下載

    51單片機定時器/計數器有2個分別是T1和T0,52系列的單片機有3個定時器/
    發表于 07-16 17:39 ?4次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>的<b class='flag-5'>定時器</b>和<b class='flag-5'>計數器</b>詳細資料介紹和應用程序免費下載

    使用51單片機定時器計數器實現定時的實例說明

    本文檔的主要內容詳細介紹的是使用51單片機定時器計數器實現定時的實例說明。
    發表于 07-12 17:39 ?7次下載
    使用<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單片機定時器計數器的使用資料詳細說明。
    發表于 07-09 17:40 ?1次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>的<b class='flag-5'>定時器</b>和<b class='flag-5'>計數器</b>的使用資料詳細說明

    51單片機定時器計數器的功能實現資料說明

    本文檔的主要內容詳細介紹的是51單片機定時器計數器的功能實現資料說明。
    發表于 06-19 17:44 ?0次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>的<b class='flag-5'>定時器</b>和<b class='flag-5'>計數器</b>的功能實現資料說明

    51單片機定時器計數器詳細資料說明

    定時器/計數器定時器的作用最為突出。一般來說涉及到定時器,都可以算作定時器算法。簡單的如秒表等。復雜的如果系統內核的
    發表于 06-18 17:44 ?0次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>的<b class='flag-5'>定時器</b>和<b class='flag-5'>計數器</b>詳細資料說明

    基于51單片機定時器計數器硬件設計

    基于51單片機定時器計數器硬件設計
    發表于 09-06 15:05 ?4次下載

    51單片機定時器/計數器的工作原理和結構(一)

    51單片機定時器/計數器的工作原理和結構回看下單片機中斷系統內部結構:分析內部中斷觸發:先看圖TCON:和外部中斷相比少了IT位設置觸發
    發表于 11-11 09:21 ?11次下載
    【<b class='flag-5'>51</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>配置

    51單片機定時器計數器

    難的東西學不會是因為簡單的知識沒學好基礎不牢,地動山搖1.01.0.1定時器(1)51單片機定時器是一個內部外設。(2)定時器相當于CPU
    發表于 11-11 20:06 ?11次下載
    <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 ?47次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b><b class='flag-5'>定時器</b>/<b class='flag-5'>計數器</b>

    51單片機——定時器/計數器

    本文主要對定時功能、計數功能、定時器/計時結構和定時器/計數器的四種工作方式進行介紹
    發表于 11-22 15:06 ?12次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>——<b class='flag-5'>定時器</b>/<b class='flag-5'>計數器</b>

    51單片機定時器/計數器接口

    51單片機定時器/計數器接口定時器/計數器0和1T0由特殊功能寄存
    發表于 11-22 15:51 ?0次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>的<b class='flag-5'>定時器</b>/<b class='flag-5'>計數器</b>接口

    51單片機——定時器計數器

    一 TMOD寄存定時/計數器的工作方式寄存)1.GATE(門控位):GATE=0——定時器受外部信號源影響GATE=1——用軟件使TR
    發表于 11-22 16:36 ?8次下載
    <b class='flag-5'>51</b><b class='flag-5'>單片機</b>——<b class='flag-5'>定時器</b>和<b class='flag-5'>計數器</b>