MCS51單片機原理及應用定時器計數器_第1頁
MCS51單片機原理及應用定時器計數器_第2頁
MCS51單片機原理及應用定時器計數器_第3頁
MCS51單片機原理及應用定時器計數器_第4頁
MCS51單片機原理及應用定時器計數器_第5頁
已閱讀5頁,還剩33頁未讀 繼續免費閱讀

下載本文檔

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

文檔簡介

1、mcs-51 單片機原理及應用單片機原理及應用mcs-51單片機定時器/計數器 單片機的定時計數器單片機的定時計數器 單片機應用系統中定時計數的需求:單片機應用系統中定時計數的需求: 如用單片機控制的打鈴器、空調的定時開關、啤酒自動生產如用單片機控制的打鈴器、空調的定時開關、啤酒自動生產線上對酒瓶的計數裝置等。線上對酒瓶的計數裝置等。 80c51單片機片內的定時單片機片內的定時/計數器:計數器: 兩個位可編程的定時計數器:兩個位可編程的定時計數器:t0和和t1,都能定時和對,都能定時和對外部事件進行計數。外部事件進行計數。 此外,此外,t1還可以作為串行接口的波特率發生器。還可以作為串行接口的

2、波特率發生器。 定時計數器的結構定時計數器的結構.定時和計數的原理定時和計數的原理(1)計數)計數 定時計數器的實質是在處置基礎上的加計數定時計數器的實質是在處置基礎上的加計數器(位),器(位),16位定時位定時/計數器的計數容量是計數器的計數容量是65536單片機是對脈沖個數計數,計數器每單片機是對脈沖個數計數,計數器每接收到一個脈沖,計數值加接收到一個脈沖,計數值加1,當接收滿當接收滿65535個脈沖后,再個脈沖后,再來一個脈沖,計數值清來一個脈沖,計數值清0表明表明這一輪計數結束,同時將標這一輪計數結束,同時將標志位志位tf0或或tf1置置1。 (2)定時)定時 單片機內部的計數器用作定

3、時器時,是對標準的單片機內部的計數器用作定時器時,是對標準的時鐘進行了計數,每來一個時鐘脈沖,計數器加時鐘進行了計數,每來一個時鐘脈沖,計數器加1,只要保證計數脈沖的間隔相等,則計數值就代表了只要保證計數脈沖的間隔相等,則計數值就代表了時間的流逝。時間的流逝。單片機中的定時器和計數器其實是一個器件:單片機中的定時器和計數器其實是一個器件:計數器:計數器:是對外部發生的事件進行計數,是對外部發生的事件進行計數,定時器:定時器:是對單片機內部的標準時鐘脈沖進行是對單片機內部的標準時鐘脈沖進行計數。計數。由單片機的晶振經過由單片機的晶振經過12分頻后得到。由于晶振的頻率很準,分頻后得到。由于晶振的頻

4、率很準,所以這個時鐘脈沖的時間間隔也很準。當單片機采用所以這個時鐘脈沖的時間間隔也很準。當單片機采用12的晶振時,它提供給計數器的脈沖頻率是的晶振時,它提供給計數器的脈沖頻率是,脈沖周期就是微秒。,脈沖周期就是微秒。定時定時/計數器計數器t0的結構示意圖的結構示意圖獲得標準時間 單片機內部的單片機內部的16位定時計數器由高位定時計數器由高8位和低位和低8位位兩個寄存器組成:兩個寄存器組成:l t0由由th0和和tl0組成,組成,l t1由由th1和和tl1組成,組成, 定時計數器的計數值就存放在這里面。定時定時計數器的計數值就存放在這里面。定時/計計數器數器t1的結構與的結構與t0相同。相同。

5、定時定時/計數器的結構計數器的結構16位定時計數器計滿位定時計數器計滿65536個脈沖時,也會發生溢出。個脈沖時,也會發生溢出。 定時計數器溢出后標志位定時計數器溢出后標志位tf0(或(或tf1)由)由0變變1,由此能,由此能夠引發定時中斷(在中斷定時方式下),這就像定時的時間一夠引發定時中斷(在中斷定時方式下),這就像定時的時間一到,鬧鐘就會響一樣到,鬧鐘就會響一樣。 如果采用如果采用12的晶振,對應的脈沖周期是微秒,計的晶振,對應的脈沖周期是微秒,計滿滿65536個脈沖所對應的時間就是個脈沖所對應的時間就是65.536ms。定時定時/計數值的設置計數值的設置 計數器的道理是一樣的,只要用預

6、置數的方法先在計數計數器的道理是一樣的,只要用預置數的方法先在計數容器內存入一個初值容器內存入一個初值 ,如我們要計如我們要計100,那就存入,那就存入65436,只要再來只要再來100個脈沖,就剛好會溢出,引發中斷。個脈沖,就剛好會溢出,引發中斷。 在時鐘頻率為在時鐘頻率為12mhz的情況下,每個時鐘脈沖是的情況下,每個時鐘脈沖是1微微秒,則計滿秒,則計滿65536個脈沖需個脈沖需65.536毫秒,如要定時毫秒,如要定時10毫秒毫秒則存入初值則存入初值55536,(,(10毫秒是毫秒是10000微秒,需計數微秒,需計數10000個脈沖)。可見,個脈沖)。可見, 定時器的定時時間長短與系統時鐘

7、和定時器初值有關定時器的定時時間長短與系統時鐘和定時器初值有關。 說明說明 1. 當定時計數器用作當定時計數器用作計數器計數器時,通過引腳時,通過引腳p3.4、p3.5對外部輸入脈沖計數。對外部輸入脈沖計數。 2 . 定時計數器定時計數器t0(t1)啟動運行后,會按設定的工作方啟動運行后,會按設定的工作方式獨立進行計數,不再占用式獨立進行計數,不再占用cpu時間。當計數器時間。當計數器t0(t1)計計滿溢出時,滿溢出時,tf0(tf1)置置1,向,向cpu發出中斷請求信號。發出中斷請求信號。定時器初值的設置定時器初值的設置th1tl1th0tl0tcontmod啟動啟動溢出溢出工作方式工作方式

8、中斷請求內部總線tcyt1t0定時器定時器/計數器的初始化計數器的初始化定時定時/計數器的方式寄存器計數器的方式寄存器tmodtmodd7d6d5d4d3d2d1d0(89h)gatec/tm1m0gatec/tm1m0定時器定時器1定時器定時器0其中:m1、m0為工作方式選擇位 ,用于對t0的四種工作方式,t1的三種工作方式進行選擇,選擇情況如下 m1m0工作方式工作方式方式說明方式說明00013位定時位定時/計數器計數器01116位定時位定時/計數器計數器1028位自動重置定時位自動重置定時/計數器計數器113兩個兩個8位定時位定時/計數器(只有計數器(只有t0有)有)c/t:定時或計數方

9、式選擇位,當c/t=1時工作于計數方式;當c/t=0時工作于定時方式。 gate:門控位,用于控制定時/計數器的啟動是否受外部中斷請求信號的影響。l例如 :設定時/計數器 t0 為定時工作方式 1 。設定時/計數器 t1為計數方式2和t0 為定時工作方式 1 tmodd7d6d5d4d3d2d1d0(89h)gatec/tm1m0gatec/tm1m0定時器定時器1定時器定時器0mov tmod,#01h;tmod0000 0001bmov tmod, #61h; tmod0110 0001b定時定時/計數器的控制寄存器計數器的控制寄存器tcontcond7d6d5d4d3d2d1d0(88h

10、)tf1tr1tf0tr0ie1it1ie0it0其中:tf1:定時/計數器t1的溢出標志位,當定時/計數器t1計滿時,由硬件使它置位,如中斷允許則觸發t1中斷。進入中斷處理后由內部硬件電路自動清除。tr1:定時/計數器t1的啟動位,可由軟件置位或清零,當tr1=1時啟動;tr1=0時停止。定時器計數器初值計算l定時器計數器用于定時或計數時,必須按照需要給計數器設置初值。定時器計數器在計數初值的基礎上以加1的方式進行計數,在計數器從全1變為全0時,將自動產生溢出中斷請求。(1)計數初值計算)計數初值計算l 假設要計數的值為x,由于計數器是加工計數器,所以定時器計數器的初值為 2 x:其中n的值

11、依賴于工作方式,對于方式 0,n= 13;即初值=8192-x對于方式 1,n= 16;即初值=65536-x對于方式 2和方式 3,n=8;即初值= 256-xn2)定時初值計算)定時初值計算l定時就是定時間,假設晶振頻率為f,定時時間為t,對應的計數值為x,此時計數器是將系統時鐘12分頻后作為計數脈沖,則以下等式成立。l 要裝入的計數器初值 ci= 2 tfosc/12。例如:已知晶振的頻率為 6 mhz,要求定時為2 ms,則 當為方式0時,應裝入的計數初值為;8192210 610 /12 = 8192-1000 = 7192n36u 定時時間常數初值定時時間常數初值x: 方式方式0

12、x=8192-t(fosc/12) 方式方式1 x=65536-t(fosc/12) 方式方式2、方式、方式3 x=256-t(fosc/12) 其中其中t是需要定時的時間,單位是微秒;是需要定時的時間,單位是微秒;fosc是晶振是晶振u 計數時間常數計數時間常數x: 方式方式0 x=8192-s 方式方式1 x=65536-s 方式方式2、方式、方式3 x=256-s 說明:式中說明:式中s是需要計數的次數是需要計數的次數 定財器計數器初始化步驟 1)確定工作方式:把工作方式控制字寫入到tmod中; 2)設置定時或計數的初值:根據問題要求,求出定時或計數的初值,寫入到寄存器tho、tlo或t

13、hi、tli中。 3)如果需要中斷,使定時器中斷允許位et0或eti置位,如果要求中斷嵌套,還應設置相應的中斷優先級,然后置位ea,使cpu開放中斷;如果不需要中斷,僅以軟件方式對計數器溢出標志tfo或tfi進行查詢,則可略去此步驟; 4)啟動定時器計數器:將 tro或 tri置 1即可啟動定時器計數器。 定時定時/計數器的工作方式計數器的工作方式一方式一方式0振蕩器12tlx(低低5位位)thx(高高8位位)tfx與或txtrxgateintxs2s1c/ttcy中斷請求方式0是13位的定時/計數方式,因而最大計數值為 2的13次冪,等于8192。如計數值為n,則置入的初值x為: x=819

14、2-n例如定時/計數器t0的計數值為1000,則初值為7192,轉換成二進制數為1110000011000b,則th0=11100000b,tl0=00011000b。振蕩器12tlx(低低8位位)thx(高高8位位)tfx與或txtrxgateintxs2s1c/ttcy中斷請求二、方式二、方式1方式1是16位的定時/計數方式,因而最大計數值為 2的16次冪,等于65536。如計數值為n,則置入的初值x為:x=65536-n如定時/計數器t0的計數值為1000,則初值為65536-1000=64536,轉換成二進制數為1111110000011000b,則th0=11111100b,tl0=

15、00011000b。三方式三方式2振蕩器12tlx(8位)thx(8位)tfx與或txtrxgateintxs2s1c/ttcy中斷請求重裝初值8 方式2,16位的計數器只用了8位來計數,用的是tl0(或tl1)的8位來進行計數,而th0(或th1)用于保存初值。當tl0(或tl1)計滿時則溢出,一方面使tf0(或tf1)置位,另一方面溢出信號又會觸發三態門,使三態門導通,th0(或th1)的值就自動裝入tl0(或tl1)。 特別適合于產生比較精特別適合于產生比較精確的連續脈沖信號。確的連續脈沖信號。 由于是8位的定時/計數方式,因而最大計數值為 2的8次冪,等于256。如計數值為n,則置入的

16、初值x為: x=256-n 如定時/計數器t0的計數值為100,則初值為256-100=156,轉換成二進制數為10011100b,則th0= tl0=10011100b。注意: 由于方式2計滿后,溢出信號會觸發三態門自動地把th0(或th1)的值裝入tl0(或tl1)中,因而如果要重新實現n個單位的計數,不用重新置入初值。 方式3只有定時/計數器t0才有,當m1m0兩位為11時,定時/計數器t0工作于方式3,定時/計數器t0被分為兩個部分tl0和th0,其中,tl0可作為定時/計數器使用,占用t0的全部控制位:gate、c/t、tr0和tf0;而th0固定只能作定時器使用,對機器周期進行計數

17、,這時它占用定時/計數器t1的tr1位、tf1位和t1的中斷資源。 四、方式四、方式3振蕩器12tl0(8位)tf0與或t0tr0gateint0s2s1c/ttcy中斷請求th0(8位)tf1s2中斷請求t1tr1初始化程序初始化程序 例例3:某牛奶生產線上一個包裝是某牛奶生產線上一個包裝是12盒,要求每生產盒,要求每生產12盒就執行裝箱操作,用盒就執行裝箱操作,用80c51單片機來控制,請編寫初單片機來控制,請編寫初始化程序。始化程序。 思路與計算:思路與計算:要確定定時器(要確定定時器(t0 或或t1),選擇其工作),選擇其工作方式。我們以方式。我們以t0的工作方式的工作方式2為例,計算

18、時間常數并賦值為例,計算時間常數并賦值給給th0、tl0。 x=256-s=256-12=244=0f4h 2 2初始化程序:初始化程序: mov tmodmov tmod,#06h #06h ;t0t0作計數器,工作于方式作計數器,工作于方式2 2 mov th0 mov th0,#0f4h #0f4h ;裝入時間常數初值;裝入時間常數初值 mov tl0mov tl0,#0f4h #0f4h ;自動重裝時間常數;自動重裝時間常數 mov ie mov ie ,#00h #00h ;用查詢方式確定計滿;用查詢方式確定計滿1212盒?盒?(或(或mov ie mov ie ,#82h#82h)

19、;使用);使用t0t0中斷,計滿中斷,計滿1212盒后,盒后, ;自動申請中斷;自動申請中斷 setb tr0 setb tr0 ;啟動;啟動t0t0波特率發生器波特率發生器 3 3總結:總結:對計數過程是否結束有查詢和中斷兩種方法,要對計數過程是否結束有查詢和中斷兩種方法,要合理選擇,并在程序設計中正確體現。合理選擇,并在程序設計中正確體現。 l例: 設 6m時鐘,用定時/計數器to產生 1ms的 定時,并使p1.0輸出 占空比 為1:1周期為 2ms的方波 l計算初值:方式方式0, 13位計數器位計數器 x=8192-t(fosc/12) =8192-1000 x6/12 =7692 =1

20、1110000 01100 th0=0f0h tl0=0chl程序:org0000hajmpmainorg000bh ;t0入口地址ajmpout1 ;終端服務入口main:movtmod,#00h ;置t0方式0movth0,#0f0h ;初值高位movtl0,#0ch ;初值低位setbtr0 ;啟動t0setb et0 ;開定時器中斷setb ea ;開cpu中斷loop:nopsjmp loop ;等待out1:cpl p1.0 ;p1.0去反movth0,#0f0h ;初值高位movtl0,#0ch ;初值低位reti ;返回中斷proteus硬件仿真繪制電路原理圖 proteus硬

21、件仿真-參數設置proteus硬件仿真波形測試 仿真后確定的低位初值仿真后確定的低位初值原始初值 proteus硬件仿真-頻率測量proteus硬件仿真最終初值l接續上題,用 定時器t1完成上述功能 org0000hajmpmainorg001bh ;t1入口地址ajmpout1 ;住程序入口main:movtmod,#00h ;t1方式0movth1,#0f0h ;初值高位movtl1,#0ch ;初值低位setbtr1 ;開tosetb et1 ;開定時器中斷setb ea ;開cpu中斷loop:sjmp loop ;等待out1:cpl p1.0 ;p1.0去反movth1,#0f0h

22、 ;初值高位movtl1,#0ch ;初值低位reti ;返回中斷 end l【例例】設系統時鐘頻率為12mhz,編程實現從p1.1輸出周期為1s的方波。l 先產生500ms的周期性的定時,定時到則對p1.1取反就可實現。由于定時時間較長,一個定時/計數器不能直接實現,可用定時/計數器t0產生周期性為10ms的定時,然后用一個寄存器r2對10ms計數50次或用定時/計數器t1對10ms計數50次實現。系統時鐘為12mhz,定時/計數器t0定時10ms,計數值n為10000,只能選方式1,方式控制字為00000001b(01h),初值x:lx=65536-10000=55536=11011000

23、11110000bl則th0=11011000b=d8h,tl0=11110000b=f0h。(1)用寄存器r2作計數器軟件計數,中斷處理方式。匯編程序:org 0000hljmp mainorg 000bhljmp intt0 org 0100hmain: mov tmod,#01hmov th0,#0d8hmov tl0,#0f0hmov r2,#00hsetb easetb et0setb tr0sjmp $intt0: mov th0,#0d8h mov tl0,#0f0h inc r2 cjne r2,#32h,next cpl p1.1 mov r2,#00hnext: reti end利用定時器 to,使與 pi 0口連接的發光二極管每 is閃爍一次。 解:使發

溫馨提示

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

評論

0/150

提交評論