單片機定時器用途原理及學習應用詳解_第1頁
單片機定時器用途原理及學習應用詳解_第2頁
單片機定時器用途原理及學習應用詳解_第3頁
已閱讀5頁,還剩6頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、單片機定時器作用原理及學習應用詳解定時器是單片機的重點中的重點,但不是難點,大家一定要完全 理解并且熟練掌握定時器的應用。定時器的初步認識時鐘周期:時鐘周期T是時序中最小的時間單位具體計算的方法 就是1/時鐘源,如果大家用的晶振是 11.0592M,那么對于這個單片 機系統來說,時鐘周期=1/11059200秒。機器周期:我們的單片機完成一個操作的最短時間。機器周期主 要針對匯編語言而言,在匯編語言下程序的每一條語句執(zhí)行所使用的 時間都是機器周期的整數倍,而且語句占用的時間是可以計算出來 的,而C語言一條語句的時間是不可計算的。51單片機系列,在其 標準架構下一個機器周期是12個時鐘周期,也就

2、是12/11059200秒。 現在有不少增強型的51單片機,其速度都比較塊,有的1個機器周 期等于4個時鐘周期,有的1個機器周期就等于1個時鐘周期,也就 是說大體上其速度可以達到標準 51架構的3倍或12倍。因為我們是 講標準的51單片機,所以我們后邊的課程如果遇到這個概念,全部 是指12個時鐘周期。這兩個概念了解即可,下邊就來我們的重頭戲,定時器和計數器。 定時器和計數器是單片機內部的同一個模塊,通過配置SFR(特殊功 能寄存器)可以實現兩種不同的功能,我們大多數情況下是使用定時 器功能,因此我們的課程也是主要來講定時器功能, 計數器功能大家 自己了解下即可。顧名思義,定時器就是用來進行定時

3、的。定時器內部有一個寄存 器,我們讓它開始計數后,這個寄存器的值每經過一個機器周期就會 加1 一次,因此,我們可以把機器周期理解為定時器的計數周期。我 們的秒表,每經過一秒,數字加1,而這個定時器就是每過一個機器 周期的時間,也就是12/11059200秒,數字加1。還有一個特別注意 的地方,就是秒表是加到60后,秒就自動變成0 了,這種情況在單 片機和計算機里我們稱之為溢出。那定時器加到多少才會溢出呢?定 時器有幾種模式,假如是16位的定時器,也就是2個字節(jié),最大值 就是65535,那么加到65535后,再加1就算溢出,如果有其他位數 的話,道理是一樣的,對于 51單片機來說,溢出后,這個值

4、會直接 變成0。從某一個初值,經過計算確定的時間后溢出,這個過程就是 其定時的含義。定時器的寄存器描述標準的51里邊只有定時器0和定時器1這兩個定時器,現在很 多單片機也有多個定時器的,在這里我們先講定時器 0和1。那么我 前邊提到過,對于單片機的每一個功能模塊,都是由他的 SFR也就 是特殊功能寄存器來控制。而和定時器有關的特殊功能寄存器, 有以 下幾個,大家不需要去記憶這些寄存器的名字和作用,你只要大概知 道就行,用的時候,隨時可以查手冊,找到每個寄存器的名字和每個寄存器所起到的作用。表2定時值存儲寄存器容稱tfiiSSFRii 址TII0走時器0高宇節(jié)3CHTLO定時器Offi寧書3AH

5、7H1定時開1高宇節(jié)8DHTL1走時器他字節(jié)3BH. diimgoc* cooi表3 TCON-定時器/計數器控制寄存器的位分配(地址:88H)可位尋址;復位值:0x00;復位源:任何復位ffi765422 10特號TP1TRITFOTROIE1T1 - E®: . ; :'TOi表4 TCON-定時器/計數器控制寄存器的位描述位留號捕流rajp 4 :I I 1 4±H口冃屮1 1 44丁射沖-空f-. ,+R77F1疋旳誹片國出初擊旦疋羽詐1盤生也H旳戰(zhàn)1H直J 洎芳r悶種左武:細年清零f或舍逬入左時器中斷時硬牛渭零。67R1達利運彳亍控帝血。鈦件買曲灣零來逬芍

6、啟動'關閉走時器-5運時器o溢出標志"一旦定時器發(fā)生溢出時硬件置匕淸雰有兩種方式:軟件清霍或考進入定時器中斷時刪清艱走兇o運行控?W也 軟直位惰零來逬萬啟動民閉左時庭TP04 TRD3 IE12 rn1 EO a ITO外部中斷部分”弓走時器元茨*暫且不看1 anaon, com大家注意在表4中的描述中,只要寫到硬件置1或者清0的,就 是指一旦符合條件,單片機自動完成的動作,只要寫軟件置1或者清 0的,是指我們用程序去完成這個動作,后邊課程中不再做說明。表2中的寄存器,是存儲計數器的計數值的,兩個字節(jié)的用于定 時器1,兩個字節(jié)用于定時器0。表3中有TF1、TR1、TF0 TR

7、0這4位需要我們理解清楚。兩位 定時器1的,兩位定時器0的,我們只解釋定時器1的,定時器0的 同理。先看TR1,當我們程序中寫TR1 = 1以后,定時器值就會每經 過一個機器周期加1,當我們程序中寫TR1 = 0以后,定時器值就會 保持不變化。TF1,這個是一個標志位,他的作用是告訴我們定時器 溢出了。比如我們的定時器設置成 16位的定時器,那么每經過一個 機器周期,TL1加1 一次,當TL1加到255后,再加1,TL1變成0, TH1會加1 一次,如此一直加到 TH1和TL1都是255 (即TH1和TL1 組成的16位整型數為65535)以后,再加1 一次,那么就會溢出, TH1 和 TL1

8、同時都變?yōu)?,只要一溢出,TF1馬上自動變成1,告訴我 們定時器溢出了,僅僅是提供給我們一個信號,讓我們知道定時器溢 出了,它不會對定時器是否繼續(xù)運行產生任何影響。表5 TMOD-定時器方式控制寄存器的位分配(地址89H)不可位尋址;復位值:0x00;復位源:任何復位位755432i10GATTQT3ATEorMO(T1)(T1)(T1)口)(TO)(TO)'. TO) i(Tfi) com細心的同學會發(fā)現,TCONIE個地方標注的是“可位尋址”,TMOD 這里標注的是“不可位尋址”。這個地方的意思就是比如TCON有一位TR1,我們可以在程序中直接進行 TR1= 1;這樣操作。但是(T

9、1)M1 =1;這樣的操作就是錯誤的。我們要操作就必須一次操作一個字節(jié), 就是必須一次性對TMO斷有位操作,不能對其中某一位單獨進行操 作。表6 TMOD-定時器/計數器方式控制寄存器的位描述符號 描講11/TO在表95中*橋T的表超制宦時器的位.樁TD的表超科庭柑器。肘位*滾佼被置t無為門割兔SH'INTY腳為高并且TRW婕帶H立彼11時便統定時GATE器X *左時器幵始計時出謨立扳清0時,只更TR位破宜1 定時臨就侵能開始 計時不曼翌弓腳INTY夕喑膽號的書冊 靜用來測星外弗豈引總中克屋:這 是庠吋羿牛頤外功能,本詁踝暫不解°CfT走時器或廿霖罪選揮應 該何躊g零時壞作龍

10、時語功能(內部奈統時用作 計數器功能°., ,.h, .Jr. 1 n. /: -in表7 TMOD-定時器方式控制寄存器 M1/M0工作模式M1IVO工作模貳00仃藕容加尬單片機的侶位定時辭.THti的8位'和九rt的5険成f 13位定時器011幣謙JTL唯&戊丹北位的走吋器1i02中丈自動重裝瓊貳,走時誥溢岀右TH®裝封TLn中113攀匕二“器匚走時莽澆或尹卜屜煤討蒸以上這4種模式的配置,其中模式0是為了兼容老的8048單片 機而設的,現在的51幾乎不會用到這種模式,而模式 3根據我的應 用經驗,他的功能模式2完全可以取代,所以基本上也是不用,那么 我們

11、重點就學習模式1和模式2。模式1就是THn和TLn組成了一個16位的定時器,取值范圍是0到65535,溢出后,只要不對THn和TLn重新賦值,則從0開始計 數。模式2的功能是自動裝載,就是TLn溢出后,TFn就直接置1 了, 并且THn的值直接賦給TLn,然后TLn從新賦值的這個數字開始計數。 這個功能可以用來產生串口的通信波特率,我們講串口的時候要用 到,本章節(jié)我們重點來學習模式1。為了加深大家理解這個定時器原 理,我們來看一下他的模式1的電路示意圖1。圖1定時器/計數器模式1示意圖我?guī)е蠹襾矸治鲆幌逻@個示意圖, 后邊如果手冊中遇到,大家 也就會自己研究了。osC匡表示時鐘頻率,因為我們1

12、個機器周期等 于12個時鐘周期,所以那個d就等于12。下邊GATA右邊的那個門 是一個非門電路,再右側是一個或門,再往右是一個與門電路。圖上可以看出來,下邊部分電路是控制了上邊部分,那我們先來 看下邊是如何控制的,我們以定時器 0為例。1、 TR0和下邊或門電路的結果要進行與門運算,TR0如果是0的 話,與運算完了肯定是0,所以確定如果要讓定時器工作,TR0 = 1。2、與門結果要想是1,那或門出來的信號必須也得是 1才行。 在GATE位為1的情況下,經過一個非門變成 0,或門電路結果要想 是1的話,那INT0即P3.2引腳必須是1的情況下,這個時候定時器 才會工作,而INT0引腳是0的情況下

13、,定時器不工作,這就是 GATE 位的作用。3、當GATE位為0的時候,經過一個非門變成1,不管INT0引 腳是什么電平,經過或門電路后則肯定是 1,定時器就會工作。4、要想讓定時器工作,就是加 1,從圖上看有兩種方式,第一 種方式是那個開關打到上邊的箭頭,就是 C/T = 0的時候,一個機器 周期TL就會加1 一次,當開關打到下邊的箭頭,即 C/T =1的時候, T0引腳即P3.4引腳來一個脈沖,TL就加1 一次,這也就是計數器功INTO引腳是P3.2, INT1引腳是P3.3, TO引腳是P3.4, T1引腳 是 P3.5。定時器程序應用了解了定時器相關的寄存器,那么我們下面就來做一個定時

14、器的 程序,鞏固一下我們學到的內容。我們這節(jié)課的程序先使用定時器 0, 在使用定時器的時候,需要以下幾個步驟:第一步:設置特殊功能寄存器 TMOD配置好工作模式;第二步:設置計數寄存器THO和 TLO的初值;第三步:設置TCON通過打開TR0位來讓定時器開始計數。第四步:判斷TCOr寄存器的TF0億監(jiān)測定時器溢出情況。寫程序之前,我們要先來學會計算如何用定時器定時時間。我們以晶振是11.0592M為例講解,時鐘周期就是1/11059200,機器周期 就是12/11059200,我們假如要定時20ms就是0.02秒,要經過x 個機器周期得到0.02秒,我們來算一下x*12/11059200=0.

15、02,得到 x= 18432。那么我們現在16位的定時器溢出值是65536,我們可以 這樣,先給TH0和TL0一個初值,讓他們經過18432個機器周期后剛 好溢出,溢出后我們可以通過檢測 TF0位得知,就剛好是0.02秒。 這個初值y二65536 - 18432 = 47104 ,轉成16進制就是0xB800, 那么就是 TH0 = 0xB8,TL0 = 0x00。那0.02秒我們已經定時出來了,細心的同學會發(fā)現,我們如果 初值直接給一個 0x0000, 一直到65536溢出,定時器定時值最大也 就是71ms左右,那么我們想定時更長時間怎么辦呢?用你小學學過的邏輯,倍數關系就可以解決此問題。那

16、好了,我們下面就用程序來實現以下這個功能#in elude / 包含寄存器的庫文件sbit LED = P0 ;sbit ADDR0 = P1 :sbit ADDR1 =P1 :sbit ADDR2 =P1 :sbit ADDR3 =P1 :sbit ENLED = P1 ;void mai n()un sig ned char coun ter = 0;ENLED = 0; ADDR0 = 0; ADDR1 = 1;ADDR2 = 1; ADDR3 = 1; LED = 1; /74HC138 和 LED燈初始化 部分TMOD = 0x01; /設置定時器0為模式1TH0 = 0xB8;TL0 = 0x00; / 定時值初值TR0 = 1; / 打開定時器0while(1)if(1 = TF0) /判斷定時器0是否溢出TFO = 0;THO = 0xB8; / 一旦溢出后,重新賦值TL0 = 0x00;coun ter+;if(50 = counter) /判斷定時器0溢出是否達到50次counter = 0; /counter 清 0, 重新計數LED = !LED; /LED 取反操作,0->1 ,1->0程序都有注釋,不難理解,這里要解釋一個地方,就是兩次i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論