單片機的定時器計數器_第1頁
單片機的定時器計數器_第2頁
單片機的定時器計數器_第3頁
單片機的定時器計數器_第4頁
單片機的定時器計數器_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

第7章單片機的定時器/計數器任務:懂得設置TMOD和TCON以及初值計算讀懂程序注意:不同工作方式下初值的處理單片機的定時器計數器共57頁,您現在瀏覽的是第1頁!7.1

定時器/計數器概述

實現定時功能,主要采用下面三種方法:軟件定時:軟件定時不占用硬件資源,但占用了CPU時間,降低了CPU的利用率。采用硬件定時:完全由硬件實現,不占CPU,但定時值與定時范圍不能由軟件進行控制和修改,即不可編程。采用可編程芯片定時:通過對系統(tǒng)時鐘脈沖的計數實現,計數值通過程序設定,此種定時功能強,使用靈活。單片機的定時器計數器共57頁,您現在瀏覽的是第2頁!7.1.1定時/計數器的結構實質:加1計數器(16位),由高8位(TH)和低8位(TL)兩個寄存器組成。TMOD是定時/計數器的工作方式寄存器,確定工作方式和功能;TCON是控制寄存器,控制T0、T1的啟動和停止及設置溢出標志。

單片機的定時器計數器共57頁,您現在瀏覽的是第3頁!TMOD、TCON與T0、T1的結構框圖單片機的定時器計數器共57頁,您現在瀏覽的是第4頁!設置為定時器模式時,計數值N=T/Tcy注:加1計數器是對內部機器周期計數(1個機器周期等于12個振蕩周期,即計數頻率為晶振頻率的1/12)。設置為計數器模式時,外部事件計數脈沖由T0或T1引腳輸入到計數器。注:由于檢測一個從1到0的下降沿需要2個機器周期,因此要求被采樣的電平至少要維持一個機器周期。例如:當晶振頻率為12MHz時,計數脈沖的周期要大于2s。

單片機的定時器計數器共57頁,您現在瀏覽的是第5頁!注意:此SFR只能對其進行字節(jié)操作,不能進行位操作單片機的定時器計數器共57頁,您現在瀏覽的是第6頁!

二、控制寄存器TCONTCON的低4位用于控制外部中斷,已在前面介紹。TCON的高4位用于控制定時/計數器的啟動和中斷申請。其格式如下:TF1(TCON.7):T1溢出中斷請求標志位。T1計數溢出時由硬件自動置TF1為1。CPU響應中斷后TF1由硬件自動清0??梢杂密浖?或清0,同硬件置1或清0的效果一樣。TR1(TCON.6):T1運行控制位。TR1置1時,T1開始工作;TR1置0時,T1停止工作。TR1由軟件置1或清0。TF0(TCON.5):T0溢出中斷請求標志位,其功能與TF1類同。TR0(TCON.4):T0運行控制位,其功能與TR1類同。單片機的定時器計數器共57頁,您現在瀏覽的是第7頁!單片機的定時器計數器共57頁,您現在瀏覽的是第8頁!注意:定時和計數應用在方式0下輸入脈沖的計數值范圍是:0-8192(213)定時器模式時:定時時間T為(213-計數初值)×機器周期結論一:最小定時單位為一個機器周期,最大定時單位為213×機器周期思考:已知一單片機晶體振蕩器為6MHz,則最大和最小定時單位為多少?單片機的定時器計數器共57頁,您現在瀏覽的是第9頁!定時/計數器應用舉例初始化程序應完成如下工作:對TMOD賦值,以確定T0和T1的工作方式;計算初值,并將其寫入TH0、TL0或TH1、TL1;中斷方式時,則對IE賦值,開放中斷;使TR0或TR1置位,啟動定時/計數器定時或計數。單片機的定時器計數器共57頁,您現在瀏覽的是第10頁!2、對TMOD附值GATE=0,C/T=0(定時)M1M0=00(方式0)

TMOD=00H單片機的定時器計數器共57頁,您現在瀏覽的是第11頁!

二、方式1方式1的計數位數是16位,由TL0作為低8位、TH0作為高8位,組成了16位加1計數器。計數個數與計數初值的關系為:

單片機的定時器計數器共57頁,您現在瀏覽的是第12頁!

例利用定時/計數器T0的方式1,產生10ms的定時,并使P1.0引腳上輸出周期為20ms的方波,采用中斷方式,設系統(tǒng)時鐘頻率為12MHz。分析:1、當為定時方式時(C/T=0),T0對機器周期進行計數,其定時時間為:

T=(216-X)×機器周期則:計數值N=T/機器周期=213-X所以X=216-N=65536-N2、采用方式1時,M1M0=01單片機的定時器計數器共57頁,您現在瀏覽的是第13頁!

ORG0000HLJMPMAIN;跳轉到主程序

ORG000BH;T0的中斷入口地址

LJMPDVT0;轉向中斷服務程序

ORG0100HMAIN:MOVTMOD,#01H;置T0工作于方式1

MOVTH0,#0D8H;裝入計數初值

MOVTL0,#0F0HSETBET0;T0開中斷

SETBEA;CPU開中斷

SETBTR0;啟動T0

SJMP$;等待中斷

DVT0:CPLP1.0;P1.0取反輸出

MOVTH0,#0D8H;重新裝入計數值

MOVTL0,#0F0HRETI;中斷返回

END單片機的定時器計數器共57頁,您現在瀏覽的是第14頁!單片機的定時器計數器共57頁,您現在瀏覽的是第15頁!單片機的定時器計數器共57頁,您現在瀏覽的是第16頁!源程序如下:

MOVTL1,

#06H;給TL1置初值

MOVTH1,#F8H;給TH1置初值

SETBTR1;啟動T1LP1:JBCTF1,LP2;查詢計數溢出否

AJMPLP1

LP2:MOVTL1,06H;重裝初值

MOVTH1,F8H

CPLP1。1;輸出取反

AJMPLP1;重復循環(huán)單片機的定時器計數器共57頁,您現在瀏覽的是第17頁!源程序如下:

MOVTMOD,#60H;設置T1為方式2

MOVTL1,#9CH;置初值

MOVTH1,#9CH

SETBTR1;啟動T1DEL:JBCTF1,REP;查詢計數溢出

AJMPDEL

REP:CPLP1。0;輸出取反

AJMPDEL

單片機的定時器計數器共57頁,您現在瀏覽的是第18頁!BEGIN:MOVTMOD,#09H;T0工作于方式1,GATE置1

MOVTL0,#00H

MOVTH0;#00H

WAIT1:JBP3。2,WAIT1;等待INT0變低

SETBTR0;啟動T0WAIT2:JNBP3。2,WAIT2;等待正脈沖到WAIT3:JBP3。2,WAIT3;等待INT0變低

CLRTR0;停止T0計數

MOVR0,#DISBUF;顯示緩沖區(qū)首地址送R0

MOVA,TL0;機器周期的存放格式為低位占低地址,高位占高地址,連續(xù)4個顯示緩沖單元

XCHDA,@R0

INCR0

SWAPA

XCHDA,@R0

源程序如下:單片機的定時器計數器共57頁,您現在瀏覽的是第19頁!7.3定時/計數器及中斷系統(tǒng)綜合應用[例]設MCS-51單片機系統(tǒng)時鐘頻率ФCLK為6MHZ,請編出利用定時/計數器T0在P1.0引腳上產生周期為2秒,占空比為50%的方波信號的程序(1)主程序任務:1)T0工作方式的設定:選擇方式1(16位方式,最大定時131ms) 2)定時常數的設定(定時0.1s): TC=216-100ms/2μs=15536=3CB0H即:TH0應裝3CH,TL0應裝B0H。單片機的定時器計數器共57頁,您現在瀏覽的是第20頁!主程序如下:MAIN:MOVTMOD,#01H;設定T0為方式1

MOVTH0,#3CH;裝入定時常數高8位

MOVTL0,#0B0H;裝入定時常數低8位

MOVIE,#82H ;開放T0中斷

SETBTR0 ;啟動T0 MOVR7,#0AH ;設置軟件計數器

SJMP$單片機的定時器計數器共57頁,您現在瀏覽的是第21頁!完整程序如下:

ORG0000HAJMPMAIN ORG000BH AJMPTOINT ORG0030H MAIN:MOV TMOD,#01H MOVTH0,#3CH MOV TL0,#0B0H MOVIE,#82H SETB TR0 MOV R7,#0AH單片機的定時器計數器共57頁,您現在瀏覽的是第22頁!思考題及習題1、80C51有幾個中斷源?各中斷標志是如何產生的?又是如何復位的?CPU響應各中斷時,其中斷入口地址是多少?2、某系統(tǒng)有三個外部中斷源1、2、3,當某一中斷源變低電平時便要求CPU處理,它們的優(yōu)先處理次序由高到低為3、2、1,處理程序的入口地址分別為2000H、2100H、2200H。試編寫主程序及中斷服務程序(轉至相應的入口即可)。3、外部中斷源有電平觸發(fā)和邊沿觸發(fā)兩種觸發(fā)方式,這兩種觸發(fā)方式所產生的中斷過程有何不同?怎樣設定?4、定時/計數器工作于定時和計數方式時有何異同點?5、定時/計數器的4種工作方式各有何特點?6、要求定時/計數器的運行控制完全由TR1、TR0確定和完全由、高低電平控制時,其初始化編程應作何處理?單片機的定時器計數器共57頁,您現在瀏覽的是第23頁!KeiluVision2是目前使用廣泛的單片機開發(fā)軟件,它集成了源程序編輯和程序調試于一體,支持匯編、C、PL/M語言。點擊桌面快捷圖標,可以直接進入主界面:KeiluVision2的使用單片機的定時器計數器共57頁,您現在瀏覽的是第24頁!在Keil系統(tǒng)中,每做個獨立的程序,都視為項目(或者叫工程)。首先從菜單的“項目”中“新項目...”,建立我們將要做的工程項目:

單片機的定時器計數器共57頁,您現在瀏覽的是第25頁!為項目選定一個目標設備(如ATMEL89C51)單片機的定時器計數器共57頁,您現在瀏覽的是第26頁!“文件”/“保存”,擴展名必須是.ASM單片機的定時器計數器共57頁,您現在瀏覽的是第27頁!單片機的定時器計數器共57頁,您現在瀏覽的是第28頁!在相應選項卡進行設置,如“調試”選項卡,可設置軟件/硬件仿真方式。硬件方式還需設置串口和波特率(一般為9600)單片機的定時器計數器共57頁,您現在瀏覽的是第29頁!“步進”運行方式選中“Port0”進行模擬“調試”單片機的定時器計數器共57頁,您現在瀏覽的是第30頁!7.1.2定時/計數器的工作原理輸入的計數脈沖有兩個來源:

定時功能

系統(tǒng)的時鐘振蕩器輸出脈沖經12分頻后送來

計數功能

T0或T1引腳輸入的外部脈沖源

工作原理:每來一個脈沖計數器加1,當加到計數器為全1時,再輸入一個脈沖就使計數器回零,且計數器的溢出使TCON中TF0或TF1置1,向CPU發(fā)出中斷請求(定時/計數器中斷允許時)。由溢出時計數器的值減去計數初值才是加1計數器的計數值。振蕩器÷12加1計數器TFxT0(T1)中斷C/T=0C/T=1控制信號如果定時/計數器工作于定時模式,則表示定時時間已到;如果工作于計數模式,則表示計數值已滿。單片機的定時器計數器共57頁,您現在瀏覽的是第31頁!

7.2定時/計數器的控制

8051單片機定時/計數器的工作由兩個特殊功能寄存器控制。TMOD用于設置其工作方式;TCON用于控制其啟動和中斷申請。一、工作方式寄存器TMOD

工作方式寄存器TMOD用于設置定時/計數器的工作方式,低四位用于T0,高四位用于T1。其格式如下:單片機的定時器計數器共57頁,您現在瀏覽的是第32頁!GATE:門控位。GATE=0時,只要用軟件使TCON中的TR0或TR1置1啟動定時/計數器工作;GATE=1時,外部中斷請求信號啟動定時器。:定時/計數模式選擇位。

=0為定時模式;=1為計數模式。M1M0:工作方式設置位。單片機的定時器計數器共57頁,您現在瀏覽的是第33頁!

7.3定時/計數器的工作方式

一、方式0

方式0為13位計數,由TL0的低5位(高3位未用)和TH0的8位組成。TL0的低5位溢出時向TH0進位,TH0溢出時,置位TCON中的TF0標志,向CPU發(fā)出中斷請求。單片機的定時器計數器共57頁,您現在瀏覽的是第34頁!門控位GATE具有特殊的作用:當GATE=0時,此時僅由TR0控制與門的開啟,與門輸出1時,控制開關接通,計數開始;當GATE=1時,由外中斷引腳信號控制或門的輸出,此時控制與門的開啟由外中斷引腳信號和TR0共同控制。此時當TR0=1時,外中斷引腳信號引腳的高電平啟動計數,外中斷引腳信號引腳的低電平停止計數。這種方式常用來測量外中斷引腳上正脈沖的寬度。

單片機的定時器計數器共57頁,您現在瀏覽的是第35頁!結論二:定時時間T為(213-計數初值)×機器周期而計數值N=T/Tcy(Tcy即機器周期)所以計數初值計算的公式為:X=213-N=8192-N單片機的定時器計數器共57頁,您現在瀏覽的是第36頁!例7-1應用定時器T0產生1ms定時(方式0),并使P1.0輸出周期為2ms的方波,已知晶振頻率為6MHz.請設計程序解:1、當為定時方式時(C/T=0),T0對機器周期進行計數,其定時時間為:

T=(213-X)×機器周期則:計數值N=T/機器周期=213-X所以X=213-N=8192-N=8192-T/機器周期=8192-1×10-3/2×10-6=7692X對應的二進制數為11110000

01100

TH08位TL0低五位TH0=0F0HTL0=0CH單片機的定時器計數器共57頁,您現在瀏覽的是第37頁!ORG2000H

MOVTMOD,#00H;寫入方式控制字

MOVTL0,#0CH;計數初值寫入MOVTH0,#0F0H

SETBTR0;啟動T0LOOP:JBCTF0,PE;TF0=1溢出跳轉AJMPLOOP;PE:MOVTL0,#0CH;MOVTH0,#0F0H

CPLP1.0;思考?

AJMPLOOPEND單片機的定時器計數器共57頁,您現在瀏覽的是第38頁!單片機的定時器計數器共57頁,您現在瀏覽的是第39頁!解:1、計算計數初值X:由于晶振為12MHz,所以機器周期Tcy為1s。所以:N=T/Tcy=10×10-3/1×10-6=10000X=65536-10000=55536=D8F0H即應將D8H送入TH0中,F0H送入TL0中

2、求T0的方式控制字TMOD:

M1M0=01,GATE=0,C/T=0,可取方式控制字為01H;單片機的定時器計數器共57頁,您現在瀏覽的是第40頁!

三、方式2方式2為自動重裝初值的8位計數方式。

工作方式2特別適合于用作較精確的脈沖信號發(fā)生器。

計數個數與計數初值的關系為:

單片機的定時器計數器共57頁,您現在瀏覽的是第41頁!

四、方式3方式3只適用于定時/計數器T0,定時器T1處于方式3時相當于TR1=0,停止計數。

工作方式3將T0分成為兩個獨立的8位計數器TL0和TH0

單片機的定時器計數器共57頁,您現在瀏覽的是第42頁!方式0、方式1的應用例:選擇T1方式0用于定時,在P1.1輸出周期為1ms的方波,晶振fosc=6MHZ。分析:1、根據題意,只要使P1.1每隔500μs取反一次即可得到1ms方波,因而T1的定時時間為500μs2、將T1設為定時方式0:GATE=0,C/T=0,M1M0=00;T0不用可為任意,只要不使其進入方式3,一般取0即可。故TMOD=00H。系統(tǒng)復位后TMOD為0,所以不必對TMOD置初值。3、計算500μs定時T1的初值:機器周期Tcy=12/fosc=12/6×106=2μs設初值為X則:(213-X)×2×10-6s=500×10-6sX=7942D=1111100000110B=1F06H因為在作13位計數器用時,TL1高3位未用,應寫X的低5位裝入TL1的低5位,所以TL1=06H;X的高8位應裝入TH1,所以TH1=F8H。單片機的定時器計數器共57頁,您現在瀏覽的是第43頁!方式2的應用例:用定時器1方式2計數,要求每計滿100次,將P1.0取反。根據題意,外部計數信號由T1(P3.5)引腳輸入,每跳變一次計數器加1,由程序查詢TF1。方式2有自動重裝初值的功能,初始化后不必再置初值。初值X=28-100=156D=9CH

TH1=TL1=9CHTMOD=60H單片機的定時器計數器共57頁,您現在瀏覽的是第44頁!門控位的應用圖

外部正脈沖寬度測量例:利用T0門控位測試INT0引腳上出現的正脈沖的寬度,并以機器周期數的形式顯示在顯示器上。根據要求可這樣設計程序:將T0設定為方式1,GATE設為1,置TR0為1。一旦INT0(P3。2)引腳上出現高電平即開始計數,直至出現低電平,停止計數,然后讀取T0的計數值并顯示。測試過程如下:INT0(P3.2)09H→(TMOD)1→TR0T0從0開始計數0→TR0停止T0計數讀出T0值單片機的定時器計數器共57頁,您現在瀏覽的是第45頁!

INCR0

MOVA,TH0

XCHDA,@R0

INCR0

SWAPA

XCHDA,@R0DIS:LCALLDISUP;長調用顯示子程序

AJMPDIS;重復顯示機器周期數由于定時方式1的16位計數長度有限,被測脈沖高電平寬度只能小于65536個機器周期。單片機的定時器計數器共57頁,您現在瀏覽的是第46頁!3)中斷管理:允許T0中斷,開放總中斷即:IE應裝10000010B。4)啟動定時器T0:SETB TR05)設置軟件計數器初值:(如使用R7)即R7應裝0AH6)動態(tài)停機: SJMP $單片機的定時器計數器共57頁,您現在瀏覽的是第47頁!(2)中斷服務程序 任務: 1)恢復T0常數; 2)軟件計數器減1; 3)判斷軟件計數器是否為0。為0時,改變P1.0狀態(tài),并恢復軟件計數器初值;不為0時中斷返回。程序如下: TOINT: MOV TL0,#0B0H ;恢復定時常數

MOV TH0,#3CH ; DJNZ R7,NEXT CPL P1.0 MOV R7,#0AH NEXT: RETI單片機的定時器計數器共57頁,您現在瀏覽的是第48頁! SJMP $TOINT: MOV TL0,#0B0H MOV TH0,#3CH DJNZ R7,NEXT

溫馨提示

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

評論

0/150

提交評論