新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 51單片機學習筆記(三)_定時器和計數器

        51單片機學習筆記(三)_定時器和計數器

        作者: 時間:2016-11-20 來源:網絡 收藏
        注:定時器計數器原理與使用方法相似、此處計數器知識為基礎普及、后面詳講

        2個定時器(寄存器)、定時器0、定時器1、(計數器0、計數器1)

        本文引用地址:http://www.104case.com/article/201611/318621.htm

        TMOD:定時器/計數器模式控制寄存器 詳見百度百科TMOD

        • 每經過一個機器周期、寄存器+1
        • TF:定時器溢出標志。溢出時自動置1。中斷時硬件清零否則必須軟件清零。
        • TR:定時器運行控制位。置1開始計時、清零停止計時。
        • C/T:該位為0時用作計時器、該位為1時用作計數器。

        溢出時時間-開始計時時間=預設定時時間

        一個機器周期共有12個振蕩脈沖周期

        若設定時為0.02s,則:

        12*(65535-X)/11059200=0.02s

        定時器作“加1”次數:X=47104=0xB800次 時間為0.02s

        使用定時器的方法

        1、設置特殊功能寄存器TMOD,使之工作在需求的狀態。
        2、設置計數寄存器的初值,精確設定好定時時間。
        3、設置特殊功能寄存器TCON,通過打開TR來讓定時器進行工作。

        4、判斷寄存器TCON的FT0位、檢測定時器溢出情況。

        假設我們使用定時器0、定時為0.02s,兩個寄存器計時

        TMOD=0x01; TMOD=0x01,指的是采用T0方式,將M1置0,M0置1,是方式一的定時器

        高八位寄存器TH0=0xB8、低八位寄存器TL0=0x00

        C程序實現1s鐘定時

        #include typedef unsigned char uint8;typedef unsigned int uint16;sbit led=P1^0;uint8 counter;void main(){TMOD=0x01;TH0=0xb8;TL0=0x00;TR0=1; led=1;counter=0;while(1){if(TF0==1){   //如果達到溢出 0.02s后溢出TF0=0;	 //軟件清零TH0=0xB8;   //重置計數基數TL0=0x00;counter++;  //溢出一次計次數}if(counter==50){   //0.02s*50=1scounter=0;	  //清零led=~led; //取反使P1^0亮滅}}}


        評論


        技術專區

        關閉
        主站蜘蛛池模板: 蒙阴县| 鹤岗市| 商河县| 乌兰县| 博客| 延吉市| 曲靖市| 汪清县| 旬邑县| 多伦县| 南漳县| 高陵县| 石城县| 遵义市| 恭城| 洪洞县| 鄂托克前旗| 庆元县| 咸丰县| 孟州市| 汤阴县| 婺源县| 新沂市| 赣榆县| 安塞县| 尼木县| 江都市| 苗栗县| 沧州市| 宜章县| 扎赉特旗| 阿合奇县| 武穴市| 苗栗县| 昌邑市| 靖边县| 合作市| 张家口市| 沅江市| 德庆县| 宜州市|