單片機(jī)c語言版定時器計數(shù)器ppt課件_第1頁
單片機(jī)c語言版定時器計數(shù)器ppt課件_第2頁
單片機(jī)c語言版定時器計數(shù)器ppt課件_第3頁
單片機(jī)c語言版定時器計數(shù)器ppt課件_第4頁
單片機(jī)c語言版定時器計數(shù)器ppt課件_第5頁
已閱讀5頁,還剩42頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

第6章AT89S51單片機(jī)的定時器/計數(shù)器,內(nèi)容概要:介紹AT89S51單片機(jī)片內(nèi)定時器/計數(shù)器的結(jié)構(gòu)與功能,兩種工作模式和4種工作方式,以及與其相關(guān)的兩個特殊功能寄存器TMOD和TCON各位的定義及其編程,最后介紹定時器/計數(shù)器的C51編程及應(yīng)用實(shí)例。,1,6.1定時器/計數(shù)器的結(jié)構(gòu)定時/計數(shù)器的實(shí)質(zhì)是加1計數(shù)器(16位),由高8位THX(X=0或1)和低8位TLX兩個寄存器組成。TMOD是定時/計數(shù)器的工作方式寄存器,確定工作方式和功能;TCON是控制寄存器,控制T0、T1的啟動和停止及設(shè)置溢出標(biāo)志。,外部脈沖,2,圖6-1AT89S51單片機(jī)的定時器/計數(shù)器結(jié)構(gòu)框圖,3,6.1.1工作方式控制寄存器TMODAT89S51定時器工作方式寄存器TMOD用于選擇工作模式和工作方式,字節(jié)地址為89H,不能位尋址。8位分為兩組,高4位控制T1,低4位控制T0。(1)GATE門控位GATE=0時,僅由運(yùn)行控制位TRx(x=0,1)來控制定時器運(yùn)行GATE=1時,用外中斷引腳INT0*(或INT1*)上的電平與運(yùn)行控制位TRx共同控制定時器運(yùn)行。,圖6-2寄存器TMOD格式,4,(2)M1、M0工作方式選擇位M1、M0的4種編碼,對應(yīng)于4種工作方式的選擇。(3)C/T*計數(shù)器模式和定時器模式選擇位C/T*=0,為定時器工作模式,對單片機(jī)的晶體振蕩器12分頻后的脈沖進(jìn)行計數(shù)。C/T*=1,為計數(shù)器工作模式,計數(shù)器對外部輸入引腳T0(P3.4)或T1(P3.5)的外部脈沖(負(fù)跳變)計數(shù)。,5,6.1.2定時器/計數(shù)器控制寄存器TCONTCON字節(jié)地址為88H,可位尋址,位地址為88H8FH。(1)TF1、TF0計數(shù)溢出標(biāo)志位。當(dāng)計數(shù)器計數(shù)溢出時,該位置“1”。使用查詢方式時,應(yīng)注意查詢有效后,使用軟件及時將該位清“0”。使用中斷方式時,中斷請求標(biāo)志位在進(jìn)入中斷服務(wù)程序后由硬件自動清“0”。(2)TR1、TR0計數(shù)運(yùn)行控制位。TR1位(或TR0位)=1,啟動定時器工作。TR1位(或TR0位)=0,停止定時器工作。該位可由軟件置“1”或清“0”。,圖6-3TCON格式,6,6.2定時器/計數(shù)器的4種工作方式6.2.1方式0M1M0=00方式0為13位計數(shù),由TL0的低5位(高3位未用)和TH0的8位組成。TL0的低5位溢出時向TH0進(jìn)位,TH0溢出時,置位TCON中的TF0標(biāo)志,向CPU發(fā)出中斷請求。,7,圖6-4定時器/計數(shù)器方式0邏輯結(jié)構(gòu)框圖,C/T*位決定定時器/計數(shù)器的兩種工作模式(1)C/T*=0,T1(或T0)為定時器工作模式,把時鐘振蕩器12分頻后的脈沖作為計數(shù)信號。(2)C/T*=1,T1(或T0)為計數(shù)器工作模式,計數(shù)脈沖為P3.4(或P3.5)引腳上的外部輸入脈沖,當(dāng)引腳上發(fā)生負(fù)跳變時,計數(shù)器加1。,8,GATE位決定定時器的運(yùn)行控制取決于TRx一個條件,還是取決于TRx和INTX*(x=0,1)引腳狀態(tài)這兩個條件。(1)GATE=0時,僅由TR0控制與門的開啟。與門輸出1時,控制開關(guān)接通,計數(shù)開始;(2)GATE=1時,由外中斷引腳信號控制或門的輸出,此時控制與門的開啟由外中斷引腳信號和TR0共同控制。當(dāng)TR0=1時,外中斷引腳信號引腳的高電平啟動計數(shù),外中斷引腳信號引腳的低電平停止計數(shù)。這種方式常用來測量外中斷引腳上正脈沖的寬度。,定時器模式時有:Nt/Tcy,計數(shù)初值計算的公式為:,9,6.2.2方式1M1M0=01方式1的計數(shù)位數(shù)是16位,由TLX作為低8位、THX作為高8位,組成了16位加1計數(shù)器。,計數(shù)個數(shù)與計數(shù)初值的關(guān)系為:,10,6.2.3方式2M1M0=10方式2為自動重裝初值的8位計數(shù)方式。,工作方式2特別適合于用作較精確的脈沖信號發(fā)生器。,計數(shù)個數(shù)與計數(shù)初值的關(guān)系為:,工作過程,11,T0分成兩個8位定時/計數(shù)器TL0和TH0;TL0:既可計數(shù)也可定時,是一個8位定時/計數(shù)器。占用了T0所有控制位:C/T,TR0,GATE,TF0和INT0、T0引腳;TH0:只能作為定時器,因?yàn)門0已被TL0占用,TH0用T1的控制位:TR1、TF1;,6.2.4方式3M1M0=11,12,13,T0在方式3時T1的工作模式T1只能工作在0、1、2方式,作為串行口的波特率發(fā)生器使用。因?yàn)門1的運(yùn)行控制位TR1及計數(shù)溢出標(biāo)志位TF1已被定時/計數(shù)器T0借用。當(dāng)作為波特率發(fā)生器使用時,只需要設(shè)置好工作方式,便可自動運(yùn)行。如要停止工作,只需送入一個把T1設(shè)置為方式3的方式控制字。因?yàn)槎〞r/計數(shù)器T1不能在方式3下工作,因?yàn)門1處于方式3時相當(dāng)于TR1=0,停止計數(shù)。,13,6.3對外部輸入的計數(shù)信號的要求當(dāng)定時器/計數(shù)器工作在計數(shù)器模式時,計數(shù)脈沖來自外部輸入引腳T0或T1。當(dāng)輸入信號產(chǎn)生由1至0的跳變(即負(fù)跳變)時,計數(shù)器值增1。由于確認(rèn)一次負(fù)跳變花2個機(jī)器周期,即24個振蕩周期,因此外部輸入的計數(shù)脈沖的最高頻率為系統(tǒng)振蕩器頻率的1/24。,圖6-12對外部計數(shù)輸入信號的要求,例如,選用6MHz頻率的晶體,允許輸入的脈沖頻率最高為250kHz。如果選用12MHz頻率的晶體,則可輸入最高頻率為500kHz的外部脈沖。,14,15,6.3對外部輸入的計數(shù)信號的要求當(dāng)定時器/計數(shù)器工作在計數(shù)器模式時,計數(shù)脈沖來自外部輸入引腳T0或T1。當(dāng)輸入信號產(chǎn)生由1至0的跳變(即負(fù)跳變)時,計數(shù)器值增1。由于確認(rèn)一次負(fù)跳變花2個機(jī)器周期,即24個振蕩周期,因此外部輸入計數(shù)脈沖的最高頻率為系統(tǒng)振蕩器頻率的1/24。,圖6-12對外部計數(shù)輸入信號的要求,例如,選用6MHz頻率的晶體,允許輸入的脈沖頻率最高為250kHz。如果選用12MHz頻率的晶體,則可輸入最高頻率為500kHz的外部脈沖。,15,時間常數(shù)的計算時間常數(shù):定時器/計數(shù)器T0或T1的初始計數(shù)值,在T0或T1被啟動后,每個機(jī)器周期使計數(shù)器中的計數(shù)值加1,計數(shù)器產(chǎn)生溢出后。定時時間:計數(shù)器溢出時間,時間常數(shù)越大,定時時間就越短;時間常數(shù)越小,定時時間就越長。時鐘的頻率越高,定時時間越短;時鐘的頻率越低,定時時間越長。,16,設(shè)系統(tǒng)時鐘的頻率為fosc,計數(shù)器的初始值為N,定時器工作于方式1,則定時時間:T=(216-N)12/fosc(1)如果定時器工作于方式2或方式3,定時時間為:T=(28-N)12/fosc(2),當(dāng)初始值N=0時,如果fosc=12MHZ,最大定時時間為:方式1為:Tmax=21612/fosc=65536us=65.536ms方式2、方式3為:Tmax=2812/fosc=256us,根據(jù)定時時間T,及公式(1)、(2)分別可以求出初值N為:方式1:N=216-Tfosc/12(3)方式2、方式3:N=28-Tfosc/12(4)如果fosc=12MHZ,以上公式可簡化為方式1:N=216-T方式2、方式3:N=28-T,17,例如:系統(tǒng)的時鐘頻率是12MHz,在方式1下,如果希望定時器/計數(shù)器T0的定時時間T為10ms,則初值N=216-T=65536-10000=55536,如何將55536給兩個8位寄存器TH0、TL0賦值呢?可將十進(jìn)制數(shù)55536轉(zhuǎn)換成四位十六進(jìn)制數(shù),將高2位送TH0,低2位送TL0。,更簡單的方法是:對于16位計數(shù)器來講,216等效為0,對于8位計數(shù)器,28等效為0,這樣公式(3)、(4)可簡化為N=-T,直接用下面兩條語句就可以完成計數(shù)器初值的設(shè)置:TH0=-10000/256;/取-N的高8位TL0=-10000%256;/取-N的低8位,例如:設(shè)系統(tǒng)的時鐘頻率是12MHz,定時器工作于方式2,定時時間200us。根據(jù)前面分析,N=-T=-200,可直接用以下語句實(shí)現(xiàn):TH0=-200;TL0=-200;,18,MCS-51單片機(jī)的定時器是可編程的,但在進(jìn)行定時或計數(shù)之前要對程序進(jìn)行初始化,具體步驟如下:(1)確定工作方式字:對TMOD寄存器正確賦值;(2)確定定時初值:計算初值,直接將初值寫入寄存器的TH0、TL0或TH1、TL1;初值計算:設(shè)計數(shù)器的最大值為M,則置入的初值X為:計數(shù)方式:X=M-計數(shù)值定時方式:由(M-X)T=定時值,得X=M-定時值/TT為計數(shù)周期,是單片機(jī)的機(jī)器周期。(模式0-M為213,模式1-M為216,模式2和3-M為28)(3)根據(jù)需要,對IE置初值,開放定時器中斷;(4)啟動定時/計數(shù)器,對TCON寄存器中的TR0或TR1置位,置位以后,計數(shù)器即按規(guī)定的工作模式和初值進(jìn)行計數(shù)或開始定時。,6.4定時器/計數(shù)器的編程和應(yīng)用,19,6.4.1P1口外接的8只LED每0.5s閃亮一次?!纠?-1】在AT89S51單片機(jī)的P1口上接有8只LED(電路見圖4-7)。下面采用定時器T0的方式1的定時中斷方式,使P1口外接的8只LED每0.5s閃亮一次。(1)設(shè)置TMOD寄存器方式1;計時工作模式;僅由TR0來控制;T1不使用。TMOD寄存器應(yīng)初始化為0 x01=00000001B,20,(2)計算T0計數(shù)初值設(shè)定時時間5ms(即5000s),設(shè)定時器T0的計數(shù)初值為X,假設(shè)晶振的頻率為11.0592MHz,則定時時間為:定時時間=(216X)12/晶振頻率則5000=(216X)12/11.0592得:X=60928,轉(zhuǎn)換成16進(jìn)制后為:0 xee00,其中0 xee裝入TH0,0 x00裝入TL0。(3)設(shè)置IE寄存器本例由于采用定時器T0中斷,因此需將IE寄存器中的EA、ET0位置1。(4)啟動和停止定時器T0將定時器控制寄存器TCON中的TR0=1,則啟動定時器T0;TR0=0,則停止定時器T0定時。,21,#includeChari=100;/*給變量i賦初值,定時0.5S,每次定時中斷5MS,需要中斷100次*/voidmain()TMOD=0 x01;/*設(shè)置定時器T0為方式1*/TH0=0 xee;/*向TH0寫入初值的高8位*/TL0=0 x00;/*向TL0寫入初值的低8位*/P1=0 x00;/*P1口8只LED點(diǎn)亮*/EA=1;/*總中斷允許*/ET0=1;/*定時器T0中斷允許*/TR0=1;/*啟動定時器T0*/while(1);/*無窮循環(huán),等待定時中斷*/,22,/*以下為定時器T0的中斷服務(wù)程序*/voidT0_int(void)interrupt1TH0=0 xee;/*給T0裝入16位初值,計4608個數(shù)后,T0溢出TL0=0 x00;i-;/*循環(huán)次數(shù)減1*/if(i0;i-)for(j=0;j125;j+);/*空函數(shù)*/voidmain()/*主函數(shù)*/TMOD=0 x50;/*設(shè)置定時器T1為方式1計數(shù)*/TH0=0 xff;/*向TH0寫入初值的高8位*/,30,TL0=0 xfc;/*向TL0寫入初值低8位*/EA=1;/*總中斷允許*/ET1=1;/*T1中斷允許*/TR1=1;/*啟動T1*/while(1);/*無窮循環(huán),等待定時中斷*/*以下為定時器T1的中斷服務(wù)程序*/voidT1_int(void)interrupt3for(;)/*無限循環(huán)*/P1=0 xff;/*8位LED全滅*/Delay(500);/*延時500ms*/P1=0;/*8位LED全亮*/Delay(500);/*延時500ms*/,31,案例4用定時器來控制數(shù)碼管的動態(tài)顯示。,用定時器控制數(shù)碼管動態(tài)顯示的方法:設(shè)定時器的定時時間為1ms,每次產(chǎn)生溢出中斷,就根據(jù)位選變量bsel(主程序中將其初值設(shè)置為0 xfe)送位選口,點(diǎn)亮一位數(shù)碼管,并將bsel左移一位,為下一位的顯示做好準(zhǔn)備,4次定時中斷分別完成4位數(shù)碼管的顯示,之后將bsel的值再次初始化為0 xfe,準(zhǔn)備下一輪顯示。因此這種顯示方式由定時中斷自動完成,無需在主程序中調(diào)用,32,主程序ucharbsel,n;voidmain(void)n=0;bsel=0 xfe;/首先顯示數(shù)碼管的最低位TMOD=0 x01;/T0工作于定時方式2TH0=-1000/256;/T0的定時時間為1000usTL0=-1000%256;ET0=1;/允許T0中斷TR0=1;/啟動定時EA=1;/開中斷while(1);,ucharcodesegtab=0 xc0,0 xf9,0 xa4,0 xb0,0 x99,0 x92,0 x82,0 xf8,0 x80,0 x90,0 x88,0 x83,0 xc6,0 xa1,0 x86,0 x8e,0 x89,0 x8c;uchardbuf4=4,3,2,1;,字符0F的字形碼表,顯示緩存,存放要顯示字符,33,voidtime0(void)interrupt1TH0=-1000/256;TL0=-1000%256;P0=0 xff;P2=bsel;P0=segtabdbufn;bsel=_crol_(bsel,1);n+;if(n=4)n=0;bsel=0 xfe;,重新裝入時間常數(shù),定時器T0中斷服務(wù)程序,熄滅數(shù)碼管,防止上一位字符在當(dāng)前位置顯示出來。,點(diǎn)亮當(dāng)前位,根據(jù)顯示緩存查字段碼,準(zhǔn)備顯示下一位,指向下一位要顯示的數(shù)據(jù),如果四位已顯示完,重新從最低位開始,34,6.4.3擴(kuò)展一個外部中斷源方式2可自動重新裝載初值。此方式可省去用戶程序中重新裝初值的指令。當(dāng)某個定時器/計數(shù)器不使用時,可為AT89S51擴(kuò)展一個負(fù)跳沿觸發(fā)的外部中斷源。基本思想:把定時器溢出中斷做成外部中斷,然后把計數(shù)輸入信號接到定時器的相應(yīng)引腳上T0腳(或T1腳),并把定時器被設(shè)置為方式2(自動裝入常數(shù)方式)計數(shù)工作模式,計數(shù)器TH0、TL0初值均為0FFH,并允許T0中斷,總中斷開放。當(dāng)檢測到T0腳(或T1腳)引腳電平發(fā)生負(fù)跳變時,計數(shù)器TF0(或TF1)溢出,這時將產(chǎn)生一個中斷請求?!纠?-3】擴(kuò)展一個負(fù)跳沿觸發(fā)的外部中斷源,把定時器T0計數(shù)輸入引腳作為外部中斷請求信號的輸入端。,35,#includevoidmain()TMOD=0 x06;/*設(shè)置定時器T0為方式2計數(shù)*/TH0=0 xff;/*給T0裝入初值*/TL0=0 xff;/*給T0裝入初值*/ET0=1;/*允許T0中斷*/EA=1;/*總中斷開*/TF0=0;/*T0中斷溢出標(biāo)志位清0*/TR0=1/*接通T0計數(shù)*/while(1)/*無限循環(huán)等待*/*以下為定時器T0的中斷服務(wù)程序*/voidT0_int(void)interrupt1using0/*外中斷處理部分*/,36,6.4.4P1.0上產(chǎn)生周期為2ms的方波【例6-4】系統(tǒng)時鐘為12MHz,編程實(shí)現(xiàn)從P1.0引腳上輸出一個周期為2ms的方波,如圖6-14所示。基本思想:要在P1.0上產(chǎn)生周期為2ms的方波,定時器應(yīng)產(chǎn)生1ms的周期性的定時,定時對P1.0求反。選擇定時器T0,方式1定時,采用中斷方式,GATE不起作用。,圖6-14定時器控制P1.0輸出一個周期為2ms的方波,37,計算T0的初值計算:設(shè)T0的初值為X,則(216X)1106=1103=65536X=1000則初值為:655361000=64536,因此TH0=(655361000)/256,TL0=(655361000)%256。參考程序如下:,38,#includesbitP1_0=P10;voidmain(void)TMOD=0 x01;/*設(shè)置定時器T0為方式2計數(shù)*/P1_0=0;TH0=(655361000)/256;/*給T0裝入初值*/TL0=(655361000)%256;/*給T0裝入初值*/ET0=1;/*允許T0中斷*/EA=1;/*總中斷開*/TR0=1/*接通T0計數(shù)*/dowhile(1);/*無限循環(huán)等待*/voidT0_int(void)interrupt1using1P1_0=!P1_0;TH0=(655361000)/256;TL0=(655361000)%256;,39,6.4.5P1.1上產(chǎn)生周期為1s的方波【例6-5】假設(shè)系統(tǒng)時鐘為12MHz,編程實(shí)現(xiàn)從P1.1引腳上輸出一個周期為1s的方波。基本思想:要在P1.0上產(chǎn)生周期為1s的方波,定時器應(yīng)產(chǎn)生500ms的周期性定時,定時到則對P1.0求反。由于定時時間較長,用定時器不能直接實(shí)現(xiàn),直接定時時間最長的就是方式1,僅為65ms(系統(tǒng)時鐘12MHz)多一點(diǎn)。實(shí)現(xiàn):T0定為10ms定時,每10ms對P1.0求反一次,P1.0輸出的脈沖加到定時器T1的計數(shù)輸入腳P3.5(T1腳),作為計數(shù)輸入,定時500ms需計數(shù)50次。T1設(shè)為方式2計數(shù),初值X為:28X=50,則X=206,,40,所以TH1=TL1=206。T0設(shè)為方式1定時,則控制字為61H。定時器T0和T1均采用中斷方式工作。參考程序如下:#includesbitP1_0=P10;sbitP1_1=P11;voidmain(void)TMOD=0 x61;/*設(shè)置定時器T0為方式1定時,T1為方式2計數(shù)*/P1_0=0;TH0=(6553610000)/256;/*給T0裝初值*/TL0=(6553610000)%256;TH1=206;/*給T1裝初值*/TL1=206;,41,EA=1;/*總中斷開*/ET0=1;/*允許T0中斷*/ET1=1;/*允許T1中斷*/TR0=1;TR1=1;while(1);voidT0_int(void)interrupt1TH0=(655361000)/256;TL0=(655361000)%256;P1_0=!P1_0;voidT1_int(void)interrupt3P1_1=!P1_1;;/*P1.1腳產(chǎn)生1s的方波*/。,42,6.4.6T1控制發(fā)出1KHz的音頻信號【例6-6】利用定時器T1的中斷來控制蜂鳴器發(fā)出1KHz的音頻信號,電路圖見圖6-15。假設(shè)系統(tǒng)時鐘為11.0592MHz,則每個脈沖的周期為12/11.0592=1.085s。1KHz的音頻信號周期為1ms,因此要計數(shù)的脈沖數(shù)為1000/1.085=921次。所以T1的初值:TH1=(65536921)/256;TL1=(65536921)%256參考程序如下:,#includesbitsound=P17;,43,voidmain(void)EA=1;/*總中斷開*/ET1=1;/*允許T0中斷*/TMOD=0 x10;/*設(shè)置定時器T1為方式1定時*/sound=0;TH1=(65536921)/256;/*給T1裝初值*/TL1=(65536921)%256;TR1=1;while(1);voidT1_int(void)inte

溫馨提示

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

評論

0/150

提交評論