第7章AT89S51單片機(jī)的定時(shí)器計(jì)數(shù)器_第1頁
第7章AT89S51單片機(jī)的定時(shí)器計(jì)數(shù)器_第2頁
第7章AT89S51單片機(jī)的定時(shí)器計(jì)數(shù)器_第3頁
第7章AT89S51單片機(jī)的定時(shí)器計(jì)數(shù)器_第4頁
第7章AT89S51單片機(jī)的定時(shí)器計(jì)數(shù)器_第5頁
已閱讀5頁,還剩63頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、 第第7章章 定時(shí)器定時(shí)器/計(jì)數(shù)器的工計(jì)數(shù)器的工 作原理及應(yīng)用作原理及應(yīng)用 17.1 定時(shí)器定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)計(jì)數(shù)器的結(jié)構(gòu) AT89S51定時(shí)器定時(shí)器/計(jì)數(shù)器結(jié)構(gòu)計(jì)數(shù)器結(jié)構(gòu)見見圖圖 7-1,定時(shí)器,定時(shí)器/計(jì)數(shù)器計(jì)數(shù)器T0由特殊功能寄由特殊功能寄存器存器TH0、TL0構(gòu)成,構(gòu)成,T1由特殊功能寄存器由特殊功能寄存器TH1、TL1構(gòu)成。構(gòu)成。2圖圖7-1 定時(shí)器定時(shí)器/計(jì)數(shù)器結(jié)構(gòu)框圖計(jì)數(shù)器結(jié)構(gòu)框圖 T0、T1都有都有定時(shí)器定時(shí)器和和計(jì)數(shù)器計(jì)數(shù)器兩種工作模式兩種工作模式,兩種兩種模式實(shí)質(zhì)都是對(duì)脈沖信模式實(shí)質(zhì)都是對(duì)脈沖信號(hào)進(jìn)行計(jì)數(shù),只不過計(jì)數(shù)信號(hào)來源不同。號(hào)進(jìn)行計(jì)數(shù),只不過計(jì)數(shù)信號(hào)來源不同。 計(jì)數(shù)

2、器模式計(jì)數(shù)器模式是對(duì)加在是對(duì)加在T0(P3.4)和)和T1(P3.5)兩個(gè)引腳上的外部脈沖進(jìn))兩個(gè)引腳上的外部脈沖進(jìn)行計(jì)數(shù)(見圖行計(jì)數(shù)(見圖7-1);); 定時(shí)器模式定時(shí)器模式是對(duì)系統(tǒng)時(shí)鐘信號(hào)經(jīng)是對(duì)系統(tǒng)時(shí)鐘信號(hào)經(jīng)12分頻后的內(nèi)部脈沖信號(hào)(機(jī)器周期)分頻后的內(nèi)部脈沖信號(hào)(機(jī)器周期)計(jì)數(shù)。由于系統(tǒng)時(shí)鐘頻率是定值,可根據(jù)計(jì)數(shù)值計(jì)算出定時(shí)時(shí)間。兩個(gè)定計(jì)數(shù)。由于系統(tǒng)時(shí)鐘頻率是定值,可根據(jù)計(jì)數(shù)值計(jì)算出定時(shí)時(shí)間。兩個(gè)定時(shí)器時(shí)器/計(jì)數(shù)器屬于計(jì)數(shù)器屬于增增1計(jì)數(shù)器計(jì)數(shù)器,即每計(jì)一個(gè)脈沖,計(jì)數(shù)器增,即每計(jì)一個(gè)脈沖,計(jì)數(shù)器增1。 T0、T1具有具有4種工作方式種工作方式(方式(方式0、1、2和和3)。)。 圖圖 7

3、-1特殊功能寄存器特殊功能寄存器TMOD用于選擇定時(shí)器用于選擇定時(shí)器/計(jì)數(shù)器計(jì)數(shù)器T0、T1的工作模式的工作模式和工作方式。特殊功能寄存器和工作方式。特殊功能寄存器TCON用于控制用于控制T0、T1的啟動(dòng)和停止計(jì)數(shù),的啟動(dòng)和停止計(jì)數(shù),同時(shí)包含了同時(shí)包含了T0、T1狀態(tài)。狀態(tài)。 計(jì)數(shù)器起始計(jì)數(shù)從初值開始。單片機(jī)計(jì)數(shù)器起始計(jì)數(shù)從初值開始。單片機(jī)復(fù)位復(fù)位時(shí)計(jì)數(shù)器初值為時(shí)計(jì)數(shù)器初值為0,也可給計(jì)數(shù),也可給計(jì)數(shù)器裝入器裝入1個(gè)新的初值。個(gè)新的初值。7.1.1 工作方式控制寄存器工作方式控制寄存器TMOD TMOD用于選擇定時(shí)器用于選擇定時(shí)器/計(jì)數(shù)器的工作模式和工作方式,字節(jié)地址為計(jì)數(shù)器的工作模式和工作方

4、式,字節(jié)地址為89H,不能位尋址,格式,不能位尋址,格式見見圖圖7-2。 8位分兩組,位分兩組,高高4位位控制控制T1,低低4位位控制控制T0。 TMOD各位說明各位說明如下如下。(1)GATE門控位門控位 GATE=0,定時(shí)器是否計(jì)數(shù),由控制位,定時(shí)器是否計(jì)數(shù),由控制位TRx(x = 0,1)來控制)來控制。5圖圖7-2 寄存器寄存器TMOD格式格式 GATE=1,定時(shí)器是否計(jì)數(shù),由外中斷引腳,定時(shí)器是否計(jì)數(shù),由外中斷引腳INTx* 上的電平與運(yùn)行控上的電平與運(yùn)行控制位制位TRx共同控制。共同控制。(2)M1、M0工作方式選擇位工作方式選擇位 M1、M0 4種編碼,對(duì)應(yīng)于種編碼,對(duì)應(yīng)于4種工

5、作方式的選擇,種工作方式的選擇,見見表表7-1。表表7-1M1、M0工作方式選擇工作方式選擇6(3)C/T* 計(jì)數(shù)器模式和定時(shí)器計(jì)數(shù)器模式和定時(shí)器模式選擇位模式選擇位 C/T*=0,定時(shí)器模式,對(duì)系統(tǒng)時(shí)鐘,定時(shí)器模式,對(duì)系統(tǒng)時(shí)鐘12分頻后的脈沖進(jìn)行計(jì)數(shù)。分頻后的脈沖進(jìn)行計(jì)數(shù)。 C/T*=1,計(jì)數(shù)器模式,計(jì)數(shù)器對(duì)外部輸入引腳,計(jì)數(shù)器模式,計(jì)數(shù)器對(duì)外部輸入引腳T0(P3.4)或)或T1(P3.5)的外部脈沖(負(fù)跳變)計(jì)數(shù)。)的外部脈沖(負(fù)跳變)計(jì)數(shù)。7.1.2 定時(shí)器定時(shí)器/計(jì)數(shù)器控制寄存器計(jì)數(shù)器控制寄存器TCON TCON字節(jié)地址字節(jié)地址88H,位地址為,位地址為88H8FH。格式。格式見見圖圖

6、7-3。 7圖圖7-3 TCON格式格式第第6章已介紹與外中斷有關(guān)的低章已介紹與外中斷有關(guān)的低4位。這里僅介紹高位。這里僅介紹高4位功能。位功能。(1)TF1、TF0計(jì)數(shù)溢出標(biāo)志位計(jì)數(shù)溢出標(biāo)志位 當(dāng)計(jì)數(shù)器計(jì)數(shù)溢出時(shí),該位置當(dāng)計(jì)數(shù)器計(jì)數(shù)溢出時(shí),該位置“1”。使用查詢方式時(shí),此位可供。使用查詢方式時(shí),此位可供CPU查詢,但應(yīng)注意查詢后,用軟件及時(shí)將該位清查詢,但應(yīng)注意查詢后,用軟件及時(shí)將該位清“0”。使用中斷方式。使用中斷方式時(shí),作為中斷請(qǐng)求標(biāo)志位,進(jìn)入中斷服務(wù)程序后由硬件自動(dòng)清時(shí),作為中斷請(qǐng)求標(biāo)志位,進(jìn)入中斷服務(wù)程序后由硬件自動(dòng)清“0”。(2)TR1、TR0計(jì)數(shù)運(yùn)行控制位計(jì)數(shù)運(yùn)行控制位 TR1位

7、(或位(或TR0)=1,啟動(dòng)計(jì)數(shù)器計(jì)數(shù)的必要條件。,啟動(dòng)計(jì)數(shù)器計(jì)數(shù)的必要條件。 TR1位(或位(或TR0)=0,停止計(jì)數(shù)器計(jì)數(shù)。,停止計(jì)數(shù)器計(jì)數(shù)。該位可由軟件置該位可由軟件置“1”或清或清“0”。7.2 定時(shí)器定時(shí)器/計(jì)數(shù)器的計(jì)數(shù)器的4種工作方式種工作方式 4種工作方式,分別介紹如下。種工作方式,分別介紹如下。87.2.1 方式方式0 當(dāng)當(dāng)M1、M0=00,設(shè)置為方式,設(shè)置為方式0,定時(shí)器,定時(shí)器/計(jì)數(shù)器等效邏輯結(jié)構(gòu)計(jì)數(shù)器等效邏輯結(jié)構(gòu)見見圖圖7-4(以(以T1為例,為例,TMOD.5、TMOD.4 = 00)。)。9圖圖7-4 定時(shí)器定時(shí)器/計(jì)數(shù)器方式計(jì)數(shù)器方式0的邏輯結(jié)構(gòu)框圖的邏輯結(jié)構(gòu)框圖

8、方式方式0為為1313位計(jì)數(shù)器位計(jì)數(shù)器,由,由TLx(x = 0,1)的低)的低5位和位和THx的高的高8位構(gòu)成位構(gòu)成。TLx低低5位溢出則向位溢出則向THx進(jìn)位,進(jìn)位,THx計(jì)數(shù)溢出則把計(jì)數(shù)溢出則把TCON中的溢出標(biāo)志位中的溢出標(biāo)志位TFx置置“1”。 圖圖7-2中,中,C/T*位控制電子開關(guān)決定位控制電子開關(guān)決定2種工作模式。種工作模式。 (1)C/T*=0,電子開關(guān)打在上面,電子開關(guān)打在上面,T1(或(或T0)為定時(shí)器工作模式,系)為定時(shí)器工作模式,系統(tǒng)時(shí)鐘統(tǒng)時(shí)鐘12分頻后的脈沖作為計(jì)數(shù)信號(hào)。分頻后的脈沖作為計(jì)數(shù)信號(hào)。 (2)C/T*=1,電子開關(guān)打在下面,電子開關(guān)打在下面,T1(或(或

9、T0)為計(jì)數(shù)器工作模式,對(duì))為計(jì)數(shù)器工作模式,對(duì)P3.5(或(或P3.4)引腳上的外部輸入脈沖計(jì)數(shù),當(dāng)引腳上發(fā)生負(fù)跳變時(shí),計(jì))引腳上的外部輸入脈沖計(jì)數(shù),當(dāng)引腳上發(fā)生負(fù)跳變時(shí),計(jì)數(shù)器加數(shù)器加1。 GATE位狀態(tài)決定定時(shí)器位狀態(tài)決定定時(shí)器/計(jì)數(shù)器運(yùn)行控制取決于計(jì)數(shù)器運(yùn)行控制取決于TRx一個(gè)條件,還是一個(gè)條件,還是取決于取決于TRx和和INTx*引腳狀態(tài)兩個(gè)條件。引腳狀態(tài)兩個(gè)條件。10(1) GATE=0時(shí),時(shí),A點(diǎn)(見圖點(diǎn)(見圖7-4)電位恒為)電位恒為1,B點(diǎn)電位僅取決于點(diǎn)電位僅取決于TRx狀態(tài)。狀態(tài)。TRx=1,B點(diǎn)為高電平,控制端控制電子開關(guān)閉合,允許點(diǎn)為高電平,控制端控制電子開關(guān)閉合,允許

10、T1(或(或T0)對(duì)脈沖計(jì)數(shù)。)對(duì)脈沖計(jì)數(shù)。TRx=0,B點(diǎn)為低電平,電子開關(guān)斷開,禁止點(diǎn)為低電平,電子開關(guān)斷開,禁止T1(或(或T0)計(jì)數(shù)。)計(jì)數(shù)。(2) GATE=1時(shí),時(shí),B點(diǎn)電位由點(diǎn)電位由INTx*(x = 0,1)的電平和)的電平和TRx的狀的狀態(tài)兩個(gè)條件來確定。當(dāng)態(tài)兩個(gè)條件來確定。當(dāng)TRx=1,且,且INTx* =1時(shí),時(shí),B點(diǎn)才為點(diǎn)才為1,電子開關(guān)閉,電子開關(guān)閉合,允許合,允許T1(或(或T0)計(jì)數(shù)。故這種情況下計(jì)數(shù)器是否計(jì)數(shù)是由)計(jì)數(shù)。故這種情況下計(jì)數(shù)器是否計(jì)數(shù)是由TRx和和INTx*兩個(gè)條件來共同控制的。兩個(gè)條件來共同控制的。7.2.2 方式方式1 當(dāng)當(dāng)M1、M0=01時(shí),工

11、作于方式時(shí),工作于方式1,等效電路邏輯結(jié)構(gòu),等效電路邏輯結(jié)構(gòu)見見圖圖7-5。12圖圖7-5 方式方式1的邏輯結(jié)構(gòu)框圖的邏輯結(jié)構(gòu)框圖方式方式1和方式和方式0差別僅僅在于計(jì)數(shù)器的位數(shù)不同,方式差別僅僅在于計(jì)數(shù)器的位數(shù)不同,方式1為為16位位計(jì)數(shù)器,由計(jì)數(shù)器,由THx高高8位和位和TLx低低8位構(gòu)成(位構(gòu)成(x = 0,1),方式),方式0則為則為13位計(jì)數(shù)器,有關(guān)控制狀態(tài)位含義(位計(jì)數(shù)器,有關(guān)控制狀態(tài)位含義(GATE、C/T* 、TFx、TRx)與方式)與方式0相同。相同。7.2.3 7.2.3 方式方式2 2 方式方式0 0和方式和方式1 1最大特點(diǎn)是計(jì)數(shù)溢出后,計(jì)數(shù)器為全最大特點(diǎn)是計(jì)數(shù)溢出后,

12、計(jì)數(shù)器為全0 0。因此在循。因此在循環(huán)定時(shí)或循環(huán)計(jì)數(shù)應(yīng)用時(shí)就存在用指令反復(fù)裝入計(jì)數(shù)初值的問題,這會(huì)環(huán)定時(shí)或循環(huán)計(jì)數(shù)應(yīng)用時(shí)就存在用指令反復(fù)裝入計(jì)數(shù)初值的問題,這會(huì)影響定時(shí)精度,方式影響定時(shí)精度,方式2 2就是為解決此問題而設(shè)置的。就是為解決此問題而設(shè)置的。 當(dāng)當(dāng)M1M1、M0=10M0=10時(shí),工作方式時(shí),工作方式2 2,等效邏輯結(jié)構(gòu),等效邏輯結(jié)構(gòu)見見圖圖7-67-6(以(以T1T1為例,為例,x=1x=1)。)。 工作方式工作方式2 2為為自動(dòng)恢復(fù)初值(初值自動(dòng)裝入)自動(dòng)恢復(fù)初值(初值自動(dòng)裝入)的的8 8位定時(shí)器位定時(shí)器/ /計(jì)數(shù)計(jì)數(shù)器,器,TLxTLx(x=0 x=0,1 1)作為常數(shù)緩沖器

13、,當(dāng))作為常數(shù)緩沖器,當(dāng)TLxTLx計(jì)數(shù)溢出時(shí),在溢出標(biāo)志計(jì)數(shù)溢出時(shí),在溢出標(biāo)志TFxTFx置置“1 1”的同時(shí),還自動(dòng)將的同時(shí),還自動(dòng)將THxTHx中的初值送至中的初值送至TLxTLx,使,使TLxTLx從初值從初值開始重新計(jì)數(shù)。定時(shí)器開始重新計(jì)數(shù)。定時(shí)器/ /計(jì)數(shù)器方式計(jì)數(shù)器方式2 2工作過程工作過程見見圖圖7-77-7。1314圖圖7-67-6 方式方式2邏輯結(jié)構(gòu)框圖邏輯結(jié)構(gòu)框圖15圖圖7-7 方式方式2工作過程工作過程方式方式2可省去用戶軟件中重裝初值的指令執(zhí)行時(shí)間,簡(jiǎn)化定時(shí)初可省去用戶軟件中重裝初值的指令執(zhí)行時(shí)間,簡(jiǎn)化定時(shí)初值的計(jì)算方法,可相當(dāng)精確地定時(shí)。值的計(jì)算方法,可相當(dāng)精確地定

14、時(shí)。7.2.4 方式方式3 方式方式3是為增加一個(gè)附加的是為增加一個(gè)附加的8位定時(shí)器位定時(shí)器/計(jì)數(shù)器而設(shè)置的,從而使計(jì)數(shù)器而設(shè)置的,從而使AT89S51具有具有3個(gè)定時(shí)器個(gè)定時(shí)器/計(jì)數(shù)器。計(jì)數(shù)器。方式方式3只適用于只適用于T0,T1不能工作在方不能工作在方式式3。T1方式方式3時(shí)相當(dāng)于時(shí)相當(dāng)于TR1 = 0,停止計(jì)數(shù)(此時(shí),停止計(jì)數(shù)(此時(shí)T1可作為串口波特率可作為串口波特率產(chǎn)生器)。產(chǎn)生器)。1工作方式工作方式3下的下的T0 當(dāng)當(dāng)TMOD的低的低2位為位為11時(shí),時(shí),T0被選為方式被選為方式3,各引腳與,各引腳與T0的邏輯關(guān)系的邏輯關(guān)系見見圖圖7-8。 T0分為兩個(gè)獨(dú)立的分為兩個(gè)獨(dú)立的8位計(jì)數(shù)

15、器位計(jì)數(shù)器TL0和和TH0,TL0使用使用T0的狀態(tài)控制位的狀態(tài)控制位C/T* 、GATE、TR0 ,而,而TH0被固定為一個(gè)被固定為一個(gè)8位定時(shí)器(不能作為外部位定時(shí)器(不能作為外部計(jì)數(shù)模式),并使用定時(shí)器計(jì)數(shù)模式),并使用定時(shí)器T1的狀態(tài)控制位的狀態(tài)控制位TR1,同時(shí)占用定時(shí)器,同時(shí)占用定時(shí)器T1的的中斷請(qǐng)求源中斷請(qǐng)求源TF1。162T0工作在方式工作在方式3時(shí)時(shí)T1的各種工作方式的各種工作方式 一般情況下,當(dāng)一般情況下,當(dāng)T1用作串口波特率發(fā)生器時(shí),用作串口波特率發(fā)生器時(shí),T0才工作在方式才工作在方式3。T0方式方式3時(shí),時(shí),T1可為方式可為方式0、1、2,作為串口波特率發(fā)生器,或不需要

16、中斷,作為串口波特率發(fā)生器,或不需要中斷的場(chǎng)合。的場(chǎng)合。17 圖圖7-8 T0方式方式3的邏輯結(jié)構(gòu)框圖的邏輯結(jié)構(gòu)框圖(1)T1工作在方式工作在方式0 T1的控制字中的控制字中M1、M0 = 00時(shí),時(shí),T1工作在方式工作在方式0,工作示意圖如,工作示意圖如圖圖7-9所示。所示。(2)T1工作在方式工作在方式1 當(dāng)當(dāng)T1的控制字中的控制字中M1、M0 = 01時(shí),時(shí),T1工作在方式工作在方式1,工作示意,工作示意見見圖圖7-10。19圖圖7-9 T0方式方式3時(shí)時(shí)T1為方式為方式0工作示意圖工作示意圖(3)T1工作在方式工作在方式2 當(dāng)當(dāng)T1控制字中控制字中M1、M0 = 10時(shí),時(shí),T1為方式

17、為方式2,工作示意如,工作示意如圖圖7-11所示。所示。20圖圖7-10 T0方式方式3時(shí)時(shí)T1為方式為方式1工作示意圖工作示意圖 圖圖7-11 T0方式方式3時(shí)時(shí)T1為方式為方式2工作示意圖工作示意圖(4)T1設(shè)置在方式設(shè)置在方式3 T0方式方式3時(shí),再把時(shí),再把T1也設(shè)置成方式也設(shè)置成方式3,此時(shí),此時(shí)T1停止計(jì)數(shù)。停止計(jì)數(shù)。7.3 對(duì)外部輸入的計(jì)數(shù)信號(hào)的要求對(duì)外部輸入的計(jì)數(shù)信號(hào)的要求 計(jì)數(shù)器模式時(shí),計(jì)數(shù)脈沖來自外部輸入引腳計(jì)數(shù)器模式時(shí),計(jì)數(shù)脈沖來自外部輸入引腳T0或或T1。當(dāng)輸入信號(hào)產(chǎn)。當(dāng)輸入信號(hào)產(chǎn)生負(fù)跳變時(shí),計(jì)數(shù)值增生負(fù)跳變時(shí),計(jì)數(shù)值增1。每個(gè)機(jī)器周期。每個(gè)機(jī)器周期S5P2期間,都對(duì)外

18、部輸入引腳期間,都對(duì)外部輸入引腳T0或或T1進(jìn)行采樣。如在第進(jìn)行采樣。如在第1個(gè)機(jī)器周期中采得值為個(gè)機(jī)器周期中采得值為1,而在下一個(gè)機(jī)器周期中,而在下一個(gè)機(jī)器周期中采得的值為采得的值為0,則在緊跟著的再下一個(gè)機(jī)器周期,則在緊跟著的再下一個(gè)機(jī)器周期S3P1期間,計(jì)數(shù)器加期間,計(jì)數(shù)器加1。由。由于確認(rèn)一次負(fù)跳變要花于確認(rèn)一次負(fù)跳變要花2個(gè)機(jī)器周期,即個(gè)機(jī)器周期,即24個(gè)振蕩周期,因此外部輸入的計(jì)個(gè)振蕩周期,因此外部輸入的計(jì)數(shù)脈沖的最高頻率為系統(tǒng)振蕩器頻率數(shù)脈沖的最高頻率為系統(tǒng)振蕩器頻率1/24。 21 如選用如選用6MHz晶體晶體,允許輸入脈沖頻率最高為,允許輸入脈沖頻率最高為250kHz。如選用

19、。如選用12MHz頻頻率晶體,則可輸入最高頻率率晶體,則可輸入最高頻率500kHz外部脈沖。對(duì)外輸入信號(hào)占空比沒有限外部脈沖。對(duì)外輸入信號(hào)占空比沒有限制,但為確保某一給定電平在變化前能被采樣制,但為確保某一給定電平在變化前能被采樣1次,則次,則該該電平至少保持電平至少保持1個(gè)個(gè)機(jī)器周期機(jī)器周期。故對(duì)外部輸入信號(hào)要求。故對(duì)外部輸入信號(hào)要求見見圖圖7-12,圖中,圖中Tcy為機(jī)器周期。為機(jī)器周期。圖圖7-12 對(duì)外部計(jì)數(shù)輸入信號(hào)的要求對(duì)外部計(jì)數(shù)輸入信號(hào)的要求237.4 7.4 定時(shí)器定時(shí)器/ /計(jì)數(shù)器的編程和應(yīng)用計(jì)數(shù)器的編程和應(yīng)用 4 4種工作方式中,方式種工作方式中,方式0 0與方式與方式1 1

20、基本相同,只是計(jì)數(shù)位數(shù)不同。方基本相同,只是計(jì)數(shù)位數(shù)不同。方式式0 0為為1313位,方式位,方式1 1為為1616位。由于方式位。由于方式0 0是為兼容是為兼容MCS-48MCS-48而設(shè),計(jì)數(shù)初而設(shè),計(jì)數(shù)初值計(jì)算復(fù)雜,所以在實(shí)際應(yīng)用中,一般不用方式值計(jì)算復(fù)雜,所以在實(shí)際應(yīng)用中,一般不用方式0 0,常采用方式,常采用方式1 1。7.4.1 P17.4.1 P1口控制口控制8 8只只LEDLED每每0.5s0.5s閃亮一次閃亮一次 【例【例7-17-1】在在AT89S51AT89S51的的P1P1口上接有口上接有8 8只只LEDLED,原理電路見,原理電路見圖圖7-7-1313。采用。采用T0

21、T0方式方式1 1的定時(shí)中斷方式,使的定時(shí)中斷方式,使P1P1口外接的口外接的8 8只只LEDLED每每0.5s0.5s閃亮閃亮一次一次。24圖7-13 方式1定時(shí)中斷控制LED閃亮(1)設(shè)置)設(shè)置TMOD寄存器寄存器 T0工作在方式工作在方式1,應(yīng)使,應(yīng)使TMOD寄存器的寄存器的M1、M0=01;應(yīng)設(shè)置;應(yīng)設(shè)置C/T*=0,為定,為定時(shí)器模式;對(duì)時(shí)器模式;對(duì)T0的的運(yùn)行控制僅由運(yùn)行控制僅由TR0來控制來控制,應(yīng)使相應(yīng)的,應(yīng)使相應(yīng)的GATE位為位為0。定時(shí)。定時(shí)器器T1不使用,各相關(guān)位均設(shè)為不使用,各相關(guān)位均設(shè)為0。所以,。所以,TMOD寄存器應(yīng)初始化為寄存器應(yīng)初始化為0 x01。(2)計(jì)算定

22、時(shí)器)計(jì)算定時(shí)器T0的計(jì)數(shù)初值的計(jì)數(shù)初值 設(shè)定時(shí)時(shí)間設(shè)定時(shí)時(shí)間5ms(即(即5 000s),設(shè)),設(shè)T0計(jì)數(shù)計(jì)數(shù)初值為初值為X,假設(shè)晶振的頻率為,假設(shè)晶振的頻率為11.059 2MHz,則定時(shí)時(shí)間為:,則定時(shí)時(shí)間為: 25 定時(shí)時(shí)間定時(shí)時(shí)間=(216X)12/晶振頻率晶振頻率 則則 5 000=(216 X) 12/11.059 2 得得 X = 60 928 轉(zhuǎn)換成十六進(jìn)制轉(zhuǎn)換成十六進(jìn)制:0 xee00,其中,其中0 xee裝入裝入TH0,0 x00裝入裝入TL0。(3)設(shè)置)設(shè)置IE寄存器寄存器 本例由于采用定時(shí)器本例由于采用定時(shí)器T0中斷,因此需將中斷,因此需將IE寄存器中的寄存器中的E

23、A、ET0位置位置1。(4)啟動(dòng)和停止定時(shí)器)啟動(dòng)和停止定時(shí)器T0 將定時(shí)器控制寄存器將定時(shí)器控制寄存器TCON中的中的TR0=1,則啟動(dòng)定時(shí)器,則啟動(dòng)定時(shí)器T0;TR0=0,則,則停止定時(shí)器停止定時(shí)器T0定時(shí)。定時(shí)。參考程序:參考程序:#includechar i=100;void main ()TMOD=0 x01;/定時(shí)器定時(shí)器T0為為方式方式1TH0=0 xee;/設(shè)置定時(shí)器初值設(shè)置定時(shí)器初值TL0=0 x00;27P1=0 x00;/P1口口8個(gè)個(gè)LED點(diǎn)亮點(diǎn)亮EA=1;/總中斷開總中斷開ET0=1;/開開T0中斷中斷TR0=1;/啟動(dòng)啟動(dòng)T0while(1);/循環(huán)等待循環(huán)等待;v

24、oid timer0() interrupt 1/T0中斷程序中斷程序TH0=0 xee;/重新賦初值重新賦初值TL0=0 x00;i-;/循環(huán)次數(shù)減循環(huán)次數(shù)減1if(i=0)P1=P1;/P1口按位取反口按位取反i=100;/重置循環(huán)次數(shù)重置循環(huán)次數(shù)7.4.2 計(jì)數(shù)器的應(yīng)用計(jì)數(shù)器的應(yīng)用【例【例7-2】如如圖圖7-14,T1采用計(jì)數(shù)模式,方式采用計(jì)數(shù)模式,方式1中斷,計(jì)數(shù)輸入引腳中斷,計(jì)數(shù)輸入引腳T1(P3.5)上外接按鈕開關(guān),作為計(jì)數(shù)信號(hào)輸入。)上外接按鈕開關(guān),作為計(jì)數(shù)信號(hào)輸入。按按4次按鈕開關(guān)后次按鈕開關(guān)后,P1口的口的8只只LED閃爍不停閃爍不停。(1)設(shè)置)設(shè)置TMOD寄存器寄存器29

25、T1工作在工作在方式方式1,應(yīng)使,應(yīng)使TMOD的的M1、M0=01;設(shè)置;設(shè)置C/T*=1,為,為計(jì)數(shù)器計(jì)數(shù)器模式模式;對(duì);對(duì)T0運(yùn)行控制僅由運(yùn)行控制僅由TR0來控制,應(yīng)使來控制,應(yīng)使GATE0=0。定時(shí)器。定時(shí)器T0不使用,不使用,各相關(guān)位均設(shè)為各相關(guān)位均設(shè)為0。所以,。所以,TMOD寄存器應(yīng)初始化為寄存器應(yīng)初始化為0 x50。(2)計(jì)算定時(shí)器)計(jì)算定時(shí)器T1的計(jì)數(shù)初值的計(jì)數(shù)初值由于每按由于每按1次按鈕開關(guān),計(jì)數(shù)次按鈕開關(guān),計(jì)數(shù)1次,次,按按4次后,次后,P1口口的的8只只LED閃爍不停閃爍不停。因此。因此計(jì)數(shù)器初值計(jì)數(shù)器初值為為65 5364=65 532,將其轉(zhuǎn)換成十六進(jìn)制后為,將其轉(zhuǎn)換

26、成十六進(jìn)制后為0 xfffc,所以,所以,TH0=0 xff,TL0=0 xfc。30圖圖7-14 由外部計(jì)數(shù)輸入信號(hào)控制由外部計(jì)數(shù)輸入信號(hào)控制LED的閃爍的閃爍(3)設(shè)置)設(shè)置IE寄存器寄存器 本例由于采用本例由于采用T1中斷,因此需將中斷,因此需將IE寄存器的寄存器的EA、ET1位置位置1。(4)啟動(dòng)和停止定時(shí)器)啟動(dòng)和停止定時(shí)器T1 將寄存器將寄存器TCON中中TR1=1,則啟動(dòng),則啟動(dòng)T1計(jì)數(shù);計(jì)數(shù);TR1=0,則停止,則停止T1計(jì)數(shù)。計(jì)數(shù)。參考程序如下:參考程序如下: #include void Delay(unsigned int i)/定義定義延時(shí)函數(shù)延時(shí)函數(shù)Delay( ),i

27、是形是形 /式參數(shù),不能賦初值式參數(shù),不能賦初值unsigned int j;for(;i0;i-)/變量變量i由實(shí)際參數(shù)傳入一個(gè)值由實(shí)際參數(shù)傳入一個(gè)值/因此因此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ù)TH1=0 xff;/向向TH1寫入寫入初值的初值的高高8位位TL1=0 xfc;/向向TL1寫入寫入初值的初值的低低8位位EA=1; /總中斷允許總中斷允許3334ET1=1; /定時(shí)器定時(shí)器T1中斷允許中斷允許 TR1=1; /啟動(dòng)定時(shí)器啟動(dòng)定時(shí)器T1

28、 while(1) ; /無窮循環(huán),等待計(jì)數(shù)中斷無窮循環(huán),等待計(jì)數(shù)中斷 void T1_int(void) interrupt 3 /T1中斷函數(shù)中斷函數(shù)for(;)/無限循環(huán)無限循環(huán) P1=0 xff;/8位位LED全滅全滅 Delay(500) ;/延時(shí)延時(shí)500ms P1=0;/8位位LED全亮全亮 Delay(500); /延時(shí)延時(shí)500ms 357.4.3 控制控制P1.0產(chǎn)生周期為產(chǎn)生周期為2ms的方波的方波 【例【例7-37-3】假設(shè)系統(tǒng)時(shí)鐘為假設(shè)系統(tǒng)時(shí)鐘為12MHz12MHz,設(shè)計(jì)電路并編寫程序?qū)崿F(xiàn)從,設(shè)計(jì)電路并編寫程序?qū)崿F(xiàn)從P1.0P1.0引腳上輸出一個(gè)引腳上輸出一個(gè)周期為周

29、期為2ms2ms的方波的方波,見見圖圖7-157-15。 要在要在P1.0P1.0上產(chǎn)生周期為上產(chǎn)生周期為2ms2ms的方波,的方波,定時(shí)器應(yīng)產(chǎn)生定時(shí)器應(yīng)產(chǎn)生1ms1ms的定時(shí)中斷的定時(shí)中斷,定時(shí)時(shí)間到則在中斷服務(wù)程序中定時(shí)時(shí)間到則在中斷服務(wù)程序中對(duì)對(duì)P1.0P1.0求求反反。使用定時(shí)器。使用定時(shí)器T0T0,方式,方式1 1定時(shí)定時(shí)中斷,中斷,GATEGATE不起作用。不起作用。 本例的原理電路本例的原理電路見見圖圖7-167-16。其中在其中在P1.0P1.0引腳接有引腳接有虛擬示波器虛擬示波器,用來,用來觀察產(chǎn)生的周期觀察產(chǎn)生的周期2ms2ms的方波。的方波。圖圖7-15 定時(shí)器控制定時(shí)器

30、控制P1.0輸出一個(gè)周期輸出一個(gè)周期2ms方波方波37圖圖7-16 定時(shí)器控制定時(shí)器控制P1.0輸出周期輸出周期2ms的方波的原理電路的方波的原理電路38下面來下面來計(jì)算計(jì)算T0T0初值初值X X :設(shè)設(shè)T0T0的初值為的初值為X X,有,有 (2(21616X X ) )1 110106 6=1=110103 3即即 65 65 536536X X=1=1 000000 得得X X=64 536=64 536,化為,化為1616進(jìn)制數(shù)就是進(jìn)制數(shù)就是0 xfc180 xfc18。將。將高高8 8位位0 xfc0 xfc裝入裝入TH0TH0,低低8 8位位0 x180 x18裝入裝入TL0TL0

31、。參考程序如下:參考程序如下:#include #include /頭文件頭文件reg51.hreg51.hsbit P1_0=P10;sbit P1_0=P10;/定義特殊功能寄存器定義特殊功能寄存器P1P1的位變量的位變量P1_0P1_0void main(void)void main(void)/主程序主程序 TMOD=0 x01;TMOD=0 x01;/設(shè)置設(shè)置T0T0為方式為方式1 1TR0=1;TR0=1;/接通接通T0T0while(1)while(1)/無限循環(huán)無限循環(huán) 39TH0=0 xfc;TH0=0 xfc;/置置T0T0高高8 8位初值位初值TL0=0 x18;TL0=

32、0 x18;/置置T0T0低低8 8位初值位初值dowhile(!TF0);dowhile(!TF0); / /TF0TF0為為0 0原地循環(huán)原地循環(huán),為為1 1則則T0T0溢出,往下執(zhí)溢出,往下執(zhí)行行P1_0=!P1_0;P1_0=!P1_0;/ P1.0/ P1.0狀態(tài)求反狀態(tài)求反TF0=0;TF0=0;/TF0/TF0標(biāo)志清零標(biāo)志清零 仿真時(shí),右鍵單擊虛擬數(shù)字示波器,出現(xiàn)下拉菜單,點(diǎn)擊仿真時(shí),右鍵單擊虛擬數(shù)字示波器,出現(xiàn)下拉菜單,點(diǎn)擊“Digital Digital oscilloscopeoscilloscope”選項(xiàng),就會(huì)在數(shù)字示波器上顯示選項(xiàng),就會(huì)在數(shù)字示波器上顯示P1.0P1.0

33、引腳輸出引腳輸出周期為周期為2ms2ms方波方波,如如圖圖7-177-17所示。所示。40圖7-17 虛擬數(shù)字示波器顯示的2ms的方波波形7.4.4 利用利用T1控制發(fā)出控制發(fā)出1kHz的音頻信號(hào)的音頻信號(hào) 【例【例7-4】利用利用T1的中斷控制的中斷控制P1.7引腳引腳輸出頻率為輸出頻率為1kHz方波音頻信號(hào)方波音頻信號(hào),驅(qū)動(dòng)蜂鳴器發(fā)聲。系統(tǒng)時(shí)鐘為,驅(qū)動(dòng)蜂鳴器發(fā)聲。系統(tǒng)時(shí)鐘為12MHz。方波音頻信號(hào)周期方波音頻信號(hào)周期1ms,因此,因此T1的的定時(shí)中斷時(shí)間為定時(shí)中斷時(shí)間為0.5 ms,進(jìn)入中斷服務(wù)程序后,對(duì),進(jìn)入中斷服務(wù)程序后,對(duì)P1.7求反。電路求反。電路見見圖圖7-18。 先計(jì)算先計(jì)算T

34、1初值,系統(tǒng)時(shí)鐘為初值,系統(tǒng)時(shí)鐘為12MHz,則,則機(jī)器機(jī)器周期周期為為1s。1kHz音頻音頻信號(hào)周期為信號(hào)周期為1ms,要定時(shí)計(jì)數(shù)的,要定時(shí)計(jì)數(shù)的脈沖數(shù)為脈沖數(shù)為a。則。則T1初值初值: TH1=(65 536 a) /256; TL1=(65 536 a) %2564142圖圖7-18 控制蜂鳴器發(fā)出控制蜂鳴器發(fā)出1kHz的音頻信號(hào)的音頻信號(hào)參考程序如下:參考程序如下:#include #include /包含頭文件包含頭文件sbit sound=P17; sbit sound=P17; /將將soundsound位定義為位定義為P1.7P1.7腳腳#define #define f1(a

35、)f1(a) (65536-a)/256(65536-a)/256/定義裝入定義裝入定時(shí)器高定時(shí)器高8 8位時(shí)間常數(shù)位時(shí)間常數(shù)#define #define f2(a)f2(a) (65536-a)%256(65536-a)%256 /定義裝入定義裝入定時(shí)器低定時(shí)器低8 8位時(shí)間常數(shù)位時(shí)間常數(shù)unsigned int i=500; unsigned int i=500; unsigned int j=0; unsigned int j=0; void main(void)void main(void) EA=1; EA=1; /開總中斷開總中斷. . ET1=1; ET1=1; /允許定時(shí)器允

36、許定時(shí)器T1T1中斷中斷 . . TMOD=0 x10; TMOD=0 x10; /TMOD=0001 000B/TMOD=0001 000B,使用,使用T1T1的方式的方式1 1定時(shí)定時(shí) TH1=f1(i);TH1=f1(i); /給給T1T1高高8 8位賦初值位賦初值. . TL1=f2(i);TL1=f2(i); /給給T1T1低低8 8位賦初值位賦初值. . TR1=1; TR1=1; /啟動(dòng)啟動(dòng)T1T1 while(1) while(1) 44 /循環(huán)等待循環(huán)等待 i=460; i=460; while(j2000);while(j2000); j=0;j=0; i=360; i=3

37、60; while(j2000);while(j2000); j=0;j=0; void T1(void) interrupt 3 using 0void T1(void) interrupt 3 using 0/定時(shí)器定時(shí)器T1T1中斷函數(shù)中斷函數(shù) TR1= 0; TR1= 0; /關(guān)閉關(guān)閉T1T1 sound=sound=soundsound; ; /P1.7P1.7輸出求反輸出求反 TH1TH1=f1(i); =f1(i); /T1/T1的高的高8 8位重新賦初值位重新賦初值. . TL1TL1=f2(i); =f2(i); /T1/T1的低的低8 8位重新賦初值位重新賦初值. .45j

38、+;j+; TR1=1; TR1=1; /啟動(dòng)定時(shí)器啟動(dòng)定時(shí)器T1T1 7.4.5 LED數(shù)碼管秒表的制作數(shù)碼管秒表的制作 【例【例7-57-5】用用2 2位數(shù)碼管顯示計(jì)時(shí)時(shí)間,最小計(jì)時(shí)單位為位數(shù)碼管顯示計(jì)時(shí)時(shí)間,最小計(jì)時(shí)單位為“百毫百毫秒秒”,計(jì)時(shí)范圍計(jì)時(shí)范圍0.10.19.9s9.9s。當(dāng)。當(dāng)?shù)诘? 1次次按一下計(jì)時(shí)功能鍵時(shí),秒表開始按一下計(jì)時(shí)功能鍵時(shí),秒表開始計(jì)時(shí)并顯示;計(jì)時(shí)并顯示;第第2 2次次按一下計(jì)時(shí)功能鍵時(shí),停止計(jì)時(shí),將計(jì)時(shí)的時(shí)間值按一下計(jì)時(shí)功能鍵時(shí),停止計(jì)時(shí),將計(jì)時(shí)的時(shí)間值送到數(shù)碼管顯示;如果計(jì)時(shí)到送到數(shù)碼管顯示;如果計(jì)時(shí)到9.9s9.9s,將重新開始從,將重新開始從0 0計(jì)時(shí)

39、;第計(jì)時(shí);第3 3次按一次按一下計(jì)時(shí)功能鍵,秒表清下計(jì)時(shí)功能鍵,秒表清0 0。再次按一下計(jì)時(shí)功能鍵,則重復(fù)上述計(jì)時(shí)過。再次按一下計(jì)時(shí)功能鍵,則重復(fù)上述計(jì)時(shí)過程。程。 本秒表應(yīng)用定時(shí)器模式,計(jì)時(shí)范圍本秒表應(yīng)用定時(shí)器模式,計(jì)時(shí)范圍0.10.19.9s9.9s。此外還涉及如。此外還涉及如何編寫控制何編寫控制LEDLED數(shù)碼管顯示的程序。數(shù)碼管顯示的程序。 原理電路原理電路見見圖圖7-197-19。46圖圖7-19 LED數(shù)碼管顯示的秒表原理電路及仿真數(shù)碼管顯示的秒表原理電路及仿真47參考程序如下:參考程序如下:#include #include /頭文件頭文件unsigned char code u

40、nsigned char code discode1= discode1= 0 xbf,0 x86,0 xdb,0 xcf,0 xe6,0 xed,0 xfd,0 x87,0 xff,0 xef;0 xbf,0 x86,0 xdb,0 xcf,0 xe6,0 xed,0 xfd,0 x87,0 xff,0 xef; /數(shù)碼管顯示數(shù)碼管顯示0 09 9的段碼表的段碼表, , 帶小數(shù)點(diǎn)帶小數(shù)點(diǎn)unsigned char code unsigned char code discode2=discode2=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,

41、0 x7f,0 x6f;0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f; /數(shù)碼管顯示數(shù)碼管顯示0 09 9的段碼表,不帶小數(shù)點(diǎn)的段碼表,不帶小數(shù)點(diǎn)unsigned char unsigned char timertimer=0;=0;/timertimer記錄中斷次數(shù)記錄中斷次數(shù)unsigned char unsigned char secondsecond; ; /secondsecond儲(chǔ)存秒儲(chǔ)存秒unsigned char unsigned char keykey=0;=0;/keykey記錄按鍵次數(shù)記錄按鍵次數(shù)m

42、ain()main()/主函數(shù)主函數(shù) TMODTMOD=0 x01;=0 x01;/定時(shí)器定時(shí)器T0T0方式方式1 1定時(shí)定時(shí) ET0ET0=1; =1; /允許定時(shí)器允許定時(shí)器T0T0中斷中斷48EA=1; EA=1; /總中斷允許總中斷允許second=0; second=0; /設(shè)初始值設(shè)初始值P0=discode1second/10;P0=discode1second/10; /顯示顯示秒位秒位0 0P2=discode2second%10; P2=discode2second%10; /顯示顯示0.1s0.1s位位0 0while(1)while(1) / /循環(huán)循環(huán) if(if(P

43、3&0 x80P3&0 x80)=0 x00)=0 x00)/當(dāng)按鍵被按下時(shí)當(dāng)按鍵被按下時(shí) key+;key+;/按鍵次數(shù)加按鍵次數(shù)加1 1switch(key)switch(key)/根據(jù)按鍵次數(shù)分三種情況根據(jù)按鍵次數(shù)分三種情況 case case 1 1: :/第一次按下第一次按下為啟動(dòng)秒表計(jì)時(shí)為啟動(dòng)秒表計(jì)時(shí)TH0=0 xee; TH0=0 xee; /向向TH0TH0寫入初值的高寫入初值的高8 8位位49TL0=0 x00;TL0=0 x00; /向向TL0TL0寫入初值的低寫入初值的低8 8位,定時(shí)位,定時(shí)5ms5msTR0=1; TR0=1; /啟動(dòng)定時(shí)器啟動(dòng)定時(shí)器T0T0break

44、;break;case case 2 2: : /按下兩次暫定秒表按下兩次暫定秒表TR0=0; TR0=0; /關(guān)閉定時(shí)器關(guān)閉定時(shí)器T0T0break;break;case case 3 3: : /按下按下3 3次秒表清次秒表清0 0key=0; key=0; /按鍵次數(shù)清按鍵次數(shù)清second=0; second=0; /秒表清秒表清0 0P0=discode1second/10;P0=discode1second/10; /顯示秒位顯示秒位0 0 P2=discode2second%10;P2=discode2second%10; /顯示顯示0.1s0.1s位位0 0break;brea

45、k; while(P3&0 x80)=0 x00); while(P3&0 x80)=0 x00); /如果按鍵時(shí)間過長(zhǎng)在此循環(huán)如果按鍵時(shí)間過長(zhǎng)在此循環(huán) void int_T0() interrupt 1 using 0 void int_T0() interrupt 1 using 0 /定時(shí)器定時(shí)器T0T0中斷函數(shù)中斷函數(shù) TR0=0;TR0=0; /停止計(jì)時(shí),執(zhí)行以下操作(會(huì)帶來計(jì)時(shí)誤停止計(jì)時(shí),執(zhí)行以下操作(會(huì)帶來計(jì)時(shí)誤差)差)TH0=0 xeeTH0=0 xee; ; /向向TH0TH0寫入初值的高寫入初值的高8 8位位TL0=0 x00TL0=0 x00; ; /向向TL0TL0寫入

46、初值的低寫入初值的低8 8位,位,定時(shí)定時(shí)5ms5mstimer+; timer+; /記錄中斷次數(shù)記錄中斷次數(shù)if (timer=20)if (timer=20) /中斷中斷2020次次,共計(jì)時(shí),共計(jì)時(shí)2020* *5ms=100ms5ms=100ms= =0.1s0.1s timer=0; timer=0; /中斷次數(shù)清中斷次數(shù)清0 0second+; second+; /加加0.1s0.1sP0P0=discode1=discode1second/10second/10; ; /根據(jù)計(jì)時(shí),即時(shí)顯示秒根據(jù)計(jì)時(shí),即時(shí)顯示秒位位P2P2=discode2=discode2secondsecon

47、d% %1010; ; /根據(jù)計(jì)時(shí),即時(shí)顯示根據(jù)計(jì)時(shí),即時(shí)顯示0.1s0.1s位位 5051if(second=99) /當(dāng)計(jì)時(shí)到當(dāng)計(jì)時(shí)到9.9s時(shí)時(shí)TR0=0;/停止計(jì)時(shí)停止計(jì)時(shí)second=0;/秒數(shù)清秒數(shù)清0key=2; /按鍵數(shù)置按鍵數(shù)置2,當(dāng)再次按下按鍵時(shí),當(dāng)再次按下按鍵時(shí),/key+,即即key=3,秒表清,秒表清0復(fù)原復(fù)原 else/計(jì)時(shí)不到計(jì)時(shí)不到9.9s時(shí)時(shí)TR0=1;/啟動(dòng)定時(shí)器繼續(xù)計(jì)時(shí)啟動(dòng)定時(shí)器繼續(xù)計(jì)時(shí)7.4.6 測(cè)量脈沖寬度測(cè)量脈沖寬度門控位門控位GATEx的應(yīng)用的應(yīng)用 介紹門控位介紹門控位GATE應(yīng)用。應(yīng)用。利用利用GATE測(cè)量測(cè)量INT1*腳上腳上正脈沖寬度正脈沖寬

48、度。 【例【例7-6】門控位門控位GATE1可使可使T1啟動(dòng)計(jì)數(shù)受啟動(dòng)計(jì)數(shù)受INT1*控制,當(dāng)控制,當(dāng)GATE1=1,TR1=1時(shí)時(shí),只有只有INT1*引腳輸入高電平時(shí)引腳輸入高電平時(shí),T1才被允許計(jì)數(shù)。利才被允許計(jì)數(shù)。利用用該該功能,可測(cè)量功能,可測(cè)量INT1*腳正脈沖寬度,方法腳正脈沖寬度,方法見見圖圖7-20。 原理電路原理電路見見圖圖7-21,圖中省略復(fù)位電路和時(shí)鐘電路。利用門控位,圖中省略復(fù)位電路和時(shí)鐘電路。利用門控位GATE1來測(cè)量來測(cè)量INT1*腳上正脈沖寬度腳上正脈沖寬度,并在并在6位數(shù)碼管上以機(jī)器周期數(shù)顯示位數(shù)碼管上以機(jī)器周期數(shù)顯示。對(duì)被測(cè)量脈沖信號(hào)寬度。對(duì)被測(cè)量脈沖信號(hào)寬度

49、,要求能通過旋轉(zhuǎn)信號(hào)源旋鈕可調(diào)。要求能通過旋轉(zhuǎn)信號(hào)源旋鈕可調(diào)。52圖圖7-20 利用利用GATE位測(cè)量正脈沖的寬度位測(cè)量正脈沖的寬度54圖圖7-21 利用利用GATE位測(cè)量位測(cè)量 INT1*引腳上正脈沖的寬度的原理電路引腳上正脈沖的寬度的原理電路參考程序如下:#include#include#define uint unsigned int#define uint unsigned int#define uchar unsigned char#define uchar unsigned charsbit P3_3=P33;sbit P3_3=P33;/位變量定義位變量定義uchar count

50、_high; uchar count_high; /定義計(jì)數(shù)變量,用來讀取定義計(jì)數(shù)變量,用來讀取TH0TH0uchar count_low;uchar count_low;/定義計(jì)數(shù)變量,用來讀取定義計(jì)數(shù)變量,用來讀取TL0TL0uint num;uint num;uchar shiwan, wan, qian, bai, shi, ge;uchar shiwan, wan, qian, bai, shi, ge;uchar flag;uchar flag;uchar code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7

51、f,0 x6f;uchar code table=0 x3f,0 x06,0 x5b,0 x4f,0 x66,0 x6d,0 x7d,0 x07,0 x7f,0 x6f; /共陰極數(shù)碼管段碼表共陰極數(shù)碼管段碼表void delay(uint z)void delay(uint z)/延時(shí)函數(shù)延時(shí)函數(shù)55uint x,y;for(x=z;x0;x-)for(y=110;y0;y-);void display(uint a,uint b,uint c,uint d,uint e,uint f) /數(shù)碼管顯示函數(shù)數(shù)碼管顯示函數(shù)P2=0 xfe; P0=tablef;delay(2);P2=0 xfd

52、;P0=tablee;delay(2);P2=0 xfb;P0=tabled;56delay(2);P2=0 xf7;P0=tablec;delay(2);P2=0 xef;P0=tableb;delay(2);P2=0 xdf;P0=tablea;delay(2);void read_count() /讀取計(jì)數(shù)寄存器的內(nèi)容讀取計(jì)數(shù)寄存器的內(nèi)容5758do count_high=TH1; /讀高字節(jié)讀高字節(jié) count_low=TL1;/讀低字節(jié)讀低字節(jié) while (count_high!=TH1);num=count_high*256+count_low; /*可將兩字節(jié)的機(jī)器周期數(shù)進(jìn)行顯

53、示處理可將兩字節(jié)的機(jī)器周期數(shù)進(jìn)行顯示處理* */ /void main( )while(1)flag=0; TMOD=0 x90;/設(shè)置定時(shí)器設(shè)置定時(shí)器T1T1為方式為方式1 1定時(shí)定時(shí)TH1=0;/向定時(shí)器向定時(shí)器T1寫入計(jì)數(shù)初值寫入計(jì)數(shù)初值 TL1=0;while(P3_3=1); /等待等待INT1*變低變低TR1=1;/如果如果INT1*為低,啟動(dòng)為低,啟動(dòng)T1(未真正開始計(jì)數(shù))(未真正開始計(jì)數(shù))while(P3_3=0); /等待等待INT1* 變高,變高后變高,變高后T1真正開始計(jì)數(shù)真正開始計(jì)數(shù)while(P3_3=1); /等待等待INT1*變低,變低后變低,變低后T1停止計(jì)數(shù)停

54、止計(jì)數(shù)TR1=0;read_count(); /讀計(jì)數(shù)寄存器內(nèi)容的函數(shù)讀計(jì)數(shù)寄存器內(nèi)容的函數(shù)shiwan=num/100000;wan=num%100000/10000;qian=num%10000/1000;bai=num%1000/100;shi=num%100/10;59ge=num%10;while(flag!=100) /減小刷新頻率減小刷新頻率flag+;display(ge,shi,bai,qian,wan,shiwan); 執(zhí)行上述程序仿真,把執(zhí)行上述程序仿真,把INT1*引腳上出現(xiàn)的引腳上出現(xiàn)的正脈沖寬度正脈沖寬度顯示在顯示在LED數(shù)碼數(shù)碼管顯示器上管顯示器上。晶振頻率為。晶振頻率為12MHz,如果默認(rèn)信號(hào)源輸出頻率為,如果默認(rèn)信號(hào)源輸出頻率為1kHz的方的方波,則波,則數(shù)碼管顯示為數(shù)碼管顯示為500。 注意:在仿真時(shí),偶爾顯示注意:在仿真時(shí),偶爾顯示501是因?yàn)樾盘?hào)源的問題,若將信號(hào)源換是因?yàn)樾盘?hào)源的問題,若將信號(hào)源換成頻率固定的激勵(lì)源則不會(huì)出現(xiàn)此問題。成頻率固定的激勵(lì)源則不會(huì)出現(xiàn)此問題。60617.4.7 LCD時(shí)鐘的設(shè)計(jì)時(shí)鐘的設(shè)計(jì) 【例【例7-77-7】使用定時(shí)器實(shí)現(xiàn)一個(gè)使用定時(shí)器實(shí)現(xiàn)一個(gè)LCDLCD顯示時(shí)鐘。采用顯示時(shí)鐘。采用

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(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)論