<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 51單片機學習筆記(三)_定時器和計數(shù)器

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

          作者: 時間:2016-11-20 來源:網(wǎng)絡(luò) 收藏
          注:定時器計數(shù)器原理與使用方法相似、此處計數(shù)器知識為基礎(chǔ)普及、后面詳講

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

          本文引用地址:http://www.ex-cimer.com/article/201611/318621.htm

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

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

          溢出時時間-開始計時時間=預(yù)設(shè)定時時間

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

          若設(shè)定時為0.02s,則:

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

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

          使用定時器的方法

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

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

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

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

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

          C程序?qū)崿F(xiàn)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;   //重置計數(shù)基數(shù)TL0=0x00;counter++;  //溢出一次計次數(shù)}if(counter==50){   //0.02s*50=1scounter=0;	  //清零led=~led; //取反使P1^0亮滅}}}


          評論


          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();