單片微機(jī)5章-2_第1頁
單片微機(jī)5章-2_第2頁
單片微機(jī)5章-2_第3頁
單片微機(jī)5章-2_第4頁
單片微機(jī)5章-2_第5頁
已閱讀5頁,還剩97頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、微型計(jì)算機(jī)技術(shù)與應(yīng)用 70課堂學(xué)時(shí)課堂學(xué)時(shí)+18實(shí)驗(yàn)學(xué)時(shí)實(shí)驗(yàn)學(xué)時(shí)5.2定時(shí)器/計(jì)數(shù)器及其應(yīng)用定時(shí)器定時(shí)器/計(jì)數(shù)器可以實(shí)現(xiàn)下列功能:計(jì)數(shù)器可以實(shí)現(xiàn)下列功能:(1)定時(shí)操作)定時(shí)操作(2)測量外部輸入信號)測量外部輸入信號(3)定時(shí)輸出)定時(shí)輸出(4)監(jiān)視系統(tǒng)正常工作)監(jiān)視系統(tǒng)正常工作5.2.1定時(shí)器定時(shí)器/計(jì)算器的一般結(jié)構(gòu)和工作原理計(jì)算器的一般結(jié)構(gòu)和工作原理n組成:一個(gè)位計(jì)數(shù)器、計(jì)數(shù)時(shí)鐘源控制電組成:一個(gè)位計(jì)數(shù)器、計(jì)數(shù)時(shí)鐘源控制電路、狀態(tài)和控制寄存器;路、狀態(tài)和控制寄存器;n計(jì)數(shù)方式:加計(jì)數(shù)和減計(jì)數(shù);計(jì)數(shù)方式:加計(jì)數(shù)和減計(jì)數(shù);n時(shí)鐘來源:內(nèi)部時(shí)鐘和外部時(shí)鐘。時(shí)鐘來源:內(nèi)部時(shí)鐘和外部時(shí)鐘。圖5-1

2、2 定時(shí)器/計(jì)數(shù)器的一般結(jié)構(gòu)一、定時(shí)器方式一、定時(shí)器方式 對于一個(gè)對于一個(gè)N位的加位的加1計(jì)數(shù)器,若計(jì)數(shù)時(shí)鐘計(jì)數(shù)器,若計(jì)數(shù)時(shí)鐘f是已知,則從初值是已知,則從初值a開始加開始加1計(jì)數(shù)至溢出所占計(jì)數(shù)至溢出所占用的時(shí)間為:用的時(shí)間為:)(*12afTN二、計(jì)數(shù)器方式二、計(jì)數(shù)器方式 時(shí)鐘來源:外部時(shí)鐘源時(shí)鐘來源:外部時(shí)鐘源目的:對外部時(shí)鐘累加統(tǒng)計(jì)或?yàn)榱藴y量目的:對外部時(shí)鐘累加統(tǒng)計(jì)或?yàn)榱藴y量外部輸入時(shí)鐘的參數(shù)。外部輸入時(shí)鐘的參數(shù)。三、通用的多功能定時(shí)器三、通用的多功能定時(shí)器組成:一個(gè)自由運(yùn)行的組成:一個(gè)自由運(yùn)行的N位計(jì)數(shù)器,若干個(gè)位計(jì)數(shù)器,若干個(gè)輸入捕捉寄存器,若干個(gè)比較輸出寄存器,輸入捕捉寄存器,若干

3、個(gè)比較輸出寄存器,以及相應(yīng)的狀態(tài)控制寄存器。以及相應(yīng)的狀態(tài)控制寄存器。功能:功能:1.輸入捕捉方式輸入捕捉方式 2.比較輸出比較輸出 圖 5-13 多功能定時(shí)器結(jié)構(gòu)框圖1.計(jì)數(shù)計(jì)數(shù)2.3.4.5.中斷中斷6.中斷程序中讀出捕捉寄存器值,清中斷中斷程序中讀出捕捉寄存器值,清中斷7.可以計(jì)算可以計(jì)算Tcap引腳的脈沖周期引腳的脈沖周期1.輸入捕捉方式輸入捕捉方式 輸入捕捉也稱高速輸入,用于捕捉外部輸輸入捕捉也稱高速輸入,用于捕捉外部輸入信號電平跳變的時(shí)間入信號電平跳變的時(shí)間2.比較輸出比較輸出 比較輸出也稱高速輸出或定時(shí)輸出,使輸比較輸出也稱高速輸出或定時(shí)輸出,使輸出引腳出引腳Tcmp在指定時(shí)間輸

4、出指定的電平在指定時(shí)間輸出指定的電平四、監(jiān)視定時(shí)器四、監(jiān)視定時(shí)器WDT功能:功能: 當(dāng)當(dāng)CPU受到干擾而工作不正常時(shí),監(jiān)視定時(shí)受到干擾而工作不正常時(shí),監(jiān)視定時(shí)器溢出產(chǎn)生復(fù)位信號,使系統(tǒng)恢復(fù)正常工作。器溢出產(chǎn)生復(fù)位信號,使系統(tǒng)恢復(fù)正常工作。圖圖5-15 監(jiān)視定時(shí)器一般結(jié)構(gòu)監(jiān)視定時(shí)器一般結(jié)構(gòu)5.2.2 定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T0、T1的功能和使用方法的功能和使用方法n定時(shí)定時(shí)/ /計(jì)數(shù)器的核心部件是一個(gè)加法(或減法)計(jì)數(shù)器的核心部件是一個(gè)加法(或減法)計(jì)數(shù)器,有兩種計(jì)數(shù)器,有兩種工作模式工作模式:(1 1)計(jì)數(shù)器計(jì)數(shù)器工作模式工作模式(2 2)定時(shí)器定時(shí)器工作模式工作模式n4 4種種工作方式工作方

5、式( (方式方式0-0-方式方式3)3)。定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T0、T1的結(jié)構(gòu)及控制的結(jié)構(gòu)及控制nTMODTMOD:選擇定時(shí)器選擇定時(shí)器/ /計(jì)數(shù)器計(jì)數(shù)器T0T0、T1T1的工作模式的工作模式和工作方式。和工作方式。 nTCONTCON:控制控制T0T0、T1T1的啟動(dòng)和停止計(jì)數(shù),同時(shí)的啟動(dòng)和停止計(jì)數(shù),同時(shí)包含了包含了T0T0、T1T1的狀態(tài)。的狀態(tài)。n單片機(jī)復(fù)位時(shí),兩個(gè)寄存器都清單片機(jī)復(fù)位時(shí),兩個(gè)寄存器都清0 0。n 定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T0、T1的控制的控制 在在MCS-51中,與定時(shí)中,與定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T0、T1工工作方式有關(guān)的寄存器為作方式有關(guān)的寄存器為TMOD和和TCON。其

6、。其中中TMOD控制定時(shí)控制定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T0、T1的工作方式,的工作方式,而而TCON控制定時(shí)控制定時(shí)/計(jì)數(shù)器的啟動(dòng)并記錄定時(shí)計(jì)數(shù)器的啟動(dòng)并記錄定時(shí)/計(jì)數(shù)器的溢出標(biāo)志。計(jì)數(shù)器的溢出標(biāo)志。 n一、一、工作方式控制寄存器工作方式控制寄存器TMOD 8 8位分為兩組,高位分為兩組,高4 4位控制位控制T1T1,低,低4 4位控制位控制T0T0。(1 1)GATEGATE門控位門控位 0 0:僅:僅以以TRXTRX(X=0,1X=0,1)來啟動(dòng)定時(shí)器)來啟動(dòng)定時(shí)器/ /計(jì)數(shù)器運(yùn)行。計(jì)數(shù)器運(yùn)行。1 1:用引腳用引腳INT0INT0* * ( (或或INT1INT1* *) )上的高電平和上的高電平

7、和TRXTRX兩個(gè)條兩個(gè)條 件件來啟動(dòng)定時(shí)器來啟動(dòng)定時(shí)器/ /計(jì)數(shù)器運(yùn)行。計(jì)數(shù)器運(yùn)行。(2 2) C/TC/T* *計(jì)數(shù)器模式和定時(shí)器計(jì)數(shù)器模式和定時(shí)器模式選擇位模式選擇位0 0:定時(shí)器模式。定時(shí)器模式。 1 1:計(jì)數(shù)器模式。計(jì)數(shù)器模式。(3 3)M1M1、M0M0工作方式選擇位工作方式選擇位 M1 M0 M1 M0 工工 作作 方方 式式 0 0 0 0 方式方式0 0,1313位定時(shí)器位定時(shí)器/ /計(jì)數(shù)器。計(jì)數(shù)器。 0 10 1方式方式1 1,1616位定時(shí)器位定時(shí)器/ /計(jì)數(shù)器。計(jì)數(shù)器。 1 0 1 0 方式方式2 2,8 8位常數(shù)自動(dòng)重新裝載位常數(shù)自動(dòng)重新裝載 1 1 1 1 方式方式

8、3 3,僅適用于,僅適用于T0T0,T0T0分成兩個(gè)分成兩個(gè)8 8 位計(jì)數(shù)器,位計(jì)數(shù)器,T1T1停止計(jì)數(shù)。停止計(jì)數(shù)。n二、二、定時(shí)器定時(shí)器/ /計(jì)數(shù)器控制寄存器計(jì)數(shù)器控制寄存器TCON圖4-7 TCON寄存器中與定時(shí)/計(jì)數(shù)器控制有關(guān)的位 低低4 4位與外部中斷有關(guān),已介紹。高位與外部中斷有關(guān),已介紹。高4 4位的功能如下:位的功能如下: (1) TF1(1) TF1、TF0TF0計(jì)數(shù)溢出標(biāo)志位計(jì)數(shù)溢出標(biāo)志位 (2) TR1(2) TR1、TR0TR0計(jì)數(shù)運(yùn)行控制計(jì)數(shù)運(yùn)行控制位位 1 1:啟動(dòng)定時(shí)器啟動(dòng)定時(shí)器/ /計(jì)數(shù)器工作計(jì)數(shù)器工作 0 0:停止定時(shí)器停止定時(shí)器/ /計(jì)數(shù)器工作計(jì)數(shù)器工作 n三

9、、三、 定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T0、T1的工作方式的工作方式定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T0有四種工作方式有四種工作方式(即方式即方式0、方式、方式1、方式方式2和方式和方式3),主要用于定時(shí)和計(jì)數(shù);,主要用于定時(shí)和計(jì)數(shù); 定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T1有三種工作方式有三種工作方式(即方式即方式0、方式、方式1和和方式方式2)。 方式方式0與方式與方式1工作方式基本相同,區(qū)別是方式工作方式基本相同,區(qū)別是方式0是是作為作為13位定時(shí)位定時(shí)/計(jì)數(shù)器使用,為了與計(jì)數(shù)器使用,為了與INTEL公司早期公司早期單片機(jī)兼容,現(xiàn)在不推薦使用,方式單片機(jī)兼容,現(xiàn)在不推薦使用,方式1是作為是作為16位位定時(shí)定時(shí)/計(jì)數(shù)器使

10、用。計(jì)數(shù)器使用。 圖5-16 定時(shí)/計(jì)數(shù)器T0(T1)工作于方式0的結(jié)構(gòu)v1.方式方式0(13位定時(shí)位定時(shí)/計(jì)數(shù)器)計(jì)數(shù)器)n當(dāng)M1、M0初始化為00時(shí),定時(shí)/計(jì)數(shù)器工作于方式0,即計(jì)數(shù)長度為13位。nC/TC/T* * 位決定工作模式:位決定工作模式: 0 0:開關(guān)打在上面,為定時(shí)器工作模式;:開關(guān)打在上面,為定時(shí)器工作模式; 1 1:開關(guān)打在下面,為計(jì)數(shù)器工作模式,計(jì)數(shù)脈沖為:開關(guān)打在下面,為計(jì)數(shù)器工作模式,計(jì)數(shù)脈沖為P3.4P3.4、P3.5P3.5引腳上的外部輸入脈沖,當(dāng)引腳上發(fā)生負(fù)跳變時(shí),計(jì)數(shù)引腳上的外部輸入脈沖,當(dāng)引腳上發(fā)生負(fù)跳變時(shí),計(jì)數(shù)器加器加1 1。 GATEGATE位:決定定

11、時(shí)器位:決定定時(shí)器/ /計(jì)數(shù)器的運(yùn)行取決于計(jì)數(shù)器的運(yùn)行取決于TRxTRx一個(gè)條件還是一個(gè)條件還是TRxTRx和和INTxINTx* *引腳兩個(gè)條件。引腳兩個(gè)條件。 (1 1)0 0:A A點(diǎn)(見圖點(diǎn)(見圖6-26-2)是否計(jì)數(shù))是否計(jì)數(shù), ,僅取決于僅取決于TRxTRx的狀態(tài)。的狀態(tài)。(2 2)1 1:B B點(diǎn)電位由點(diǎn)電位由INTXINTX* *的輸入電平和的輸入電平和TRXTRX的狀態(tài)這兩個(gè)條件的狀態(tài)這兩個(gè)條件來確定。是否計(jì)數(shù)是由來確定。是否計(jì)數(shù)是由TRxTRx和和INTxINTx* *二個(gè)條件來控制的。二個(gè)條件來控制的。 n定時(shí)方式:計(jì)數(shù)脈沖是系統(tǒng)時(shí)鐘信號的n分頻,即每隔n/f秒,TL0加

12、1。當(dāng)TL0溢出時(shí),TH0自動(dòng)加1;當(dāng)TH0也溢出時(shí),定時(shí)器T0中斷標(biāo)志TF0位置1。n定時(shí)時(shí)間的計(jì)算:如果定時(shí)器初值為a,則方式1的定時(shí)時(shí)間t為:sfaTosc)(*12213n例5.9 已知晶振頻率為6MHz,若使用T0方式0產(chǎn)生10ms定時(shí)中斷,試對T0進(jìn)行初始化編程。sfaTosc)(*12213Tafosc*12213Ba0011000111103192 取a的低5位值作為TL0初值,高8位值作為TH0初值。void initt0_0()TH0=0 x63;TL0=0 x18;TR0=1;IE=0 x82; 圖5-17 定時(shí)/計(jì)數(shù)器T0(T1)工作于方式1的結(jié)構(gòu)1. 工作方式工作方式

13、1(16位定時(shí)位定時(shí)/計(jì)數(shù)器)計(jì)數(shù)器)與門與門或門或門01n當(dāng)當(dāng)M1、M0初始化為初始化為01時(shí),定時(shí)時(shí),定時(shí)/計(jì)數(shù)器工作計(jì)數(shù)器工作于方式于方式1,即計(jì)數(shù)長度為,即計(jì)數(shù)長度為16位。位。nC/TC/T* * 位位決定工作模式:決定工作模式: 0 0:開關(guān)打在上面,為開關(guān)打在上面,為定時(shí)器定時(shí)器工作模式;工作模式;1 1:開關(guān)打在下面,為開關(guān)打在下面,為計(jì)數(shù)器計(jì)數(shù)器工作模式,工作模式, 計(jì)數(shù)脈沖為計(jì)數(shù)脈沖為P3.4P3.4、P3.5P3.5引腳上的外部輸入引腳上的外部輸入脈沖,當(dāng)引腳上發(fā)生負(fù)跳變時(shí),計(jì)數(shù)器加脈沖,當(dāng)引腳上發(fā)生負(fù)跳變時(shí),計(jì)數(shù)器加1 1。GATE位:位:決定定時(shí)器決定定時(shí)器/計(jì)數(shù)器的

14、計(jì)數(shù)器的運(yùn)行取決于運(yùn)行取決于TRx一個(gè)條件還是一個(gè)條件還是TRx和和INTx*引腳兩個(gè)條件引腳兩個(gè)條件。 (1)0:A點(diǎn)(見下圖點(diǎn)(見下圖5-17)是否計(jì)數(shù))是否計(jì)數(shù),僅取決僅取決于于TRx的狀態(tài)。的狀態(tài)。(2)1:B點(diǎn)電位由點(diǎn)電位由INTX*的輸入電平和的輸入電平和TRX的狀態(tài)這兩個(gè)條件來確定。的狀態(tài)這兩個(gè)條件來確定。是否計(jì)數(shù)是由是否計(jì)數(shù)是由TRx和和INTx*二個(gè)條件來控制的。二個(gè)條件來控制的。 圖5-17 定時(shí)/計(jì)數(shù)器T0(T1)工作于方式1的結(jié)構(gòu)01與門與門或門或門1A10Bn定時(shí)方式:計(jì)數(shù)脈沖是系統(tǒng)時(shí)鐘信號頻率定時(shí)方式:計(jì)數(shù)脈沖是系統(tǒng)時(shí)鐘信號頻率f的的n分頻,即每隔分頻,即每隔n/f

15、秒,秒,TL0加加1。當(dāng)。當(dāng)TL0溢出時(shí),溢出時(shí),TH0自動(dòng)加自動(dòng)加1;當(dāng);當(dāng)TH0也溢出時(shí),定時(shí)器也溢出時(shí),定時(shí)器T0中中斷標(biāo)志斷標(biāo)志TF0位置位置1。n定時(shí)時(shí)間的計(jì)算:如果定時(shí)器初值為定時(shí)時(shí)間的計(jì)算:如果定時(shí)器初值為a,則方,則方式式1的定時(shí)時(shí)間的定時(shí)時(shí)間t為:為:sfaTosc)(*12216n例例5.9 已知晶振頻率為已知晶振頻率為12MHz,T0工作于方式工作于方式1,產(chǎn),產(chǎn)生生50ms定時(shí)中斷,定時(shí)中斷,TF0為高級中斷源。試編寫主函為高級中斷源。試編寫主函數(shù)、初始化函數(shù)和中斷函數(shù),使數(shù)、初始化函數(shù)和中斷函數(shù),使P1.0產(chǎn)生周期為產(chǎn)生周期為1s的的方波。方波。sfaTosc)(*1

16、2216Tafosc*12216HCBa0315536 TL0初值為初值為0B0H,TH0初值為初值為3CH。分析:分析: 定時(shí)器定時(shí)器T0 50ms中斷一次,每中斷一次,每10次中斷次中斷500ms,P1.0取反,輸出周期為取反,輸出周期為1s的方波的方波編程如下:編程如下:#include reg52.h#define uchar unsigned char#define uint unsigned intsbit P1_0=P10;uchar T0CNT0; /中斷計(jì)數(shù)變量中斷計(jì)數(shù)變量void init_t0_1() /T0初始化函數(shù)初始化函數(shù)TH0=0 x3c; /裝入初值裝入初值TL

17、0=0 xb0;TMOD=1; /設(shè)置設(shè)置T0工作模式,定時(shí)、方式工作模式,定時(shí)、方式1I IP=2; /設(shè)置優(yōu)先級寄存器設(shè)置優(yōu)先級寄存器00000010,高級中斷,高級中斷TR0=1; /啟動(dòng)啟動(dòng)T0IE=0 x82; /設(shè)置中斷容許寄存器設(shè)置中斷容許寄存器10000010T0CNT0=0 xa; /T0CNT0=00001001 10次次void main() /主函數(shù)主函數(shù)init_t0_1(); /調(diào)調(diào)T0初始化函數(shù)初始化函數(shù)for(;); /空轉(zhuǎn)空轉(zhuǎn)void timer0(void) interrupt 1 /T0中斷函數(shù)中斷函數(shù)TL0|=0 xb0; /T0與與10110000或操

18、作,送初值或操作,送初值TH0=0 x3c; /送初值送初值 T0CNT0 - ; /自減自減1if( T0CNT0=0) / T0CNT0減到減到0,P1_0 取反取反 T0CNT0=10; /送送10給給 T0CNT0,準(zhǔn)備下一段定時(shí),準(zhǔn)備下一段定時(shí) P1_0=P1_0;n顯然,當(dāng)晶振頻率為顯然,當(dāng)晶振頻率為12 MHz,定時(shí)器初值,定時(shí)器初值為為0時(shí),方式時(shí),方式1最長定時(shí)時(shí)間為:最長定時(shí)時(shí)間為:s65536MHz 1212 02t16max?n在定時(shí)時(shí)間在定時(shí)時(shí)間t確定的情況下,定時(shí)器初值確定的情況下,定時(shí)器初值M可表示為:可表示為: t 12f2MOSC16 t 6f2MOSC16(

19、“12時(shí)鐘時(shí)鐘/機(jī)器周期機(jī)器周期”模模式式)(“6時(shí)鐘時(shí)鐘/機(jī)器周期機(jī)器周期”模式模式)在上式中,如果在上式中,如果 單位取單位取MHz,則定時(shí)時(shí)間,則定時(shí)時(shí)間t的單位是的單位是s。fOSCn定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T1工作于方式工作于方式1時(shí),與定時(shí)時(shí),與定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T0方式方式1完全相同。完全相同。n由于方式由于方式1沒有自動(dòng)重裝初值功能,沒有自動(dòng)重裝初值功能,TH0溢出后,溢出后,定時(shí)器將從定時(shí)器將從0000H開始計(jì)數(shù)。因此,當(dāng)需要重復(fù)定開始計(jì)數(shù)。因此,當(dāng)需要重復(fù)定時(shí)或計(jì)數(shù)時(shí),必須通過數(shù)據(jù)傳送指令重裝初值。為時(shí)或計(jì)數(shù)時(shí),必須通過數(shù)據(jù)傳送指令重裝初值。為了減少定時(shí)誤差,進(jìn)入定時(shí)器中斷服

20、務(wù)程序后,最了減少定時(shí)誤差,進(jìn)入定時(shí)器中斷服務(wù)程序后,最好立即重裝初值。好立即重裝初值。圖5-18 定時(shí)/計(jì)數(shù)器T0(T1)工作于方式2的結(jié)構(gòu)2. 工作方式工作方式2n 計(jì)數(shù)滿后自動(dòng)裝入計(jì)數(shù)初值計(jì)數(shù)滿后自動(dòng)裝入計(jì)數(shù)初值;n 8位定時(shí)位定時(shí)/計(jì)數(shù)器;計(jì)數(shù)器;n M1M1、M0=10M0=10。 TLXTLX作為常數(shù)緩沖器作為常數(shù)緩沖器,當(dāng),當(dāng)TLXTLX計(jì)數(shù)溢出時(shí),計(jì)數(shù)溢出時(shí),在置在置“1 1”溢出標(biāo)志溢出標(biāo)志TFXTFX的同時(shí),還的同時(shí),還自動(dòng)的將自動(dòng)的將THXTHX中的初值送至中的初值送至TLXTLX,使,使TLXTLX從初值開始重新從初值開始重新計(jì)數(shù)。定時(shí)器計(jì)數(shù)。定時(shí)器/ /計(jì)數(shù)器的方式計(jì)

21、數(shù)器的方式2 2工作過程如圖工作過程如圖所示。所示。省去用戶軟件中重裝初值的程序,精確的定時(shí)。省去用戶軟件中重裝初值的程序,精確的定時(shí)。n由于方式由于方式2的計(jì)數(shù)長度的計(jì)數(shù)長度為為8位,因此定時(shí)時(shí)間位,因此定時(shí)時(shí)間t與計(jì)數(shù)器初值與計(jì)數(shù)器初值M之間之間的關(guān)系為:的關(guān)系為:n由于在方式由于在方式2中,自動(dòng)中,自動(dòng)重裝初值保存在重裝初值保存在TH0寄存器中,因此同樣寄存器中,因此同樣需要初始化需要初始化TL0和和TH0(內(nèi)容與內(nèi)容與TL0相同相同)。 t 12f2MOSC8 t 6f2MOSC8例例 5.11 時(shí)鐘計(jì)數(shù)程序時(shí)鐘計(jì)數(shù)程序設(shè)設(shè)f=12MHz , T0工作于方式工作于方式2,產(chǎn)生,產(chǎn)生25

22、0us定時(shí)中斷,定時(shí)中斷,T0在在1秒內(nèi)產(chǎn)生秒內(nèi)產(chǎn)生4000次中斷,次中斷,T0中中斷函數(shù)用一個(gè)變量對中斷次數(shù)計(jì)數(shù),每當(dāng)產(chǎn)生斷函數(shù)用一個(gè)變量對中斷次數(shù)計(jì)數(shù),每當(dāng)產(chǎn)生4000次中斷置位標(biāo)志,通知主程序?qū)r(shí)鐘計(jì)數(shù),次中斷置位標(biāo)志,通知主程序?qū)r(shí)鐘計(jì)數(shù),并用并用printf語句將時(shí)鐘顯示在語句將時(shí)鐘顯示在Serial#1窗口上。窗口上。#include reg52.h#include stdio.h#define uchar unsigned char#define uint unsigned intuint TIME3=22,58,50;/通過數(shù)組初始化實(shí)現(xiàn)時(shí)鐘初始化通過數(shù)組初始化實(shí)現(xiàn)時(shí)鐘初始化u

23、int T0CNT0;bit F_SS; /設(shè)置標(biāo)志變量設(shè)置標(biāo)志變量時(shí)時(shí)分分秒秒void init_sys() /系統(tǒng)初始化函數(shù)系統(tǒng)初始化函數(shù)SCON=0 x52; /為為printf語句用到的串行口初始化語句用到的串行口初始化TMOD=0 x22; /設(shè)置設(shè)置T0、T1工作在方式工作在方式2,定時(shí),定時(shí)TH1=0 xfd; /給給T1送初值送初值TL1=0 xfd;TL0=6; /給給T0送初值送初值TH0=6; F_SS=0; /標(biāo)志位清標(biāo)志位清0T0CNT0=4000; /4000次中斷次中斷TCON=0 x50; /設(shè)置控制寄存器設(shè)置控制寄存器1001000,TF1=1,TR1=0 T

24、F0=0,TR1=1IE=0 x82; /設(shè)置中斷容許寄存器設(shè)置中斷容許寄存器10000010,容許,容許T0中斷中斷IP=2; /設(shè)置中斷優(yōu)先級寄存器設(shè)置中斷優(yōu)先級寄存器00000010, T0是高級中斷是高級中斷void timter0() interrupt 1 /T0中斷函數(shù)中斷函數(shù)T0CNT0-; /T0CNT0變量自減變量自減1if(T0CNT0=0) /T0CNT0減到減到0,說明,說明1s時(shí)間到時(shí)間到F_SS=1; /設(shè)置標(biāo)志,通知主程序設(shè)置標(biāo)志,通知主程序T0CNT0=4000; /4000送送T0CNT0,準(zhǔn)備下一個(gè),準(zhǔn)備下一個(gè)1s cnt_clock(uint *p) /

25、時(shí)鐘計(jì)數(shù)函數(shù)時(shí)鐘計(jì)數(shù)函數(shù)*p+=1; /秒加秒加1, *p 所指單元內(nèi)容加所指單元內(nèi)容加1if(*p=60) /如果秒單元加到如果秒單元加到60, *p=0; /秒單元清秒單元清0 p -= 1; /指針下移到分單元指針下移到分單元*p += 1; /分單元內(nèi)容加分單元內(nèi)容加1,if(*p=60) /如果分單元加到如果分單元加到60*p=0; /分單元清分單元清0p -= 1; /指針下移到時(shí)單元指針下移到時(shí)單元*p += 1; /時(shí)單元內(nèi)容加時(shí)單元內(nèi)容加1 if(*p=24) /如果時(shí)單元加到如果時(shí)單元加到24 *p=0; /時(shí)單元清時(shí)單元清0 /返回指針?biāo)竼卧獌?nèi)容返回指針?biāo)竼卧獌?nèi)容 v

26、oid main() /主函數(shù)主函數(shù)uint *ptr; /定義指針變量定義指針變量init_sys(); /調(diào)初始化函數(shù)調(diào)初始化函數(shù)for(;) /循環(huán)查秒標(biāo)志并處理循環(huán)查秒標(biāo)志并處理 if(F_SS=1) /如果如果1s時(shí)間到,即標(biāo)志時(shí)間到,即標(biāo)志F_SS=1 F_SS=0; /清清0標(biāo)志標(biāo)志F_SSptr=&TIME2; /把把TIME2的地址,即的地址,即s地址賦給指針地址賦給指針cnt_clock(ptr); /調(diào)用時(shí)鐘計(jì)數(shù)調(diào)用時(shí)鐘計(jì)數(shù)printf(Time: H=%2u,M=%2u,S=%2ur, TIME0,TIME1,TIME2); /調(diào)用時(shí)鐘(時(shí)間)調(diào)用時(shí)鐘(時(shí)間)

27、圖5-19 定時(shí)/計(jì)數(shù)器T0工作于方式3的結(jié)構(gòu)3.工作方式工作方式3與門與門或門或門n方式方式3將定時(shí)將定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T0分成兩個(gè)獨(dú)立的分成兩個(gè)獨(dú)立的8位定時(shí)位定時(shí)/計(jì)計(jì)數(shù)器數(shù)器(但只有但只有TL0具有定時(shí)和計(jì)數(shù)功能,而具有定時(shí)和計(jì)數(shù)功能,而TH0計(jì)數(shù)計(jì)數(shù)脈沖來自脈沖來自CPU內(nèi)分頻器,不可選擇,只能作為內(nèi)分頻器,不可選擇,只能作為8位位定時(shí)器使用定時(shí)器使用)。n只適用于定時(shí)器只適用于定時(shí)器/ /計(jì)數(shù)器計(jì)數(shù)器T0T0。T1T1不能工作在方式不能工作在方式3 3。n當(dāng)當(dāng)TL0溢出時(shí),定時(shí)器溢出時(shí),定時(shí)器T0溢出中斷標(biāo)志位溢出中斷標(biāo)志位TF0置置1;而而TH0溢出時(shí),定時(shí)器溢出時(shí),定時(shí)器T1溢

28、出中斷標(biāo)志位溢出中斷標(biāo)志位TF1置置1。n定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T1的啟動(dòng)控制位的啟動(dòng)控制位TR1作為作為TH0的的啟動(dòng)控制位,即工作在方式啟動(dòng)控制位,即工作在方式3下的定時(shí)下的定時(shí)/計(jì)數(shù)計(jì)數(shù)器器T0占用了占用了T1的啟動(dòng)控制位的啟動(dòng)控制位TR1和溢出中斷和溢出中斷標(biāo)志位標(biāo)志位TF1,使定時(shí),使定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T1的功能受到了的功能受到了限制,只能作為不需要中斷功能的波特率發(fā)限制,只能作為不需要中斷功能的波特率發(fā)生器。生器。 定時(shí)/計(jì)數(shù)器T0工作在方式3下T1的結(jié)構(gòu) (a) T1方式1;(b) T1方式2 圖5-16 定時(shí)/計(jì)數(shù)器T0(T1)工作于方式0的結(jié)構(gòu) 4.工作方式工作方式0(13位

29、定時(shí)位定時(shí)/計(jì)數(shù)器)計(jì)數(shù)器) 不建議使用不建議使用5.2.3 定時(shí)器定時(shí)器T0的應(yīng)用的應(yīng)用定時(shí)中斷控制晶閘定時(shí)中斷控制晶閘管導(dǎo)通角管導(dǎo)通角n用中斷的方式實(shí)現(xiàn)例用中斷的方式實(shí)現(xiàn)例5.5外部中斷外部中斷INT0接收過零檢測信號;接收過零檢測信號;定時(shí)器定時(shí)器T0實(shí)現(xiàn)觸發(fā)角的延時(shí)。實(shí)現(xiàn)觸發(fā)角的延時(shí)。圖圖5 -4分析:當(dāng)交流電進(jìn)入正半周時(shí),外部中斷分析:當(dāng)交流電進(jìn)入正半周時(shí),外部中斷INT0發(fā)生負(fù)發(fā)生負(fù)跳變,可以由跳變,可以由INT0中斷服務(wù)程序啟動(dòng)中斷服務(wù)程序啟動(dòng)T0定時(shí),定時(shí)定時(shí),定時(shí)時(shí)間到,產(chǎn)生時(shí)間到,產(chǎn)生T0中斷中斷由由T0中斷服務(wù)程序使中斷服務(wù)程序使P1.0輸出輸出觸發(fā)脈沖觸發(fā)脈沖例5.12

30、 中斷方法控制晶閘管的導(dǎo)通角 bk-5-e12#include reg52.h#define uchar unsigned char#define uint unsigned intsbit P1_0=P10;void int0() interrupt 0 /T0中斷函數(shù)中斷函數(shù)TH0=0 x30;TL0=0 x31;TR0=1;void main() /主函數(shù)主函數(shù)init_sys();for(;);5.2.4 定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T2的功能和使用方法的功能和使用方法n與定時(shí)/計(jì)數(shù)器T2有關(guān)的寄存器有:T2CON(定時(shí)器T2控制寄存器)、T2MOD(增強(qiáng)型MCS-51新增的定時(shí)器T2工作模

31、式寄存器)、TH2、TL2、RCAP2H和RCAP2L。nTH2和和TL2分別是定時(shí)分別是定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T2的高的高8位和位和低低8位,位,TH2和和TL2構(gòu)成了構(gòu)成了16位計(jì)數(shù)器;位計(jì)數(shù)器; 而而RCAP2H和和RCAP2L構(gòu)成了一個(gè)構(gòu)成了一個(gè)16位寄存器,在位寄存器,在自動(dòng)重裝初值方式下,自動(dòng)重裝初值方式下,RCAP2H和和RCAP2L分別存放分別存放TH2和和TL2的重裝初值;的重裝初值; 在捕捉方式下,當(dāng)在捕捉方式下,當(dāng)P1.1引腳出現(xiàn)負(fù)跳變時(shí),引腳出現(xiàn)負(fù)跳變時(shí),T2計(jì)數(shù)計(jì)數(shù)器高器高8位位TH2和低和低8位位TL2分別被捕捉到分別被捕捉到RCAP2H和和RCAP2L寄存器中。寄存器

32、中。n一、一、T2的特殊功能寄存器的特殊功能寄存器n1. 定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T2的控制的控制在標(biāo)準(zhǔn)在標(biāo)準(zhǔn)MCS-52系列中,定時(shí)系列中,定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T2的的工作方式及用途由工作方式及用途由T2CON寄存器的內(nèi)容決定,寄存器的內(nèi)容決定,該寄存器各位含義如下圖所示。該寄存器各位含義如下圖所示。 圖 T2CON寄存器各位含義n1)CP/RL2*:捕捉捕捉/自動(dòng)重裝方式選擇位。自動(dòng)重裝方式選擇位。 0:T2工作于工作于16位自動(dòng)重裝初值方式;位自動(dòng)重裝初值方式; 1:T2工作于工作于16位捕捉方式。位捕捉方式。 2)C/T2*:定時(shí)定時(shí)/計(jì)數(shù)方式選擇位。計(jì)數(shù)方式選擇位。 0: T2處于定時(shí)方

33、式;處于定時(shí)方式; 1: T2處于計(jì)數(shù)方式。處于計(jì)數(shù)方式。 3)TR2:定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T2計(jì)數(shù)脈沖通計(jì)數(shù)脈沖通/斷控制位。斷控制位。 0: T2停止計(jì)數(shù);停止計(jì)數(shù);1: T2計(jì)數(shù)。計(jì)數(shù)。n4) EXEN2:定時(shí)器:定時(shí)器T2 外部觸發(fā)允許外部觸發(fā)允許/禁止位。禁止位。0:外部觸發(fā)禁止;:外部觸發(fā)禁止;1:外部觸發(fā)允許。:外部觸發(fā)允許。5) TCLK:串行口:串行口(方式方式1、方式、方式3)發(fā)送波特率發(fā)送波特率選擇位。選擇位。0:使用定時(shí):使用定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T1溢出信號的溢出信號的16或或32分頻作串行口方式分頻作串行口方式1、方式、方式3的發(fā)送波特率;的發(fā)送波特率;1:將使用定時(shí)

34、:將使用定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T2溢出信號的溢出信號的16分分頻作串行口方式頻作串行口方式1、方式、方式3的發(fā)送波特率。的發(fā)送波特率。6) RCLK(即即b5)串行口串行口(方式方式1、方式、方式3)接收波特率選擇位。接收波特率選擇位。0:使用定時(shí):使用定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T1溢出信號的溢出信號的16或或32分頻作串行口方式分頻作串行口方式1、方式、方式3接收波特率;接收波特率;1:將使用定時(shí):將使用定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T2溢出信號的溢出信號的16分分頻作串行口方式頻作串行口方式1、方式、方式3接收波特率。接收波特率。n7) EXF2:T2外部觸發(fā)標(biāo)志位。外部觸發(fā)標(biāo)志位。當(dāng)當(dāng)EXEN2位為位為1,T2

35、EX(即即P1.1)引腳出現(xiàn)引腳出現(xiàn)負(fù)跳變時(shí),負(fù)跳變時(shí),EXF2標(biāo)志位置標(biāo)志位置1。8) TF2:T2溢出中斷標(biāo)志位。溢出中斷標(biāo)志位。 表表5-5 定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T2的工作方式的工作方式RCLK+TCLKCP/RL2TR2工 作 方 式00116位常數(shù)自動(dòng)再裝入方式位常數(shù)自動(dòng)再裝入方式01116位捕捉方式位捕捉方式1X1串行口波特率發(fā)生器方式串行口波特率發(fā)生器方式XX0停止計(jì)數(shù)停止計(jì)數(shù)二、二、 定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T2的工作方式的工作方式n1.常數(shù)自動(dòng)再裝入方式常數(shù)自動(dòng)再裝入方式當(dāng)當(dāng)TCLK、RCLK、CP/RL2*均為均為0時(shí),定時(shí)時(shí),定時(shí)/計(jì)計(jì)數(shù)器數(shù)器T2是一個(gè)下降沿觸發(fā)自動(dòng)重裝

36、初值的是一個(gè)下降沿觸發(fā)自動(dòng)重裝初值的16位定時(shí)位定時(shí)/計(jì)數(shù)器。計(jì)數(shù)器。若計(jì)數(shù)初值為若計(jì)數(shù)初值為a,則定時(shí)時(shí)間等于:則定時(shí)時(shí)間等于:sfaTosc)(*12216圖5-21 T2 16位常數(shù)自動(dòng)再裝入方式結(jié)構(gòu)n定時(shí)方式:定時(shí)方式:C/T2*=0計(jì)數(shù)脈沖是系統(tǒng)時(shí)鐘信號的計(jì)數(shù)脈沖是系統(tǒng)時(shí)鐘信號的n分頻分頻TR2=1,開始計(jì)數(shù),每來一個(gè)脈沖,開始計(jì)數(shù),每來一個(gè)脈沖,T2計(jì)數(shù)器加計(jì)數(shù)器加1,當(dāng),當(dāng)T2溢出時(shí),溢出信號使溢出時(shí),溢出信號使TF2中斷標(biāo)志置中斷標(biāo)志置1同時(shí)重裝初值控制或門輸出高電平,把存放在同時(shí)重裝初值控制或門輸出高電平,把存放在RCAP2L和和RCAP2H中的初值裝入中的初值裝入TL2和和

37、TH2,重新計(jì)數(shù)重新計(jì)數(shù)這與這與T0、T1計(jì)數(shù)器工作方式計(jì)數(shù)器工作方式2類似類似n計(jì)數(shù)方式:計(jì)數(shù)方式:C/T2*=1計(jì)數(shù)脈沖來自計(jì)數(shù)脈沖來自P1.0引腳引腳其它方面與定時(shí)方式相同其它方面與定時(shí)方式相同n自動(dòng)重裝載的條件:自動(dòng)重裝載的條件:T2溢出時(shí);溢出時(shí);當(dāng)當(dāng)EXEN2=1時(shí),時(shí),P1.1引腳上的負(fù)跳變強(qiáng)迫引腳上的負(fù)跳變強(qiáng)迫T2重裝初值;但當(dāng)重裝初值;但當(dāng)EXEN2=0時(shí),這一功能時(shí),這一功能將禁止。將禁止。n2. 16位捕捉方式位捕捉方式n當(dāng)當(dāng)TCLK、RCLK位為位為0,CP/RL2位為位為1時(shí),時(shí),定時(shí)定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T2工作于捕捉方式。工作于捕捉方式。nEXEN2=0,定時(shí)器,定時(shí)

38、器T2 作為一個(gè)作為一個(gè)16 位定時(shí)位定時(shí)/計(jì)計(jì)數(shù)器數(shù)器T2溢出時(shí),溢出時(shí),T2的溢出標(biāo)志位的溢出標(biāo)志位TF2置置1(如如果中斷處于開放狀態(tài),則當(dāng)果中斷處于開放狀態(tài),則當(dāng)TF2有效時(shí),將有效時(shí),將產(chǎn)生產(chǎn)生T2中斷請求信號中斷請求信號)。nEXEN2=1,則外部輸入,則外部輸入T2EX(P1.1) 由由1變?yōu)樽優(yōu)?時(shí),定時(shí)器時(shí),定時(shí)器T2(TL2 和和TH2)的當(dāng)前值分別被的當(dāng)前值分別被捕捉到捕捉到RCAP2L 和和RCAP2H寄存器中,另外寄存器中,另外T2EX 的負(fù)跳變脈沖使的負(fù)跳變脈沖使T2CON中的中的EXF2 置置位,經(jīng)或門向位,經(jīng)或門向CPU發(fā)出中斷請求。發(fā)出中斷請求。圖5-22 定

39、時(shí)/計(jì)數(shù)器T2工作于時(shí)鐘輸出方式下的內(nèi)部結(jié)構(gòu)3. 異步串行口波特率發(fā)生器方式異步串行口波特率發(fā)生器方式 當(dāng)當(dāng)TCLK位或位或RCLK位為位為1時(shí),定時(shí)時(shí),定時(shí)/計(jì)數(shù)器計(jì)數(shù)器T2作為串行口方式作為串行口方式1、方式、方式3發(fā)送發(fā)送/接收波特率接收波特率發(fā)生器。發(fā)生器。圖5-41 定時(shí)/計(jì)數(shù)器T2作為串行口波特率發(fā)生器的內(nèi)部結(jié)構(gòu)5.2.5 T2的應(yīng)用定時(shí)讀鍵盤n定時(shí)讀鍵盤的設(shè)計(jì)方法定時(shí)讀鍵盤的設(shè)計(jì)方法設(shè)置標(biāo)志位和數(shù)據(jù)緩沖器設(shè)置標(biāo)志位和數(shù)據(jù)緩沖器KBUFnKD:KD=1表示閉合鍵已處于穩(wěn)定狀態(tài);表示閉合鍵已處于穩(wěn)定狀態(tài);nKIN:KIN=1表示表示KBUF中為讀到的有效鍵中為讀到的有效鍵號,待主機(jī)處

40、理;號,待主機(jī)處理;nKP:KP=1表示主程序已對表示主程序已對KBUF中數(shù)據(jù)作中數(shù)據(jù)作了處理,但該鍵還未釋放;了處理,但該鍵還未釋放;nKBUF:閉合鍵建號緩沖器。:閉合鍵建號緩沖器。T2定時(shí)中斷程序和主程序之間信息交換定時(shí)中斷程序和主程序之間信息交換例例5.13 定時(shí)讀鍵盤的程序定時(shí)讀鍵盤的程序(a)主函數(shù)(b)T2中斷函數(shù)(a)函數(shù)庫文件)函數(shù)庫文件 bk_5_e13_0.c#include reg52.h#define uchar unsigned char#define uint unsigned intuchar bdata FLAG;sbitKD=FLAG0;sbitKP=FLA

41、G1;sbitKIN=FLAG2;ucharKBUF;uchar code k_tab=0 xee,0 xed,0 xeb,0 xe7, 0 xde,0 xdd,0 xdb,0 xd7,0 xbe,0 xbd, 0 xbb,0 xb7,0 x7e,0 x7d,0 x7b,0 x77;init_sys()FLAG=0;TH2=0 xde8;TL2=0 xf0;RCAP2H=0 xd8;RCAP2L=0 xf0;T2CON=4;ET2=1;EA=1;TI=1;uchar nkey_s0(uchar y)uchar b,i;for(i=0;i16;i+)b=k_tabi;if(b=y)return

42、i;uchar nkey()uchar a,b;P1=0 xf0;a=P1;b=a;P1=0 xf;a=P1;a |=b;b=nkey_s0(a);return b;bit keys()uchar a;P1=0 xf0;a=P1;if (a=0 xf0) return 1;else return 0;(b)頭文件)頭文件 bk_5_e13.hextern init _sys();extern bit keys();extern unsigned char nkey();(c)主函數(shù)和中斷函數(shù)文件)主函數(shù)和中斷函數(shù)文件 bk_5_e13_1.c#include stdio.h#include reg52.h#include bk_5_e13.h#define uchar unsigned char#define uint unsigned intextern uchar FLAG;uchar KBUF;extern bit KD;extern bit KP;externbit KIN;main()uchar a;uint x;init_sys();while(1)a=FLAG&6;if(a=4) x=KBUF; printf(x=%u,n,x);KP=1;timer2() interrupt 5bit s;EXF2=0;if (TF2=1)T

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論