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

下載本文檔

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

文檔簡(jiǎn)介

1、第第6章章 AT89S51單片機(jī)的單片機(jī)的 定時(shí)器定時(shí)器/計(jì)數(shù)器計(jì)數(shù)器1內(nèi)容概要內(nèi)容概要:介紹介紹AT89S51單片機(jī)片內(nèi)定時(shí)器單片機(jī)片內(nèi)定時(shí)器/計(jì)數(shù)器的結(jié)計(jì)數(shù)器的結(jié)構(gòu)與功能,兩種工作模式和構(gòu)與功能,兩種工作模式和4種工作方式,以及與其相種工作方式,以及與其相關(guān)的兩個(gè)特殊功能寄存器關(guān)的兩個(gè)特殊功能寄存器TMOD和和TCON各位的定義及各位的定義及其編程,最后介紹定時(shí)器其編程,最后介紹定時(shí)器/計(jì)數(shù)器的計(jì)數(shù)器的C51編程及應(yīng)用實(shí)例編程及應(yīng)用實(shí)例。 6.1 定時(shí)器定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)計(jì)數(shù)器的結(jié)構(gòu)定時(shí)定時(shí)/計(jì)數(shù)器的實(shí)質(zhì)是加計(jì)數(shù)器的實(shí)質(zhì)是加1計(jì)數(shù)器(計(jì)數(shù)器(16位位),由),由高高8位位THX(X=0或

2、或1)和)和低低8位位TLX兩個(gè)寄存器組成。兩個(gè)寄存器組成。TMOD是定時(shí)是定時(shí)/計(jì)計(jì)數(shù)器的工作方式寄存器,確定工作方式和功能;數(shù)器的工作方式寄存器,確定工作方式和功能;TCON是控是控制寄存器,控制制寄存器,控制T0、T1的啟動(dòng)和停止及設(shè)置溢出標(biāo)志的啟動(dòng)和停止及設(shè)置溢出標(biāo)志。 外部脈沖3圖圖6-1 AT89S51單片機(jī)的定時(shí)器單片機(jī)的定時(shí)器/計(jì)數(shù)器結(jié)構(gòu)框圖計(jì)數(shù)器結(jié)構(gòu)框圖 6.1.1 工作方式控制寄存器工作方式控制寄存器TMODpAT89S51定時(shí)器工作方式寄存器定時(shí)器工作方式寄存器TMOD用于選擇工作模式和用于選擇工作模式和 工作方式,字節(jié)地址為工作方式,字節(jié)地址為89H,不能位尋址。,不能

3、位尋址。p8位分為兩組,高位分為兩組,高4位控制位控制T1,低,低4位控制位控制T0。(1)GATE門控位門控位GATE=0時(shí),僅由運(yùn)行控制位時(shí),僅由運(yùn)行控制位TRx (x = 0,1)來(lái)控制定時(shí)器運(yùn)行來(lái)控制定時(shí)器運(yùn)行GATE=1時(shí),用外中斷引腳時(shí),用外中斷引腳INT0*(或(或INT1* )上的電平與運(yùn)行)上的電平與運(yùn)行控制位控制位TRx共同控制定時(shí)器運(yùn)行。共同控制定時(shí)器運(yùn)行。4圖圖6-2 寄存器寄存器TMOD格式格式(2)M1、M0工作方式選擇位工作方式選擇位pM1、M0的的4種編碼,對(duì)應(yīng)于種編碼,對(duì)應(yīng)于4種工作方式種工作方式的選擇。的選擇。(3)C/T* 計(jì)數(shù)器模式和定時(shí)器模式選擇位計(jì)數(shù)

4、器模式和定時(shí)器模式選擇位nC/T*=0,為定時(shí)器工作模式,對(duì)單片機(jī)的晶體振蕩器,為定時(shí)器工作模式,對(duì)單片機(jī)的晶體振蕩器12分分頻后的脈沖進(jìn)行計(jì)數(shù)。頻后的脈沖進(jìn)行計(jì)數(shù)。nC/T*=1,為計(jì)數(shù)器工作模式,計(jì)數(shù)器對(duì)外部輸入引腳,為計(jì)數(shù)器工作模式,計(jì)數(shù)器對(duì)外部輸入引腳T0(P3.4)或)或T1(P3.5)的外部脈沖(負(fù)跳變)計(jì)數(shù)。)的外部脈沖(負(fù)跳變)計(jì)數(shù)。56.1.2 定時(shí)器定時(shí)器/計(jì)數(shù)器控制寄存器計(jì)數(shù)器控制寄存器TCONpTCON字節(jié)地址為字節(jié)地址為88H,可位尋址,位地址為,可位尋址,位地址為88H8FH。(1)TF1、TF0計(jì)數(shù)溢出標(biāo)志位。計(jì)數(shù)溢出標(biāo)志位。當(dāng)當(dāng)計(jì)數(shù)器計(jì)數(shù)溢出時(shí),該位置計(jì)數(shù)器計(jì)數(shù)

5、溢出時(shí),該位置“1”。使用查詢方式時(shí),應(yīng)注意。使用查詢方式時(shí),應(yīng)注意查詢有效后,使用軟件及時(shí)將該位清查詢有效后,使用軟件及時(shí)將該位清“0”。使用中斷方式時(shí),。使用中斷方式時(shí),中斷請(qǐng)求標(biāo)志位在進(jìn)入中斷服務(wù)程序后由硬件自動(dòng)清中斷請(qǐng)求標(biāo)志位在進(jìn)入中斷服務(wù)程序后由硬件自動(dòng)清“0”。(2)TR1、TR0計(jì)數(shù)運(yùn)行控制位。計(jì)數(shù)運(yùn)行控制位。 TR1位(或位(或TR0位)位)=1,啟動(dòng)定時(shí)器工作。,啟動(dòng)定時(shí)器工作。 TR1位(或位(或TR0位)位)=0,停止定時(shí)器工作。,停止定時(shí)器工作。該位可由軟件置該位可由軟件置“1”或清或清“0”。6圖圖6-3 TCON格式格式6.2 6.2 定時(shí)器定時(shí)器/ /計(jì)數(shù)器的計(jì)數(shù)

6、器的4 4種工作方式種工作方式6.2.1 6.2.1 方式方式0 0M1M0=00方式方式0 0為為1313位計(jì)數(shù)位計(jì)數(shù),由,由TL0TL0的低的低5 5位(高位(高3 3位未用)和位未用)和TH0TH0的的8 8位位組成。組成。TL0TL0的低的低5 5位溢出時(shí)向位溢出時(shí)向TH0TH0進(jìn)位,進(jìn)位,TH0TH0溢出時(shí),置位溢出時(shí),置位TCONTCON中的中的TF0TF0標(biāo)志,向標(biāo)志,向CPUCPU發(fā)出中斷請(qǐng)求。發(fā)出中斷請(qǐng)求。7圖6-4 定時(shí)器/計(jì)數(shù)器方式0邏輯結(jié)構(gòu)框圖pC/TC/T* *位決定定時(shí)器位決定定時(shí)器/ /計(jì)數(shù)器的兩種工作模式計(jì)數(shù)器的兩種工作模式 (1)C/T*=0,T1(或(或T0

7、)為定時(shí)器工作模式,把時(shí)鐘振蕩)為定時(shí)器工作模式,把時(shí)鐘振蕩器器12分頻后的脈沖作為計(jì)數(shù)信號(hào)。分頻后的脈沖作為計(jì)數(shù)信號(hào)。 (2)C/T*=1,T1(或(或T0)為計(jì)數(shù)器工作模式,計(jì)數(shù)脈沖為)為計(jì)數(shù)器工作模式,計(jì)數(shù)脈沖為P3.4(或(或P3.5)引腳上的外部輸入脈沖,當(dāng)引腳上發(fā)生負(fù)跳變)引腳上的外部輸入脈沖,當(dāng)引腳上發(fā)生負(fù)跳變時(shí),計(jì)數(shù)器加時(shí),計(jì)數(shù)器加1。9pGATE位決定定時(shí)器的運(yùn)行控制取決于位決定定時(shí)器的運(yùn)行控制取決于TRx一個(gè)條件,還是一個(gè)條件,還是取決于取決于TRx和和INTX*(x=0,1)引腳狀態(tài)這兩個(gè)條件引腳狀態(tài)這兩個(gè)條件。 (1)GATE=0時(shí),僅由時(shí),僅由TR0控制與門的開啟。與

8、門輸出控制與門的開啟。與門輸出1時(shí)時(shí),控制開關(guān)接通,計(jì)數(shù)開始;,控制開關(guān)接通,計(jì)數(shù)開始; (2)GATE=1時(shí),由外中斷引腳信號(hào)控制或門的輸出,此時(shí),由外中斷引腳信號(hào)控制或門的輸出,此時(shí)控制時(shí)控制與門的開啟由外中斷引腳信號(hào)和與門的開啟由外中斷引腳信號(hào)和TR0共同控制共同控制。當(dāng)當(dāng)TR0=1時(shí),外中斷引腳信號(hào)引腳的時(shí),外中斷引腳信號(hào)引腳的高電平啟動(dòng)計(jì)數(shù)高電平啟動(dòng)計(jì)數(shù),外中,外中斷引腳信號(hào)引腳的斷引腳信號(hào)引腳的低電平停止計(jì)數(shù)低電平停止計(jì)數(shù)。這種方式常用來(lái)測(cè)量外。這種方式常用來(lái)測(cè)量外中斷引腳上正脈沖的寬度。中斷引腳上正脈沖的寬度。l定時(shí)器模式時(shí)定時(shí)器模式時(shí)有有:Nt/Tcy l計(jì)數(shù)初值計(jì)算的公式為:

9、計(jì)數(shù)初值計(jì)算的公式為:13X=2 -N 6.2.2 方式方式1M1M0=01方式方式1的計(jì)數(shù)位數(shù)是的計(jì)數(shù)位數(shù)是16位,由位,由TLX作為低作為低8位、位、THX作為高作為高8位,組成了位,組成了16位加位加1計(jì)數(shù)器計(jì)數(shù)器 。16X=2 -N計(jì)數(shù)個(gè)數(shù)與計(jì)數(shù)初值的關(guān)系為:計(jì)數(shù)個(gè)數(shù)與計(jì)數(shù)初值的關(guān)系為: 8X=2 -N6.2.3 方式方式2M1M0=10方式方式2為自動(dòng)重裝初值的為自動(dòng)重裝初值的8位計(jì)數(shù)方式。位計(jì)數(shù)方式。 工作方式2特別適合于用作較精確的脈沖信號(hào)發(fā)生器。 計(jì)數(shù)個(gè)數(shù)與計(jì)數(shù)初值的關(guān)系為計(jì)數(shù)個(gè)數(shù)與計(jì)數(shù)初值的關(guān)系為: 工作過(guò)程 pT0分成兩個(gè)分成兩個(gè)8位定時(shí)位定時(shí)/計(jì)數(shù)器計(jì)數(shù)器TL0和和TH0

10、 ; TL0:既可計(jì)數(shù)也可定時(shí),是一個(gè)既可計(jì)數(shù)也可定時(shí),是一個(gè)8位定時(shí)位定時(shí)/計(jì)數(shù)器。占用了計(jì)數(shù)器。占用了T0 所有控制位:所有控制位: C/T,TR0,GATE,TF0和和INT0、T0引腳;引腳; TH0:只能作為定時(shí)器,因?yàn)橹荒茏鳛槎〞r(shí)器,因?yàn)門0已被已被TL0占用,占用, TH0用用 T1的的 控制位:控制位:TR1、TF1;6.2.4 6.2.4 方式方式3 3M1M0=11M1M0=1113pT0T0在方式在方式3 3時(shí)時(shí)T1T1的工作模式的工作模式T1T1只能工作在只能工作在0 0、1 1、2 2方式,作為串行口的方式,作為串行口的波特率發(fā)生器波特率發(fā)生器使使用。因?yàn)橛谩R驗(yàn)門1

11、T1的運(yùn)行控制位的運(yùn)行控制位TR1TR1及計(jì)數(shù)溢出標(biāo)志位及計(jì)數(shù)溢出標(biāo)志位TF1TF1已被定時(shí)已被定時(shí)/ /計(jì)數(shù)器計(jì)數(shù)器T0T0借用。借用。當(dāng)作為波特率發(fā)生器使用時(shí),只需要設(shè)置好工作方式,便可當(dāng)作為波特率發(fā)生器使用時(shí),只需要設(shè)置好工作方式,便可自動(dòng)運(yùn)行。如要停止工作,只需送入一個(gè)把自動(dòng)運(yùn)行。如要停止工作,只需送入一個(gè)把T1T1設(shè)置為方式設(shè)置為方式3 3的方式控制字。因?yàn)槎〞r(shí)的方式控制字。因?yàn)槎〞r(shí)/ /計(jì)數(shù)器計(jì)數(shù)器T1T1不能在方式不能在方式3 3下工作,下工作, 因?yàn)橐驗(yàn)門1處于方式處于方式3時(shí)相當(dāng)于時(shí)相當(dāng)于TR1 = 0,停止計(jì)數(shù),停止計(jì)數(shù)。146.3 對(duì)外部輸入的計(jì)數(shù)信號(hào)的要求對(duì)外部輸入的計(jì)

12、數(shù)信號(hào)的要求當(dāng)定時(shí)器當(dāng)定時(shí)器/計(jì)數(shù)器工作在計(jì)數(shù)器模式時(shí),計(jì)數(shù)脈沖來(lái)自外部輸入計(jì)數(shù)器工作在計(jì)數(shù)器模式時(shí),計(jì)數(shù)脈沖來(lái)自外部輸入引腳引腳T0或或T1。當(dāng)輸入信號(hào)產(chǎn)生由。當(dāng)輸入信號(hào)產(chǎn)生由1至至0的跳變(即負(fù)跳變)時(shí),的跳變(即負(fù)跳變)時(shí),計(jì)數(shù)器值增計(jì)數(shù)器值增1。由于確認(rèn)一次負(fù)跳變花由于確認(rèn)一次負(fù)跳變花2個(gè)機(jī)器周期,即個(gè)機(jī)器周期,即24個(gè)振蕩周期,因此個(gè)振蕩周期,因此外部輸入的計(jì)數(shù)脈沖的最高頻率為系統(tǒng)振蕩器頻率的外部輸入的計(jì)數(shù)脈沖的最高頻率為系統(tǒng)振蕩器頻率的1/24。圖圖6-12 對(duì)外部計(jì)數(shù)輸入信號(hào)的要求對(duì)外部計(jì)數(shù)輸入信號(hào)的要求例如,選用例如,選用6MHz頻率的晶體,頻率的晶體,允許輸入的脈沖頻率最高為

13、允許輸入的脈沖頻率最高為250kHz。如果選用。如果選用12MHz頻頻率的晶體,則可輸入最高頻率率的晶體,則可輸入最高頻率為為500kHz的外部脈沖。的外部脈沖。156.3 對(duì)外部輸入的計(jì)數(shù)信號(hào)的要求對(duì)外部輸入的計(jì)數(shù)信號(hào)的要求p當(dāng)定時(shí)器當(dāng)定時(shí)器/計(jì)數(shù)器工作在計(jì)數(shù)器模式時(shí),計(jì)數(shù)脈沖來(lái)自外部輸計(jì)數(shù)器工作在計(jì)數(shù)器模式時(shí),計(jì)數(shù)脈沖來(lái)自外部輸入引腳入引腳T0或或T1。當(dāng)輸入信號(hào)產(chǎn)生由。當(dāng)輸入信號(hào)產(chǎn)生由1至至0的跳變(即負(fù)跳變的跳變(即負(fù)跳變)時(shí),計(jì)數(shù)器值增)時(shí),計(jì)數(shù)器值增1。p由于確認(rèn)一次負(fù)跳變花由于確認(rèn)一次負(fù)跳變花2個(gè)機(jī)器周期,即個(gè)機(jī)器周期,即24個(gè)振蕩周期,因個(gè)振蕩周期,因此此外部輸入計(jì)數(shù)脈沖的最高

14、頻率為系統(tǒng)振蕩器頻率的外部輸入計(jì)數(shù)脈沖的最高頻率為系統(tǒng)振蕩器頻率的1/24。圖圖6-12 對(duì)外部計(jì)數(shù)輸入信號(hào)的要求對(duì)外部計(jì)數(shù)輸入信號(hào)的要求p例如,選用例如,選用6MHz6MHz頻率頻率的晶體,的晶體,允許輸入的脈沖頻率最高為允許輸入的脈沖頻率最高為250kHz250kHz。如果選用。如果選用12MHz12MHz頻率頻率的晶體,則可輸入最高頻率為的晶體,則可輸入最高頻率為500kHz500kHz的外部脈沖。的外部脈沖。p時(shí)間常數(shù)的計(jì)算u時(shí)間常數(shù):定時(shí)器/計(jì)數(shù)器T0或T1的初始計(jì)數(shù)值,在T0或T1被啟動(dòng)后,每個(gè)機(jī)器周期使計(jì)數(shù)器中的計(jì)數(shù)值加1,計(jì)數(shù)器產(chǎn)生溢出后。u定時(shí)時(shí)間:計(jì)數(shù)器溢出時(shí)間,時(shí)間常數(shù)越

15、大,定時(shí)時(shí)間就越短;時(shí)間常數(shù)越小,定時(shí)時(shí)間就越長(zhǎng)。時(shí)鐘的頻率越高,定時(shí)時(shí)間越短;時(shí)鐘的頻率越低,定時(shí)時(shí)間越長(zhǎng)。 設(shè)系統(tǒng)時(shí)鐘的頻率為設(shè)系統(tǒng)時(shí)鐘的頻率為foscfosc,計(jì)數(shù)器的初始值為,計(jì)數(shù)器的初始值為N N,定,定時(shí)器工作于方式時(shí)器工作于方式1 1,則定時(shí)時(shí)間:,則定時(shí)時(shí)間: T=T=(2 21616-N-N)12/fosc (1)12/fosc (1) 如果定時(shí)器工作于方式如果定時(shí)器工作于方式2 2或方式或方式3 3,定時(shí)時(shí)間為:,定時(shí)時(shí)間為: T=T=(2 28 8-N-N)12/fosc (2)12/fosc (2) 當(dāng)初始值當(dāng)初始值N=0N=0時(shí),如果時(shí),如果foscfosc=12MH

16、Z=12MHZ,最大定時(shí)時(shí)間為:,最大定時(shí)時(shí)間為: 方式方式1 1為:為: TmaxTmax=2=2161612/fosc=65536us=65.536ms12/fosc=65536us=65.536ms 方式方式2 2、方式、方式3 3為:為:TmaxTmax=2=28 812/fosc=256us12/fosc=256us 根據(jù)定時(shí)時(shí)間根據(jù)定時(shí)時(shí)間T T,及公式,及公式(1)(1)、(2)(2)分別可以求出初值分別可以求出初值N N為:為: 方式方式1 1: N=2N=21616-T-Tfosc/12 fosc/12 (3 3) 方式方式2 2、方式、方式3 3 :N=2N=28 8-T-

17、Tfosc/12 fosc/12 (4 4) 如果如果foscfosc=12MHZ,=12MHZ,以上公式可簡(jiǎn)化為以上公式可簡(jiǎn)化為 方式方式1 1: N=2N=21616-T -T 方式方式2 2、方式、方式3 3 :N=2N=28 8-T-T 例如:系統(tǒng)的時(shí)鐘頻率是例如:系統(tǒng)的時(shí)鐘頻率是12MHz12MHz,在方式,在方式1 1下,如果希望定下,如果希望定時(shí)器時(shí)器/ /計(jì)數(shù)器計(jì)數(shù)器T0T0的定時(shí)時(shí)間的定時(shí)時(shí)間T T為為10ms10ms,則初值,則初值N =2N =21616-T=65536-T=65536-10000=5553610000=55536 如何將如何將5553655536給兩個(gè)給

18、兩個(gè)8 8位寄存器位寄存器TH0TH0、TL0TL0賦值呢?可將十進(jìn)制數(shù)賦值呢?可將十進(jìn)制數(shù)5553655536轉(zhuǎn)換成四位十六進(jìn)制數(shù),將高轉(zhuǎn)換成四位十六進(jìn)制數(shù),將高2 2位送位送TH0TH0,低,低2 2位送位送TL0TL0。 更簡(jiǎn)單的方法是:對(duì)于更簡(jiǎn)單的方法是:對(duì)于1616位計(jì)數(shù)器來(lái)講,位計(jì)數(shù)器來(lái)講,2 21616等效為等效為0 0,對(duì),對(duì)于于8 8位計(jì)數(shù)器,位計(jì)數(shù)器,2 28 8等效為等效為0 0,這樣公式(,這樣公式(3 3)、()、(4 4) 可簡(jiǎn)化為可簡(jiǎn)化為 N=-TN=-T,直接用下面兩條語(yǔ)句就可以完成計(jì)數(shù)器初值的設(shè)置:,直接用下面兩條語(yǔ)句就可以完成計(jì)數(shù)器初值的設(shè)置: TH0=-1

19、0000/256TH0=-10000/256; /取取-N-N的高的高8 8位位 TL0=-10000%256TL0=-10000%256; /取取-N-N的低的低8 8位位 例如:設(shè)系統(tǒng)的時(shí)鐘頻率是例如:設(shè)系統(tǒng)的時(shí)鐘頻率是12MHz12MHz,定時(shí)器工作于方式,定時(shí)器工作于方式2 2,定,定時(shí)時(shí)間時(shí)時(shí)間200us200us。 根據(jù)前面分析,根據(jù)前面分析,N=-T=-200N=-T=-200,可直接用以下語(yǔ)句實(shí)現(xiàn):,可直接用以下語(yǔ)句實(shí)現(xiàn): TH0=-200TH0=-200; TL0=-200TL0=-200;pMCS-51單片機(jī)的定時(shí)器是可編程的,但在進(jìn)行定時(shí)或計(jì)數(shù)之前要對(duì)程序進(jìn)行初始化,具體

20、步驟如下:(1)確定工作方式字:對(duì)TMOD寄存器正確賦值;(2)確定定時(shí)初值:計(jì)算初值,直接將初值寫入寄存器的TH0、TL0或TH1、TL1;初值計(jì)算:設(shè)計(jì)數(shù)器的最大值為M,則置入的初值X為: 計(jì)數(shù)方式:X=M-計(jì)數(shù)值 定時(shí)方式:由(M-X)T=定時(shí)值,得X=M-定時(shí)值/T T為計(jì)數(shù)周期,是單片機(jī)的機(jī)器周期。(模式0-M為213,模式1-M為216,模式2和3-M為28)(3)根據(jù)需要,對(duì)IE置初值,開放定時(shí)器中斷;(4)啟動(dòng)定時(shí)/計(jì)數(shù)器,對(duì)TCON寄存器中的TR0或TR1置位,置位以后,計(jì)數(shù)器即按規(guī)定的工作模式和初值進(jìn)行計(jì)數(shù)或開始定時(shí)。6.4 定時(shí)器定時(shí)器/計(jì)數(shù)器的編程和應(yīng)用計(jì)數(shù)器的編程和應(yīng)

21、用6.4.1 P1口外接的口外接的8只只LED每每0.5s閃亮一次。閃亮一次?!纠?-1】在在AT89S51單片機(jī)的單片機(jī)的P1口上接有口上接有8只只LED(電(電路見圖路見圖4-7)。下面采用定時(shí)器)。下面采用定時(shí)器T0的方式的方式1的定時(shí)中斷方的定時(shí)中斷方式,使式,使P1口外接的口外接的8只只LED每每0.5s閃亮一次。閃亮一次。(1)設(shè)置)設(shè)置TMOD寄存器寄存器p方式方式1;計(jì)時(shí)工作模式;僅由;計(jì)時(shí)工作模式;僅由TR0來(lái)控制;來(lái)控制;T1不使用。不使用。pTMOD寄存器應(yīng)初始化為寄存器應(yīng)初始化為0 x01=0000 0001B(2)計(jì)算)計(jì)算T0計(jì)數(shù)初值計(jì)數(shù)初值 設(shè)定時(shí)時(shí)間設(shè)定時(shí)時(shí)間

22、5ms(即(即5000s),設(shè)定時(shí)器),設(shè)定時(shí)器T0的計(jì)數(shù)初值為的計(jì)數(shù)初值為X,假設(shè)晶振的頻率為,假設(shè)晶振的頻率為11.0592MHz,則定時(shí)時(shí)間為:,則定時(shí)時(shí)間為:定時(shí)時(shí)間定時(shí)時(shí)間=(216X) 12/晶振頻率晶振頻率則則 5000=(216 X) 12/11.0592得:得:X = 60928,轉(zhuǎn)換成,轉(zhuǎn)換成16進(jìn)制后為:進(jìn)制后為:0 xee00,其中,其中0 xee裝裝入入TH0,0 x00裝入裝入TL0。(3)設(shè)置)設(shè)置IE寄存器寄存器 本例由于采用定時(shí)器本例由于采用定時(shí)器T0中斷,因此需將中斷,因此需將IE寄存器中的寄存器中的EA、ET0位置位置1。(4)啟動(dòng)和停止定時(shí)器)啟動(dòng)和停止

23、定時(shí)器T0 將定時(shí)器控制寄存器將定時(shí)器控制寄存器TCON中的中的TR0=1,則啟動(dòng)定時(shí)器,則啟動(dòng)定時(shí)器T0;TR0=0,則停止定時(shí)器,則停止定時(shí)器T0定時(shí)。定時(shí)。21#includeChar i=100;/*給變量給變量i賦初值,定時(shí)賦初值,定時(shí)0.5S,每次定時(shí)中斷,每次定時(shí)中斷5MS,需要中斷,需要中斷100次次*/void main( )TMOD=0 x01;/*設(shè)置定時(shí)器設(shè)置定時(shí)器T0為方式為方式1*/TH0=0 xee;/*向向TH0寫入初值的高寫入初值的高8位位*/TL0=0 x00;/*向向TL0寫入初值的低寫入初值的低8位位*/P1=0 x00; /*P1口口8只只LED點(diǎn)亮點(diǎn)

24、亮*/EA=1; /*總中斷允許總中斷允許*/ET0=1; /*定時(shí)器定時(shí)器T0中斷允許中斷允許*/ TR0=1; /*啟動(dòng)定時(shí)器啟動(dòng)定時(shí)器T0*/while(1) ;/*無(wú)窮循環(huán),等待定時(shí)中斷無(wú)窮循環(huán),等待定時(shí)中斷*/22/*以下為定時(shí)器以下為定時(shí)器T0的中斷服務(wù)程序的中斷服務(wù)程序*/void T0_int(void) interrupt 1 TH0=0 xee;/*給給T0裝入裝入16位初值,計(jì)位初值,計(jì)4608個(gè)數(shù)后,個(gè)數(shù)后,T0溢出溢出TL0=0 x00; i-; /*循環(huán)次數(shù)減循環(huán)次數(shù)減1*/if(i=0)P1=P1; /*P1口按位取反口按位取反*/i=100;/*重新設(shè)置循環(huán)次數(shù)

25、重新設(shè)置循環(huán)次數(shù)*/23 案例2 如圖所示,P0口接8只發(fā)光二極管,編程使發(fā)光管輪流點(diǎn)亮,點(diǎn)亮?xí)r間為500ms,要求使用定時(shí)器T0來(lái)控制,設(shè)晶振為12MHz。D1 D2 D3 D4 D5 D6 D7 D8 R1470RR2470RR3470RR4470RR5470RR6470RR7470RR8470RVCCP0.0P0.1P0.2P0.0P0.4P0.5P0.6P0.78051 設(shè)計(jì)思想 我們可將P0口的初值設(shè)置為0 xFE,對(duì)應(yīng)于發(fā)光管D1亮,每隔500ms將P0的值循環(huán)左移一位,這一周期性的定時(shí)作業(yè)用T0來(lái)完成。 當(dāng)時(shí)鐘頻率為12MHZ時(shí),在定時(shí)器的4種工作方式中,方式1的最大溢出時(shí)間最長(zhǎng)

26、,但即使在方式1,最大的溢出時(shí)間也只有65.536ms,所以我們不能在每次中斷時(shí)都執(zhí)行上述移位操作??梢赃@樣處理:將定時(shí)器T0的溢出時(shí)間設(shè)定為50ms,累計(jì)滿10次中斷正好500ms,才允許程序執(zhí)行1次移位動(dòng)作。 主函數(shù)uchar count=0; /50ms定時(shí)中斷次數(shù)計(jì)數(shù)器void main(void) led=0 xfe; TMOD=0 x01; /T0工作于方式1 TH0=-50000/256; /定時(shí)時(shí)間為50ms TL0=-50000%256; ET0=1; /允許T0中斷 TR0=1; /啟動(dòng)T0定時(shí) EA=1; /CPU開中斷 while (1); void time0(voi

27、d) interrupt 1 TH0=-50000/256; TL0=-50000%256; count+; if(count=10) count=0; led=_crol_(led,1); P0=led; 6.4.2 計(jì)數(shù)器的應(yīng)用計(jì)數(shù)器的應(yīng)用 【例例6-2】 采用定時(shí)器采用定時(shí)器T1的方式的方式1的中斷計(jì)數(shù)方式,如的中斷計(jì)數(shù)方式,如圖圖6-13所示,計(jì)數(shù)輸入引腳所示,計(jì)數(shù)輸入引腳T1(P3.5)上外接開關(guān))上外接開關(guān)K1,作為,作為計(jì)數(shù)信號(hào)輸入。按計(jì)數(shù)信號(hào)輸入。按4次次K1后,后,P1口的口的8只只LED閃爍不停。閃爍不停。28(1 1)設(shè)置)設(shè)置TMODTMOD寄存器寄存器T1T1工作在方

28、式工作在方式1 1,應(yīng)使,應(yīng)使TMODTMOD的的M1M1、M0=01M0=01;設(shè)置計(jì)數(shù)器工作模式;設(shè)置計(jì)數(shù)器工作模式C/TC/T* *=1=1;對(duì);對(duì)T0T0的運(yùn)行控制僅由的運(yùn)行控制僅由TR0TR0來(lái)控制,應(yīng)使來(lái)控制,應(yīng)使GATE0=0GATE0=0。定。定時(shí)器時(shí)器T0T0不使用,各相關(guān)位均設(shè)不使用,各相關(guān)位均設(shè)為為0 0。所以,。所以,TMODTMOD寄存器應(yīng)初始寄存器應(yīng)初始化為化為0 x500 x50。圖圖6-13(2)計(jì)算)計(jì)算T1計(jì)數(shù)初值計(jì)數(shù)初值由于每按由于每按4次次K1,計(jì)數(shù)一次,因此計(jì)數(shù)器的初值為,計(jì)數(shù)一次,因此計(jì)數(shù)器的初值為65536-4 =65532,將其轉(zhuǎn)換成,將其轉(zhuǎn)換成

29、16進(jìn)制后為:進(jìn)制后為:0 xfffc,因此,因此,TH0=0 xff,TL0=0 xfc。(3)設(shè)置)設(shè)置IE寄存器寄存器 本例由于采用定時(shí)器本例由于采用定時(shí)器T1中斷,因此需將中斷,因此需將IE寄存器中的寄存器中的EA、ET1位置位置1。(4)啟動(dòng)和停止定時(shí)器)啟動(dòng)和停止定時(shí)器T1 將定時(shí)器控制寄存器將定時(shí)器控制寄存器TCON中的中的TR1=1,則啟動(dòng)定時(shí)器,則啟動(dòng)定時(shí)器T1計(jì)數(shù);計(jì)數(shù);TR1=0,則停止定時(shí)器,則停止定時(shí)器T1計(jì)數(shù)。計(jì)數(shù)。 參考程序如下:參考程序如下:29#include /* 定義延時(shí)函數(shù)定義延時(shí)函數(shù)Delay( ),i是形式參數(shù),不能賦初值是形式參數(shù),不能賦初值*/v

30、oid Delay(unsigned int i)unsigned int j;/* 變量變量i由實(shí)際參數(shù)傳入一個(gè)值,因此由實(shí)際參數(shù)傳入一個(gè)值,因此i不能賦初值不能賦初值*/for(;i0;i-) for(j=0;j125;j+);/*空函數(shù)空函數(shù)*/void main( )/*主函數(shù)主函數(shù)*/TMOD=0 x50;/*設(shè)置定時(shí)器設(shè)置定時(shí)器T1為方式為方式1計(jì)數(shù)計(jì)數(shù)*/TH0=0 xff;/*向向TH0寫入初值的高寫入初值的高8位位*/30TL0=0 xfc;/*向向TL0寫入初值低寫入初值低8位位*/EA=1; /*總中斷允許總中斷允許*/ET1=1; /*T1中斷允許中斷允許*/ TR1=

31、1; /*啟動(dòng)啟動(dòng)T1*/while(1) ; /*無(wú)窮循環(huán),等待定時(shí)中斷無(wú)窮循環(huán),等待定時(shí)中斷*/*以下為定時(shí)器以下為定時(shí)器T1的中斷服務(wù)程序的中斷服務(wù)程序*/void T1_int(void) interrupt 3 for(;) /*無(wú)限循環(huán)無(wú)限循環(huán)*/P1=0 xff;/*8位位LED全滅全滅*/Delay(500) ;/*延時(shí)延時(shí)500ms*/P1=0;/*8位位LED全亮全亮*/Delay(500); /*延時(shí)延時(shí)500ms */31案例4 用定時(shí)器來(lái)控制數(shù)碼管的動(dòng)態(tài)顯示。 用定時(shí)器控制數(shù)碼管動(dòng)態(tài)顯示的方法: 設(shè)定時(shí)器的定時(shí)時(shí)間為1ms,每次產(chǎn)生溢出中斷,就根據(jù)位選變量bsel(主

32、程序中將其初值設(shè)置為0 xfe)送位選口,點(diǎn)亮一位數(shù)碼管,并將bsel左移一位,為下一位的顯示做好準(zhǔn)備,4次定時(shí)中斷分別完成4位數(shù)碼管的顯示,之后將bsel的值再次初始化為0 xfe,準(zhǔn)備下一輪顯示。 因此這種顯示方式由定時(shí)中斷自動(dòng)完成,無(wú)需在主程序中調(diào)用 abcdefgdpCOM1COM2COM3COM4Q1 Q2 Q3 Q4 R12 R11 R10 R9 R1 470R *8R2 R3 R4 R5 R6 R7 R8 P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7VCCP2.0P2.1P2.2P2.3LED1LED2LED3LED48051主程序uchar bsel , n

33、;void main(void) n=0; bsel=0 xfe; /首先顯示數(shù)碼管的最低位 TMOD=0 x01; /T0工作于定時(shí)方式2 TH0=-1000/256; /T0的定時(shí)時(shí)間為1000us TL0=-1000%256; ET0=1; /允許T0中斷 TR0=1; /啟動(dòng)定時(shí) EA=1; /開中斷 while(1); void time0(void) interrupt 1 TH0=-1000/256; TL0=-1000%256; P0=0 xff; P2=bsel; P0=segtabdbufn; bsel=_crol_(bsel,1); n+; if(n=4) n=0; bs

34、el=0 xfe; 6.4.3 擴(kuò)展一個(gè)外部中斷源擴(kuò)展一個(gè)外部中斷源 方式方式2可自動(dòng)重新裝載初值。此方式可省去用戶程序中重新可自動(dòng)重新裝載初值。此方式可省去用戶程序中重新裝初值的指令。裝初值的指令。 當(dāng)某個(gè)定時(shí)器當(dāng)某個(gè)定時(shí)器/計(jì)數(shù)器不使用時(shí),可為計(jì)數(shù)器不使用時(shí),可為AT89S51擴(kuò)展一個(gè)負(fù)擴(kuò)展一個(gè)負(fù)跳沿觸發(fā)的外部中斷源。跳沿觸發(fā)的外部中斷源。 基本思想:基本思想:把定時(shí)器溢出中斷做成外部中斷把定時(shí)器溢出中斷做成外部中斷,然后把計(jì)數(shù)輸,然后把計(jì)數(shù)輸入信號(hào)接到定時(shí)器的相應(yīng)引腳上入信號(hào)接到定時(shí)器的相應(yīng)引腳上T0腳(或腳(或T1腳),并把定時(shí)腳),并把定時(shí)器被設(shè)置為方式器被設(shè)置為方式2(自動(dòng)裝入常數(shù)

35、方式)計(jì)數(shù)工作模式,計(jì)數(shù)(自動(dòng)裝入常數(shù)方式)計(jì)數(shù)工作模式,計(jì)數(shù)器器TH0、TL0初值均為初值均為0FFH,并允許,并允許T0中斷,總中斷開放。中斷,總中斷開放。當(dāng)檢測(cè)到當(dāng)檢測(cè)到T0腳(或腳(或T1腳)引腳電平發(fā)生負(fù)跳變時(shí),計(jì)數(shù)器腳)引腳電平發(fā)生負(fù)跳變時(shí),計(jì)數(shù)器TF0(或或TF1)溢出,這時(shí)將產(chǎn)生一個(gè)中斷請(qǐng)求。溢出,這時(shí)將產(chǎn)生一個(gè)中斷請(qǐng)求?!纠?-3】擴(kuò)展一個(gè)負(fù)跳沿觸發(fā)的外部中斷源,把定時(shí)器擴(kuò)展一個(gè)負(fù)跳沿觸發(fā)的外部中斷源,把定時(shí)器T0計(jì)計(jì)數(shù)輸入引腳作為外部中斷請(qǐng)求信號(hào)的輸入端。數(shù)輸入引腳作為外部中斷請(qǐng)求信號(hào)的輸入端。35#include#includevoid main( )void main

36、( ) TMOD=0 x06TMOD=0 x06;/ /* *設(shè)置定時(shí)器設(shè)置定時(shí)器T0T0為方式為方式2 2計(jì)數(shù)計(jì)數(shù)* */ /TH0=0 xffTH0=0 xff;/ /* *給給T0T0裝入初值裝入初值* */ /TL0=0 xffTL0=0 xff; / /* *給給T0T0裝入初值裝入初值* */ /ET0=1ET0=1; / /* *允許允許T0T0中斷中斷* */ /EA=1EA=1; / /* *總中斷開總中斷開* */ /TF0=0TF0=0;/ /* *T0T0中斷溢出標(biāo)志位清中斷溢出標(biāo)志位清0 0* */ /TR0=1TR0=1/ /* *接通接通T0 T0 計(jì)數(shù)計(jì)數(shù)* *

37、 / /while (1) while (1) / /* *無(wú)限循環(huán)等待無(wú)限循環(huán)等待* * / / / /* *以下為定時(shí)器以下為定時(shí)器T0T0的中斷服務(wù)程序的中斷服務(wù)程序* */ /void T0_int(void) interrupt 1 using 0void T0_int(void) interrupt 1 using 0 / /* *外中斷處理部分外中斷處理部分* */ /366.4.4 P1.0上產(chǎn)生周期為上產(chǎn)生周期為2ms的方波的方波 【例例6-4】系統(tǒng)時(shí)鐘為系統(tǒng)時(shí)鐘為12MHz,編程實(shí)現(xiàn)從,編程實(shí)現(xiàn)從P1.0引腳上輸出引腳上輸出一個(gè)周期為一個(gè)周期為2ms的方波,如的方波,如圖圖

38、6-14所示。所示。基本思想:基本思想:要在要在P1.0上產(chǎn)生周期為上產(chǎn)生周期為2ms的方波,定時(shí)器應(yīng)產(chǎn)生的方波,定時(shí)器應(yīng)產(chǎn)生1ms的周期性的定時(shí),定時(shí)對(duì)的周期性的定時(shí),定時(shí)對(duì)P1.0求反。選擇定時(shí)器求反。選擇定時(shí)器T0,方,方式式1定時(shí),采用中斷方式,定時(shí),采用中斷方式,GATE不起作用。不起作用。37圖圖6-14 定時(shí)器控制定時(shí)器控制P1.0輸出一個(gè)周期為輸出一個(gè)周期為2ms的方波的方波計(jì)算計(jì)算T0的初值計(jì)算:的初值計(jì)算: 設(shè)設(shè)T0的初值為的初值為X,則,則 (216 X) 1 106 = 1 103= 65536X =1000 則初值為:則初值為:655361000=64536,因此因此

39、 TH0=(65536 1000) /256 , TL0=(65536 1000) %256。 參考程序如下:參考程序如下:38#includesbit P1_0=P10;void main(void)TMOD=0 x01;/*設(shè)置定時(shí)器設(shè)置定時(shí)器T0為方式為方式2計(jì)數(shù)計(jì)數(shù)*/P1_0=0;TH0=(65536 1000) /256;/*給給T0裝入初值裝入初值*/TL0=(65536 1000) %256; /*給給T0裝入初值裝入初值*/ET0=1; /* 允許允許T0中斷中斷 */EA=1; /* 總中斷開總中斷開 */TR0=1/* 接通接通T0 計(jì)數(shù)計(jì)數(shù) * /do while (1

40、); /* 無(wú)限循環(huán)等待無(wú)限循環(huán)等待 * /void T0_int(void) interrupt 1 using 1P1_0=! P1_0;TH0=(65536 1000) /256;TL0=(65536 1000) %256;396.4.5 P1.1上產(chǎn)生周期為上產(chǎn)生周期為1s的方波的方波 【例例6-5】假設(shè)系統(tǒng)時(shí)鐘為假設(shè)系統(tǒng)時(shí)鐘為12MHz,編程實(shí)現(xiàn)從,編程實(shí)現(xiàn)從P1.1引腳引腳上上輸出一個(gè)周期為輸出一個(gè)周期為1s的方波。的方波。 基本思想:基本思想:要在要在P1.0上產(chǎn)生周期為上產(chǎn)生周期為1s的方波,定時(shí)器應(yīng)產(chǎn)的方波,定時(shí)器應(yīng)產(chǎn)生生500ms的周期性定時(shí),定時(shí)到則對(duì)的周期性定時(shí),定時(shí)到

41、則對(duì)P1.0求反。由于定時(shí)時(shí)求反。由于定時(shí)時(shí)間較長(zhǎng),用定時(shí)器不能直接實(shí)現(xiàn),直接定時(shí)時(shí)間最長(zhǎng)的就是間較長(zhǎng),用定時(shí)器不能直接實(shí)現(xiàn),直接定時(shí)時(shí)間最長(zhǎng)的就是方式方式1,僅為,僅為65ms(系統(tǒng)時(shí)鐘系統(tǒng)時(shí)鐘12MHz)多一點(diǎn)。多一點(diǎn)。 實(shí)現(xiàn)實(shí)現(xiàn):T0定為定為10ms定時(shí),每定時(shí),每10ms對(duì)對(duì)P1.0求反一次,求反一次,P1.0輸出的脈沖加到定時(shí)器輸出的脈沖加到定時(shí)器T1的計(jì)數(shù)輸入腳的計(jì)數(shù)輸入腳P3.5(T1腳)腳),作為計(jì)數(shù)輸入,定時(shí),作為計(jì)數(shù)輸入,定時(shí)500ms需計(jì)數(shù)需計(jì)數(shù)50次。次。T1設(shè)為方式設(shè)為方式2計(jì)計(jì)數(shù),初值數(shù),初值X為:為:28X=50,則,則X=206,40 所以所以TH1= TL1=

42、206。T0設(shè)為方式設(shè)為方式1定時(shí),則控制字為定時(shí),則控制字為61H。定時(shí)器。定時(shí)器T0和和T1均采用中斷方式工作。均采用中斷方式工作。 參考程序如下:參考程序如下:#includesbit P1_0=P10;sbit P1_1=P11;void main(void)TMOD=0 x61;/*設(shè)置定時(shí)器設(shè)置定時(shí)器T0為方式為方式1定時(shí),定時(shí),T1為方式為方式2計(jì)數(shù)計(jì)數(shù)*/P1_0=0;TH0=(65536 10000) /256;/*給給T0裝初值裝初值*/TL0=(65536 10000) %256; TH1=206;/*給給T1裝初值裝初值*/TL1=206;41EA=1; /* 總中斷開

43、總中斷開 */ET0=1; /* 允許允許T0中斷中斷 */ET1=1; /* 允許允許T1中斷中斷 */TR0=1;TR1=1;while (1);void T0_int(void) interrupt 1 TH0=(65536 1000) /256;TL0=(65536 1000) %256;P1_0=! P1_0;void T1_int(void) interrupt 3 P1_1=! P1_1; ;/* P1.1腳產(chǎn)生腳產(chǎn)生1s的方波的方波*/ 。426.4.6 T1控制發(fā)出控制發(fā)出1KHz的音頻信號(hào)的音頻信號(hào)【例例6-6】 利用定時(shí)器利用定時(shí)器T1的中斷來(lái)控制蜂鳴器發(fā)出的中斷來(lái)控制蜂鳴器發(fā)出1KHz的音頻的音頻信號(hào),電路圖見信號(hào),電路圖見圖圖6-15。假設(shè)系統(tǒng)時(shí)鐘為假設(shè)系統(tǒng)時(shí)鐘為11.0592MHz,則每個(gè)脈沖的周期為,則每個(gè)脈沖的周期為12/11.0592=1.085s。1KHz的音頻信號(hào)周期為的音頻信號(hào)周期為1ms,因此,因此要計(jì)數(shù)的脈沖數(shù)為要計(jì)數(shù)的脈沖數(shù)為1000/1.085=921次。所以次。所以T1的初值:的初值:TH1=(6553

溫馨提示

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

評(píng)論

0/150

提交評(píng)論