日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

C51单片机T0/T1计数器举例

發布時間:2023/12/20 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 C51单片机T0/T1计数器举例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1 定時/計數器的主要特點

  • MCS -51系列中51子系列有兩個16位的可編程定時/計數器:定時/計數器 T0 和定時/計數器T1;52子系列有三個,比51子系列多一個定時/計數器T2。
  • 每個定時/計數器既可以對系統時鐘計數實現定時,也可以對外部信號計數實現計數功能,這些功能都是通過編程設定來實現的。
  • 每個定時/計數器都有多種工作方式,其中 T0有四種工作方式:T1有三種工作方式,T2有三種工作方式。通過編程可設定工作于某種方式。
  • 每一個定時/計數器定時計數時間到時產生溢出,使相應的溢出位置位。溢出可通過查詢或中斷方式來處理。
  • 2 定時/計數器T0、T1的結構及工作原理

    定時/計數器 T0 、T1的結構如圖1所示,它由加法計數器、方式寄存器 TMOD 、控制寄存器 TCON 等組成。
    定時/計數器的核心是16位加法計數器,在圖中用特殊功能寄存器TH0、TL0及TH1、TL1表示。TH0、 TL0 是定時/計數器 T0 加法計數器的高8位和低8位。TH1、 TLI 是定時/計數器T1加法計數器的高8位和低8位。方式寄存器 TMOD 用于設定定時/計數器 T0 和T1的工作方式,控制寄存器 TCON 用于對定時/計數器的啟動、停止進行控制。
    當定時/計數器用于定時時,加法計數器對內部機器周期 Tcy 進行計數。由于機器周期時間是定值,因此對 Tcy 的計數就是定時,如 Tcy = 1us ,計數100,定時100us。當定時/計數器用于計數時,加法計數器對單片機芯片引腳T0(P3.4)或T1(P3.5)上的輸入脈沖進行計數。每來一個輸入脈沖,加法計數器加1。當由全1再加1變成全0時產生溢出,使溢出位 TF0 或TF1置位,如中斷允許,則向 CPU 提出定時/計數中斷;如中斷不允許,則只有通過查詢方式使用溢出位。

    第一,由于它是加法計數器,每來一個計數脈沖,加法器中的內容加1個單位,當由全1加到全0時計滿溢出。因而,如果要計 N 個單位,則首先應向計數器置初值為 X ,且有:
    初值 X =最大計數值(滿值) M ﹣計數值 N
    在不同的計數方式下,最大計數值(滿值)不一樣。一般來說,當定時/計數器工作于 R 位計數方式時,它的最大計數值(滿值)為2的 R 次冪。
    第二,當定時/計數器工作于計數方式時,對芯片引腳 T0(P3.4)或T1(P3.5)上的輸入脈沖計數。計數過程如下:在每一個機器周期的S5P2時刻對T0(P3.4)或T1(P3.5)上的信號采樣一次,如果上一個機器周期采樣到高電平,下一個機器周期采樣到低電平,則計數器在下一個機器周期的S3P2時刻加1計數一次。因而需要兩個機器周期才能識別一個計數脈沖,所以外部計數脈沖的頻率應小于振蕩頻率的1/24。

    3 定時/計數器的方式和控制寄存器

    方式寄存器 TMOD 用于設定定時/計數器T0和T1的工作方式。它的字節地址為 (89H)。

    其中各二進制位的含義說明如下 。
    M1、M0:工作方式選擇位,用于對 T0 的四種工作方式、T1的三種工作方式進行選擇,選擇情況如表:

    C / T :定時或計數方式選擇位。當C/T=1時工作于計數方式;當C/T=0時工作于定時方式 。
    GATE :門控位,用于控制定時/計數器的啟動是否受外部中斷請求信號的影響。如果 GATE =0,定時/計數器的啟動與外部中斷請求信號引腳INT0(P3.2)和INT1(P3.3)無關。如果 GATE =1,定時/計數器 T0 的啟動還受芯片外部中斷請求信號引腳 INT0 (P3.2)的控制,定時/計數器 TI 的啟動還受芯片外部中斷請求信號引腳INT1(P3.3)的控制,只有當外部中斷請求信號引腳 INT0(P3.2)或INT1(P3.3)為高電平時才開始啟動計數;利用 GATE 的這個特點可以測量加在 INT0 (P3.2)或INT1(P3.3)引腳上正脈沖的寬度,在一般情況下 GATE =0。

    4 定時/計數器的控制寄存器TCON

    控制寄存器 TCON 用于控制定時/計數器的啟動與溢出,它的字節地址為88H,可以進行位尋址。

    其中各二進制位的含義說明如下。
    TFl :定時/計數器T1的溢出標志位。當定時/計數器T1計滿時,由硬件使它置位,如中斷允許則觸發T1中斷。進入中斷處理后由內部硬件電路自動清除
    TR1:定時/計數器 TI 的啟動位。可由軟件置位或清零,當TR1=1時啟動;TR1=0時停止。
    TF0 :定時/計數器 T0 的溢出標志位,當定時/計數器 T0 計滿時,由硬件使它置位,如中斷允許則觸發T0 中斷。進人中斷處理后由內部硬件電路自動清除。
    TR0 :定時/計數器 T0 的啟動位。可由軟件置位或清零,當TR0=1時啟動; TR0=0 時停止。
    TCON 的低4位是用于外中斷控制的

    5 實例分析

    1、 設置一個燈每秒閃爍一次;
    2 、設計流水燈,每秒移動一位;
    3、 設計一個開關,通過查詢方式讀入開關狀態,控制流水燈移動的方向。

    #include "reg51.h" #include <intrins.h> #define uchar unsigned char #define uint unsigned intsbit led=P1^0; sbit key=P3^0; uchar i,j;void delay(uint k){while(k--); }//定時器初始化 void time_init(){TMOD=0x01;//定時器T0TH0=0xD8;//定時10ms 65536-10000TL0=0xF0;TR0=1;//啟動T0定時器ET0=1;EA=1; }void left(){//LED燈每1秒閃爍一次并向左移動P2=0x00;j=0x01;while(1){if(i==100){led=!led;P2=~j; j=j<<1;if(j==0){j=0x01;} i=0;} } }void main() {i=0;P2=0x00;//系統默認定義變量,大寫j=0x80;P3=0xff;time_init();while(1){ if(i==100){//設置了10*100ms=1s的定時,流水燈每隔1s閃爍 led=!led; //led燈 D1每秒閃爍一次P2=~j;j=j>>1;if(j==0){j=0x80;} i=0;}//開關if(key==0x00){delay(1000);//消抖if(key==0x00){//按動開關流水燈,從低電平走向高電平,并每一秒移動1位left();while(!key);}}} }void T0_int() interrupt 1{//TH0,TH0需要重新置入初值TH0=0xD8;TL0=0xF0;i++; }

    示波器得知,led燈每隔一秒閃爍一次。

    定時器

    總結

    以上是生活随笔為你收集整理的C51单片机T0/T1计数器举例的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。