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

          新聞中心

          第9課 定時器

          作者: 時間:2016-12-01 來源:網(wǎng)絡(luò) 收藏
          3、定時器工作方式及賦初值
          通過對上面TMOD寄存器的介紹,我們知道,通過設(shè)置M0M1可能選擇定時器的工作方式。這里可能有的人對選擇定時器工作方式及賦初值是什么意思不明白,其實也很好理解,前面我們不是把加1計數(shù)器比作裝水的水桶嗎,而51單片機(jī)有4種工作方式就相當(dāng)于有4種不同大小的裝水的水桶,所以我們必須通過TMOD這個寄存器選擇哪使用哪一個水桶(也就是選擇哪一種工作方式);至于為什么要賦初值前面我實際已經(jīng)有講到過,計數(shù)器從全是裝0到全部裝1的整個時間是固定的,而我們實際用使用需要不同的定時間,所以我們必須先在計數(shù)器內(nèi)先裝一些數(shù),然后在這個基本上進(jìn)行加1計數(shù),就可以得到我們想要的定時時間。
          定時器總共有四種工作方式,而因為定時器工作方式1比較常用,所以這里僅對定時器0工作方式1進(jìn)行介紹,并介紹如何賦初值。
          方式1的計數(shù)位數(shù)是16位,由TL0作為低8位、TH0作為高8位,組成了16位加1計數(shù)器 ,其邏輯結(jié)構(gòu)圖如圖3所示。
          圖3 定時器0工作方式1邏輯結(jié)構(gòu)圖
          當(dāng)GATE=0,TR0=1時,TL0便在機(jī)器周期的作用下開始自動加1,當(dāng)加了256次后自動向前進(jìn)一位,直到TH0也計滿,然后溢出,置標(biāo)志寄存器TF0=1,如果此時設(shè)置了中斷允許,CPU便作進(jìn)入中斷函數(shù)內(nèi)進(jìn)行中斷程序的處理。注意,此時若TR0=1一直打開的話,計數(shù)器滿后會全部自動清零,然后重新重復(fù)以上過程,直到TR0=0時結(jié)束。
          接下來講解如何計算定時器的初值問題。定時器一旦啟動,它便在原來的數(shù)值基礎(chǔ)上開始加1計數(shù),若在程序開始時,我們沒有設(shè)置TH0和TL0,它們的默認(rèn)值都是0,假設(shè)時鐘頻率為12MHZ,12個時鐘周期為一個機(jī)器周期,那么此時的機(jī)器周期就是1us,計滿TH0和TL0就需要2X16-1,再來一個脈沖,計數(shù)器就溢出,隨即向CPU申請中斷。因此溢出一次的時間為65536us,約等于65.5ms,如果我們要定時50ms,此時就需要向TH0t和TL0里面先賦初值,在這個初值的基礎(chǔ)上計50000個數(shù)后,定時器溢出,此時剛好就是50ms中斷一次,如需要定時1S時,在寫程序時當(dāng)產(chǎn)生20次50ms的定時器中斷后便認(rèn)定是1s,這樣便可以精確制定定時時間了。要定時50ms,即要計50000個數(shù),TH0和TL0中應(yīng)該裝的總數(shù)是65536-50000=15536,把15536對256求模:15536/256裝入TH0中,把15536對256求余:15536%256裝入TL0中就可以了。
          以上就是定時器賦初值的計算方法,總結(jié)后可以得出以下結(jié)論:當(dāng)用定時器的方式1時,設(shè)機(jī)器周期為t ,定時器產(chǎn)生一次中斷的時間為T,那么需要計數(shù)的個數(shù)N=T/t,裝放THX和TLX中的數(shù)分別為:
          THX=(65536-N)/256 ,TLX=(65536-N)%256
          要計算機(jī)器周期t,就需要知道系統(tǒng)的時鐘頻率,也就是單片機(jī)外接晶振的頻率,實驗板上的時鐘頻率為11.0592MHZ,那么機(jī)器周期為12X(1/11059200)=1.09us,若T=50ms.那么N=50000/1.09=45873,如果晶振為12MHX的話,用同樣的方法算出來N=50000.
          4程序舉例
          下面我們舉一個例子,用單片機(jī)的定時器0、工作方式1和中斷技術(shù)實現(xiàn)讓L1以間隔1s的時間閃爍。
          這里我們先總結(jié)一下,在使用定時器主要對定時器作相應(yīng)的初始化,其步驟為:
          (1)對TMOD賦值
          選擇計數(shù)或者定時
          確定T0或T1的工作方式。
          (2)計算初值,并將其寫入TH0、TL0或TH1、TL1。
          (3)使TR0或TR1置位,啟動定時/計數(shù)器定時或計數(shù)。
          (4)需使用中斷方式時,則對IE等賦值,開放中斷
          下面我們給出相關(guān)程序。
          例1:1357燈以間隔1s的時間閃爍。
          #include//頭文件,主要用來聲明,特殊功能寄存器的地址
          #define uint unsigned int//宏定義
          #define uchar unsigned char//宏定義
          sbit D1=P1^0;//位聲明
          uchar time;//定義變量time為無符號字符型
          void main()//主函數(shù)
          {
          TMOD=0x01;//設(shè)置定時器0為工作方式1
          TH0=(65535-50000)/256;//定時50ms賦初值15535
          TL0=(65535-50000)%256;
          EA=1;//開總中斷
          ET0=1;//開定時器0中斷
          TR0=1;//啟動定時器0
          //上面6行為定時器和中斷初始化程序 
          while(1);//停在這里等待中斷產(chǎn)生
          }
          void tim1() interrupt 1//中斷子函數(shù),功能為500ms燈滅一次
          {
          time++;//進(jìn)入一次中斷time自加1
          if(time==10)//如果自加到10,相當(dāng)于500ms
          {
          D1=~D1;//燈亮滅交替
          time=0;//time清零
          }
          }
          程序下載到51hei實驗板上的現(xiàn)象如圖4所示:
          圖4 L1燈以間隔1s的時間閃爍
          上一頁 1 2 下一頁

          關(guān)鍵詞: 定時器單片

          評論


          技術(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); })();