單片機項目教學:定時器計數(shù)器的應用—音樂門鈴的制作(匯編語言)_第1頁
單片機項目教學:定時器計數(shù)器的應用—音樂門鈴的制作(匯編語言)_第2頁
單片機項目教學:定時器計數(shù)器的應用—音樂門鈴的制作(匯編語言)_第3頁
單片機項目教學:定時器計數(shù)器的應用—音樂門鈴的制作(匯編語言)_第4頁
單片機項目教學:定時器計數(shù)器的應用—音樂門鈴的制作(匯編語言)_第5頁
已閱讀5頁,還剩37頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、1 定時器的結(jié)構(gòu)及工作原理2 定時器的TMOD和TCON寄存器3 定時器的工作方式 方式0 方式1 方式2 方式34 定時器的編程和應用1基本知識基本知識定時器定時器/ /計數(shù)器簡介計數(shù)器簡介 1 1計數(shù)概念計數(shù)概念 同學們選班長時,要投票,然后統(tǒng)計選票,常用的方法是畫“正”,每個“正”號五劃,代表五票,最后統(tǒng)計“正”號的個數(shù)即可,這就是計數(shù)。單片機有兩個定時/計數(shù)器T0和T1,都可對外部輸入脈沖計數(shù)。計數(shù)計數(shù)24瓶瓶光電信號光電信號24瓶裝完申請中斷瓶裝完申請中斷轉(zhuǎn)入中斷服務程序裝箱轉(zhuǎn)入中斷服務程序裝箱輸送帶輸送帶 例如一啤酒生產(chǎn)線,如下圖所示例如一啤酒生產(chǎn)線,如下圖所示 2 2計數(shù)器的容量

2、計數(shù)器的容量 我們用一個瓶子盛水,水一滴滴地滴入瓶中,水滴不斷落下,瓶的容量是有限的,過一段時間之后,水就會逐漸變滿,再滴就會溢出。 單片機中的計數(shù)器也一樣,T0和T1這兩個計數(shù)器分別是由兩個8位的RAM單元組成的,即每個計數(shù)器都是16位的計數(shù)器,最大的計數(shù)量是65536。 3. 3. 定時定時一個鐘表,秒針走60次,就是1分鐘,所以時間就轉(zhuǎn)化為秒針走的次數(shù),也就是計數(shù)的次數(shù),可見,計數(shù)的次數(shù)和時間有關(guān)。只要計數(shù)脈沖的間隔相等,則計數(shù)值就代表了時間,即可實現(xiàn)定時。秒針每一次走動的時間是1秒,所以秒針走60次,就是60秒,即1分鐘。因此,單片機中的定時器和計數(shù)器是一個東西,只不過計數(shù)器是記錄的外

3、界發(fā)生的事情,而定時器則是由單片機提供一個非常穩(wěn)定的計數(shù)源。 溫度溫度開始定時開始定時保溫保溫5分鐘分鐘淬火淬火 清洗清洗開始定時開始定時回火回火3小時小時空冷空冷 例如某機械零件的熱處理工藝曲線為:例如某機械零件的熱處理工藝曲線為:實際控制可以由單片機定時發(fā)出信號控制自動完成整個工藝過程。實際控制可以由單片機定時發(fā)出信號控制自動完成整個工藝過程。 4. 4. 溢出溢出 上面我們舉的例子,水滴滿瓶子后,再滴就會溢出,流到桌面上。 單片機計數(shù)器溢出后將使得溢出標志位TF0/TF1變?yōu)椤?”,一旦TF0/TF1由0變成1,就是產(chǎn)生了變化,就會引發(fā)事件,就會申請中斷。 5. 5. 任意定時及計數(shù)的方

4、法任意定時及計數(shù)的方法計數(shù)器的容量是16位,也就是最大的計數(shù)值到65536,計數(shù)計到65536就會產(chǎn)生溢出。 如果計數(shù)值要小于65536,怎么辦呢?一個空的瓶子,要1萬滴水滴進去才會滿,我們在開始滴水之前就先放入一些水,就不需要10000滴了。比如先放入2000滴,再滴8000滴就可以把瓶子滴滿。在單片機中,我們也采用類似的方法,稱為“設初值”的方法,我們要計1000,那就先放進64536,再來1000個脈沖,不就到了65536了嗎?定時也是如此。 6 6單片機定時器單片機定時器/ /計數(shù)器的結(jié)構(gòu)計數(shù)器的結(jié)構(gòu)主要組成:兩個16位的定時器T0和T1,以及他們的工作方式寄存器TMOD和控制寄存器T

5、CON等組成。定時器T0和T1各由兩個8位特殊功能寄存器TH0、TL0、TH1、TL1構(gòu)成。工作方式寄存器TMOD: 用于設置定時器的工作模式和工作方式;控制寄存器TCON: 用于啟動和停止定時器的計數(shù),并控制定時器的狀態(tài);單片機復位時,兩個寄存器的所有位都被清單片機復位時,兩個寄存器的所有位都被清0 0。10定時器/計數(shù)器T1、T0,由編程來設置它工作在定時還是計數(shù)狀態(tài)。兩種工作模式: (1) 計數(shù)器工作模式(2) 定時器工作模式4種工作方式 (方式0-方式3) 。(1) 計數(shù)器工作模式 就是對外部事件進行計數(shù)。 計數(shù)脈沖來自相應的外部輸入引腳T0(P3.4)或T1(P3.5)。當輸入信號發(fā)

6、生由1至0的負跳變(下降沿)時,加1計數(shù)器(TH0,TL0或TH1,TL1)的值增1,直到計時器計滿溢出;1)預先裝入一個計數(shù)初值。2)每來一個外部脈沖輸入,記數(shù)器1。3)記數(shù)器計滿回零,產(chǎn)生溢出中斷請求。xNNc計數(shù)值計數(shù)值 計數(shù)器的模計數(shù)器的模 初值初值(2) 定時器工作模式也是通過計數(shù)實現(xiàn)的。計數(shù)脈沖來自內(nèi)部時鐘脈沖,每個機器周期計數(shù)值增1,所以計數(shù)器計數(shù)的是機器周期脈沖個數(shù)。從而實現(xiàn)定時定時時間定時時間= =計數(shù)值計數(shù)值機器周期機器周期。1)預先裝入一個計數(shù)初值。2)周期性1記數(shù)。3)記數(shù)器計滿回零,產(chǎn)生溢出中斷請求。)(xMt定時時間定時時間 計數(shù)器的模計數(shù)器的模 初值初值 機器周期

7、機器周期可編程定時器的工作方式、啟動、停止、溢出標志、計數(shù)器等都是可編程的通過設置寄存器TMOD,TCON,TH0,TL0,TH1和TL1 實現(xiàn)。當設置了定時器的工作方式并啟動定時器工作后,定時器就按被設定好的工作方式獨立工作,不再占用CPU,只有在計數(shù)器計滿溢出時才向CPU申請中斷,占用CPU。由此可見,定時器是單片機中工作效率高且應用靈活的部件。14 8051單片機定時/計數(shù)器主要有幾個特殊功能寄存器組成:TMOD,TCON,TH0,TL0,TH1,TL1。TMOD:設置定時/計數(shù)器的工作方式;TCON:控制定時/計數(shù)器的啟動和停止;TH0和TL0 :存放定時/計數(shù)器T0的初值或計數(shù)結(jié)果;

8、 TH0存放高8位,TL0 存放低8位;TH1和TL1 :存放定時/計數(shù)器T1的初值或計數(shù)結(jié)果; TH1存放高8位,TL1 存放低8位;15低4位與外部中斷有關(guān),前面已經(jīng)介紹過。高4位的功能如下: (1) TF1、TF0 計數(shù)溢出標志位 定時器T0或T1計數(shù)溢出時,由硬件自動將此位置“1”;TFx可以由程序查詢,也是定時中斷的請求源;(2) TR1、TR0 計數(shù)運行控制位 TRx=1: 啟動定時器/計數(shù)器工作 TRx=0: 停止定時器/計數(shù)器工作 16 TMOD的字節(jié)地址為的字節(jié)地址為89H,不能按位尋址不能按位尋址,只能用字節(jié)只能用字節(jié)傳送傳送指令來設置。指令來設置。8位分為兩組,位分為兩組

9、,高高4位控制位控制T1,低低4位控制位控制T0。(1)GATE門控位門控位 0:以以TRx(x=0,1)來啟動定時器)來啟動定時器/計數(shù)器運行。計數(shù)器運行。1:用外中斷引腳用外中斷引腳(/INT0或或/INT1)上的高電平和上的高電平和 TRx來啟動定時器來啟動定時器/計數(shù)器運行。計數(shù)器運行。 (2) C/T* 計數(shù)器模式和定時器模式選擇位計數(shù)器模式和定時器模式選擇位 0: 定時器模式。定時器模式。 1: 計數(shù)器模式。計數(shù)器模式。(3) M1、M0 工作方式選擇位工作方式選擇位 M1 M0 工工 作作 方方 式式 0 0 方式方式0,13位定時器位定時器/計數(shù)器。計數(shù)器。 0 1方式方式1,

10、16位定時器位定時器/計數(shù)器。計數(shù)器。 1 0 方式方式2,8位常數(shù)自動重新裝載位常數(shù)自動重新裝載 1 1 方式方式3,僅使用,僅使用T0,T1停止計數(shù)停止計數(shù)復位時,復位時,TMOD所有位均為所有位均為“0”。1. 初始化 MCS-51單片機的定時器/計數(shù)器是可編程的,但在進行定時或計數(shù)之前要對程序進行初始化,具體步驟如下:(1)對TMOD賦值,以確定定時/計數(shù)器的工作模式;(2)根據(jù)定時時間或計數(shù)要求,計算定時/計數(shù)器初值,直接將初值寫入寄存器的TH0、TL0或TH1、TL1;(3)根據(jù)需要,開放定時/計數(shù)器中斷;(4)對TCON寄存器中的TR0或TR1置位,啟動定時/計數(shù)器,置位以后,計

11、數(shù)器即按規(guī)定的工作模式和初值進行計數(shù)或開始定時。20初值計算: 設計數(shù)器的最大值(模)為M,則置入的初值X為:計數(shù)工作模式:X=M-計數(shù)值定時工作模式:由(M-X)T=定時值,得X=M-定時值/T T為計數(shù)周期,是單片機的機器周期。(模式0: M為213,模式1: M為216,模式2和3: M為28)21練習:設晶振頻率為練習:設晶振頻率為12MHZ12MHZ,那么其最長定時時間為多少?,那么其最長定時時間為多少? 若工作在模式若工作在模式0 0,則最大定時值為,則最大定時值為:2:213131s =8.192ms1s =8.192ms 若工作在模式若工作在模式1,1,則最大定時值為則最大定時

12、值為: 2: 216161s =65.536ms1s =65.536ms 若工作在模式若工作在模式2 2、3 3, ,則最大定時值為則最大定時值為: 2: 28 81s =1s =256256msms222.定時/計數(shù)器應用例 設系統(tǒng)振蕩頻率為12MHz,編程在P1.0上輸出一個周期為2ms的方波。 方波的周期用T0來確定,讓T0每隔1ms計數(shù)溢出1次(每1ms產(chǎn)生一次中斷),CPU響應中斷后,在中斷服務程序中對P1.0取反。即要使即要使P1.0P1.0每隔每隔1ms1ms取反一次。取反一次。23第一步: 確定工作方式 方式0 (13位)最長可定時 8.192ms; 方式1 (16位)最長可定

13、時 65.536ms; 方式2 (8位)最長可定時 256s。T0為方式0, M1M0=00 定時工作狀態(tài), C/T=0GATE=0,不受INT0控制,T1不用全部取“0”值。故TMOD=00H24第二步: 計算1ms定時的初值X 設初值為X,則有: (213-X) 1210-6 1/12=110-3可求得:X=8192-1000=7192X化為16進制,即X=1C18H=1,1100,000 1,1000B。所以,T0的初值為: TH0=E0H TL0=18HTH0 1 1 1 0 0 0 0 0TL0 1 1 0 0 0第三步: 程序初始化 25中斷服務程序中斷服務程序主程序主程序第四步:

14、程序設計本題還可以采用查詢方式編程ORG 0100HMAIN: MOV TMOD, #00H;設置T0為方式0MOVTL0,#18H;送計數(shù)初值 MOVTH0,#0E0H;送計數(shù)初值SETB TR0 ;啟動T0LOOP: JBC TF0,NEXT ;查詢定時時間到,轉(zhuǎn)NEXT,同時清TF0SJMPLOOP;重復循環(huán)NEXT: MOV TL0, #18H ;T0重置初值 MOV TH0, #0E0H ;T0重置初值 CPL P1.0 ;P1.0的狀態(tài)取反SJMPLOOP;重復循環(huán)END28查詢法更簡便,查詢法更簡便,但占用但占用CPUCPU例 將上一例題中的輸出方波周期改為1秒。 分析: 周期為

15、1s的方波要求500ms的定時。 (1) T0工作方式的確定因定時時間較長,采用哪一種工作方式?由各種工作方式的特性,可計算出: 方式0 (13位)最長可定時 8.192ms; 方式1 (16位)最長可定時 65.536ms; 方式2 (8位)最長可定時 256s。 所以采用定時器定時加軟件計數(shù)的方法來實現(xiàn)延長定時。選方式1,定時50ms,循環(huán)10次。50ms 10=500ms。 所以,TMOD=01H29以上各方式以上各方式都不滿足要求都不滿足要求 (2) 計算計數(shù)初值因為: (216-X)1210-6 1/12=5010-3所以: X=15536=3CB0H因此: TH0=3CH,TL0=

16、B0H (3) 10次計數(shù)的實現(xiàn)設計一個軟件計數(shù)器,初始值設為10。每隔50ms定時時間到,產(chǎn)生溢出標志TF0,程序查詢到TF0=1,則軟件計數(shù)器減1。這樣減到0時就獲得了500ms的定時。30(4) 程序設計 ORG 0100HMAIN: MOV TMOD,#01H ;設T0工作在方式1MOV TL0,#0B0H ;給T0設初值MOV TH0,#3CHMOVR7,#10;軟件計數(shù)器初值SETB TR0 ;啟動T0LOOP:JBCTF0, NEXT;查詢定時時間到,轉(zhuǎn)NEXT,同時清TF0SJMP LOOP NEXT: DJNZ R7,EXIT ;R7不等于0,則不對P1.0取反CPLP1.0

17、MOVR7,#10 ;重置軟件計數(shù)器初值EXIT:MOV TL0,#0B0H ;T0中斷子程序,重裝初值MOV TH0,#3CH SJMPLOOPEND 31以上的定時程序中,程序都要重置計時器初值,這樣從定時器溢出,發(fā)出溢出標志,到重裝完定時器初值,在開始計數(shù),之間總會有一段時間間隔,使定時時間增加了若干微秒,造成定時不夠精確。為了減小這種定時誤差,單片機中設置了工作方式2(自動重裝初值),則可避免上述因素,省去程序中重裝初值的指令,實現(xiàn)精確定時。但是工作方式2的缺點是只有8位計數(shù)器,定時時間受到很大限制。32例-利用T0方式2產(chǎn)生250us的定時,在P1.0引腳上輸出周期為500us的方波

18、(要求精確定時)。(設系統(tǒng)振蕩為12MHz)(1) 工作方式選擇實現(xiàn)精確定時,采用方式2。對于12MHz晶振,方式2的最大計數(shù)時間為28=256us, 所以可實現(xiàn)250us的精確定時。故,設置TMOD=02H。(2) 計算初值設初值為X: 則 (28-X) 1210-61/12=25010-6 X=28-250=6=06H(3) 程序設計采用查詢TF0的狀態(tài)來控制P1.0的輸出。33(4) 程序設計 ORG 0100HMAIN: MOVTMOD, #02H ;置T0方式2MOVTH0,#06H ;送計數(shù)初值MOVTL0,#06HSETB TR0 ;啟動T0LOOP: JBC TF0,NEXT

19、;查詢定時時間到,轉(zhuǎn)NEXT,同時清TF0SJMP LOOPNEXT:CPLP1.0;輸出取反SJMPLOOP;重復循環(huán)END34項目:音樂門鈴的設計與制作項目:音樂門鈴的設計與制作原理 音調(diào):音調(diào):通過控制定時器的定時時間產(chǎn)生不同頻率的方波,驅(qū)動通過控制定時器的定時時間產(chǎn)生不同頻率的方波,驅(qū)動喇叭發(fā)出不同音階的聲音。喇叭發(fā)出不同音階的聲音。 節(jié)拍:節(jié)拍:再利用延時來控制發(fā)音時間的長短,即可控制節(jié)拍。再利用延時來控制發(fā)音時間的長短,即可控制節(jié)拍。 把樂譜中的音符和相應的節(jié)拍變換成定時常數(shù)和延遲常數(shù),作把樂譜中的音符和相應的節(jié)拍變換成定時常數(shù)和延遲常數(shù),作為為數(shù)據(jù)表格數(shù)據(jù)表格存放在存貯器中。由存

20、放在存貯器中。由程序查表程序查表得到定時常數(shù)和延遲常數(shù),得到定時常數(shù)和延遲常數(shù),分別用以控制定時器產(chǎn)生方波的頻率和發(fā)出該頻率方波的持續(xù)時間。分別用以控制定時器產(chǎn)生方波的頻率和發(fā)出該頻率方波的持續(xù)時間。當延遲時間到時,再查下一個音符的定時常數(shù)和延遲常數(shù)。依次進當延遲時間到時,再查下一個音符的定時常數(shù)和延遲常數(shù)。依次進行下去。行下去。 用單片機上實現(xiàn)音樂演奏關(guān)鍵在于,根據(jù)樂譜制作出數(shù)據(jù)表格。 實現(xiàn)方法:實現(xiàn)方法: 用定時器以方式用定時器以方式1來產(chǎn)生各音符對應頻率的方波,由來產(chǎn)生各音符對應頻率的方波,由P1.0輸出輸出驅(qū)動喇叭。驅(qū)動喇叭。 節(jié)拍控制通過調(diào)用延時子程序節(jié)拍控制通過調(diào)用延時子程序D20

21、0(延時(延時200ms)次數(shù)來實)次數(shù)來實現(xiàn),以每拍現(xiàn),以每拍400ms節(jié)拍時間為例,一拍需循環(huán)調(diào)用節(jié)拍時間為例,一拍需循環(huán)調(diào)用D200延時延時子程序子程序2次,同理,半拍就需用次,同理,半拍就需用1次。次。設晶振頻率為設晶振頻率為12MHz,樂曲中的音符、頻率、定時常數(shù)的關(guān)系如下表:,樂曲中的音符、頻率、定時常數(shù)的關(guān)系如下表:C調(diào)音符/中音1234567頻率(Hz)523587659698784880988定時初值FC44FCACFD09FD34FD82FDC8FE06C調(diào)音符/低音1234567頻率(Hz)262294330349392440494定時初值F88CF95BFA15FA67

22、FB04FB90FC0CORG OOOOH ;主程序起始地址 LJMP START ;跳轉(zhuǎn)至主程序 ORG 000BH ;定時器T0中斷入口 LJMP EXT0 ; 跳轉(zhuǎn)至T0中斷子程序 START: MOV TMOD,#01H ;設置T0方式1 MOV IE,#10000010B ; 允許T0中斷 MOV DPTR,#TABLE ; 存表首地址 LOOP: CLR A ;清零 MOVC A,A+DPTR ;查表 MOV R1,A ;定時器高八位存入R1 INC DPTR ;指針加1CLR A ;清零MOVC A,+DPTR ;查表 MOV R0,A ;定時器低八位存入R0 ORL A,R1 ;進行或運算 JZ NEXT0 ;全零為休止符MOV A,R0 ANL A,R1 ;進行與運算 CJNE A,#0FFH,NEXT ;全1表示樂曲結(jié)束 LJMP START ;從頭開始循環(huán)演奏NEXT:MOV THO,R1 ;裝入高位定時值MOV TLO,R0 ;裝入低位定時值SETB TR0 ; 啟動定時器T0 LJMP NEXT1 ;跳轉(zhuǎn)到NEXT1處 NEXT0:CLR TR0 ;關(guān)閉定時器,停止發(fā)音 NEXT1:CLR A ;清零INC DPTR ;指針加一 MOVC

溫馨提示

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

評論

0/150

提交評論