第6章 AT8S51單片機(jī)定時(shí)器計(jì)數(shù)器_第1頁(yè)
第6章 AT8S51單片機(jī)定時(shí)器計(jì)數(shù)器_第2頁(yè)
第6章 AT8S51單片機(jī)定時(shí)器計(jì)數(shù)器_第3頁(yè)
第6章 AT8S51單片機(jī)定時(shí)器計(jì)數(shù)器_第4頁(yè)
第6章 AT8S51單片機(jī)定時(shí)器計(jì)數(shù)器_第5頁(yè)
已閱讀5頁(yè),還剩49頁(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、1第6章 AT89S51單片機(jī)定時(shí)器/計(jì)數(shù)器主要內(nèi)容n 定時(shí)/計(jì)數(shù)器的工作原理模式n 定時(shí)/計(jì)數(shù)器的工作方式n 定時(shí)/計(jì)數(shù)器的應(yīng)用2(1) 定時(shí)器/計(jì)數(shù)器的概念定時(shí)器計(jì)數(shù)器定時(shí)/計(jì)數(shù)器 內(nèi)部計(jì)數(shù)器內(nèi)部計(jì)數(shù)器外部計(jì)數(shù)器(2) AT89S51的定時(shí)器/計(jì)數(shù)器簡(jiǎn)介 2個(gè)16位的定時(shí)/計(jì)數(shù)器,有多種工作方式。 定時(shí)/計(jì)數(shù)器工作在定時(shí)模式時(shí),計(jì)數(shù)脈沖信號(hào)來(lái)自單片機(jī)的內(nèi)部,計(jì)數(shù)速率是晶振頻率的1/12,當(dāng)計(jì)數(shù)器啟動(dòng)后,每個(gè)機(jī)器周期計(jì)數(shù)器自動(dòng)加1。 定時(shí)/計(jì)數(shù)器工作在計(jì)數(shù)模式時(shí),計(jì)數(shù)器對(duì)外部脈沖進(jìn)行計(jì)數(shù),計(jì)數(shù)器計(jì)P3.4(T0腳)P3.5(T1腳)負(fù)跳變次數(shù)。每產(chǎn)生一次負(fù)跳變,計(jì)數(shù)器自動(dòng)加1。6.1 概述3

2、 它們最低位的脈沖,將使它們自動(dòng)加1,帶進(jìn)位 本質(zhì)上講是兩個(gè)16位計(jì)數(shù)器;每輸入一個(gè)脈沖增1 兩種工作狀態(tài) 四種工作方式 0 1 2 3 與之有關(guān)的 四個(gè)管腳 七個(gè)SFR T0 T1 TCON TMOD SP IE IP 中斷申請(qǐng)6.1 概述TH0TL04 . 3P5 . 3P2 . 3P3 . 3P 4 一T0概述 1.T016位計(jì)數(shù)器 占兩字節(jié) TH0地址8CH TL0地址8AH 復(fù)位后(T0)=0000H 計(jì)數(shù)范圍0000H0FFFFH 最大=65536 不能位尋址 不能按字操作 (分別從低8位,高8位送數(shù))2.T0的基本功能 對(duì)送入TL0的脈沖,使之增1 外部計(jì)數(shù)狀態(tài)對(duì) 腳的脈沖計(jì)數(shù)

3、兩個(gè)計(jì)數(shù)源 內(nèi)部定時(shí)對(duì)機(jī)器周期計(jì)數(shù) 6.1 概述4 . 3P5 . 3P2 . 3P3 . 3P 16204 . 3TP5T0兩種工作狀態(tài)( ) 位 (TMOD.2) =0 為內(nèi)部定時(shí) =1 為外部計(jì)數(shù)T0可讀可寫(xiě) 寫(xiě)T0就是對(duì)之賦初值 讀T0就是檢查T(mén)0當(dāng)前的計(jì)數(shù)結(jié)果存 入單片機(jī)寄存器中MOV DPTR,#DADA (此一條按字操作)中斷功能 T0溢出時(shí) 計(jì)數(shù)結(jié)果為0000H 進(jìn)位丟失(CY短時(shí)間還有)置位中斷申請(qǐng)標(biāo)志位TF0 TCON.5 T0的啟停可以被腳 ,TR0位 GATE位所控制 T1同T0 6.1 概述 TCTC2 . 3P6GATEM0C/TM1M0GATEC/TM1D0D1D

4、2D3D4D5D6D7T0T15.2 定時(shí)器/計(jì)數(shù)器的工作方式選擇及控制(一) 定時(shí)/計(jì)數(shù)器的工作方式寄存器(TMOD, 89H ) 1 M0 工作方式選擇位 P133表61 0 0 0 13 0 1 1 16 1 0 2 自8 1 1 3 T0分TH0,TL0計(jì)數(shù)器 T1 停止計(jì)數(shù) 7GATEM0C/TM1M0GATEC/TM1D0D1D2D3D4D5D6D7T0T16.2 定時(shí)器/計(jì)數(shù)器的工作方式選擇及控制(一) 定時(shí)/計(jì)數(shù)器的工作方式寄存器(TMOD, 89H ) 工作狀態(tài)選擇位 =1 為計(jì)數(shù)狀態(tài) =0 為定時(shí)狀態(tài) GATE門(mén)控位 =1 時(shí)允許P3.2 和TR0聯(lián)合控制T0 =0 時(shí) 禁

5、止P3.2控制T0,只由TR0控制TC8TF1TF0IE1TR1IT0IT1IE0TR0用于外中斷TCON地址88H可位尋址D0D1D2D3D4D5D6D76.2 定時(shí)器/計(jì)數(shù)器的工作方式選擇及控制(二) 定時(shí)/計(jì)數(shù)器控制寄存器(TCON)控制定時(shí)/計(jì)數(shù)器的啟停,反映定時(shí)/計(jì)數(shù)器是否計(jì)滿。 TF0、(TF1)T0、(T1)計(jì)數(shù)溢出標(biāo)志位 =1 溢出時(shí),硬件置1,否則清0 =0未溢出 TR0 (TR1)T0(T1)的啟/??刂莆?軟件置1時(shí) 啟動(dòng)T0 TR0=1時(shí)要判斷 GATE位是否允許 P3.2啟動(dòng) T0 復(fù)位時(shí) (TCN)=00H禁止T0、T1計(jì)數(shù)96.3.1 T0的方式013位定時(shí)/計(jì)數(shù)

6、器 6.3 定時(shí)器/計(jì)數(shù)器的工作方式及工作原理T0方式0的邏輯結(jié)構(gòu)TMOD0TMOD1TMOD2TMOD3M0M1C/TGATE00振 蕩 器 12T0引 腳INTO引 腳1 1&AB TH0(8位 ) TL0(5位 )C/T 1C/T 0控 制KTCON中 斷TF0TR0TMOD最大計(jì)數(shù)范圍:0213=8k=8192T0分為低5位和高8位 T0方式0的結(jié)構(gòu) M1 M0 =0010TCON.4(主控位) 1 啟動(dòng)T0控制邏輯 ( +P3.2)x(TR0)=門(mén)控電平= 0 停止 T01.13位;2.內(nèi)部定時(shí),外部計(jì)數(shù);3.中斷;4.啟/??刂七?TR0無(wú)論在什么情況下,都可軟件控制T0啟

7、/停GATE=0 條件下,P3.2腳不能控制T0啟/停GATE=1 可控制T0的啟/停。GATE6.3 定時(shí)器/計(jì)數(shù)器的工作方式及工作原理116.3 定時(shí)器/計(jì)數(shù)器的工作方式及工作原理6.3.2 T0、T1的方式1 設(shè)定 M1M0=1 為16位定時(shí)計(jì)數(shù)器 原理同方式 1 最大計(jì)數(shù)范圍 0216=65536=64k126.3 定時(shí)器/計(jì)數(shù)器的工作方式及工作原理6.3.3 方式213 可自動(dòng)重轉(zhuǎn)初值的8位定時(shí)器/計(jì)數(shù)器 最大計(jì)數(shù)值 28 只有TL0做計(jì)數(shù)。TH0中的初始化程序裝入TH0初值 每當(dāng)TL0溢出時(shí),TH0的內(nèi)容自動(dòng)裝入TL0位,使之可以循環(huán)計(jì)數(shù)。6.3 定時(shí)器/計(jì)數(shù)器的工作方式及工作原理

8、6.3.3 方式2此工作方式可省去用戶軟件中重裝初值的指令的執(zhí)行時(shí)此工作方式可省去用戶軟件中重裝初值的指令的執(zhí)行時(shí)間,簡(jiǎn)化定時(shí)初值的計(jì)算方法,可相當(dāng)精確地確定定時(shí)間,簡(jiǎn)化定時(shí)初值的計(jì)算方法,可相當(dāng)精確地確定定時(shí)時(shí)間。時(shí)間。146.3 定時(shí)器/計(jì)數(shù)器的工作方式及工作原理6.3.4 方式3156.3 定時(shí)器/計(jì)數(shù)器的工作方式及工作原理6.3.4 方式316 把T0分為兩個(gè)8位定時(shí)/計(jì)數(shù)器 P138 圖6-10 使單片機(jī)具有三個(gè)定時(shí)/計(jì)數(shù)器定時(shí)器T1沒(méi)有方式3, 如設(shè)為方式3, T1停止計(jì)數(shù) TL0可做定時(shí)/計(jì)數(shù)器 占用T0的TCON和TMOD中的控制位和標(biāo)志位 TH0只能作為定時(shí)器使用, 占用T1

9、的資源TR1和TF1此時(shí)T1仍可用方式0、1、2, 但不能使用中斷方式只有T1用作串行口波特率發(fā)生器時(shí),T0才工作在方式3,此時(shí)T1多用于方式26.3 定時(shí)器/計(jì)數(shù)器的工作方式及工作原理6.3.4 方式3176.4.1 T/C的計(jì)數(shù)初值C的計(jì)算和裝入1、計(jì)數(shù)初值C的求法計(jì)數(shù)方式:C=最大計(jì)數(shù)值計(jì)數(shù)個(gè)數(shù)X 0 213=8192 1 216=65536 2、3 28=256定時(shí)方式:最大計(jì)數(shù)值定時(shí)時(shí)間/機(jī)器周期T2、T/C在不同工作方式下的初值裝入方式 1)方式0:13位 要裝入1F90H初值時(shí)1F90H=0001 1111 1001 1100B6.4 定時(shí)器/計(jì)數(shù)器的應(yīng)用程序設(shè)計(jì)13TH0TL0

10、18 對(duì)T0而言,計(jì)數(shù)初值的高8位裝入TH0,低5位裝入TL0的低5位,TL0的高3位無(wú)效,可補(bǔ)零。將11111100B=FCH,裝入TH0,XXX11100B裝入TL0由指令表示為: TH0=0 xFC; TL0=0 x1C; 2)方式1,16位方式 初值低8位裝入TL0 高8位裝入TH0TH0=0 xFF;TL0 =0 x9C;3)方式2、初值既要裝入TH0,也要裝入TL0用指令表示為T(mén)H0=0 x9C;TL0=0 x9C; 6.4.1 T/C的計(jì)數(shù)初值C的計(jì)算和裝入6.4 定時(shí)器/計(jì)數(shù)器的應(yīng)用程序設(shè)計(jì)196.4.2 T/C初始化編程 初始化內(nèi)容包括1)根據(jù)定時(shí)時(shí)間或計(jì)數(shù)要求,計(jì)算初值2)

11、設(shè)置工作方式控制字 TMOD3)裝初值 THx TLx4)啟動(dòng)T/C(軟件或外部信號(hào)) TRx 如工作于中斷方式,需開(kāi)EA及ETx,并編寫(xiě)中斷服務(wù)程序。6.4 定時(shí)器/計(jì)數(shù)器的應(yīng)用程序設(shè)計(jì)206.4 定時(shí)器定時(shí)器/計(jì)數(shù)器的編程和應(yīng)用計(jì)數(shù)器的編程和應(yīng)用 在在4種工作方式中,方式種工作方式中,方式0與方式與方式1基本相同,只是計(jì)數(shù)器的基本相同,只是計(jì)數(shù)器的計(jì)數(shù)位數(shù)不同。方式計(jì)數(shù)位數(shù)不同。方式0為為13位計(jì)數(shù)器,方式位計(jì)數(shù)器,方式1為為16位計(jì)數(shù)器。由位計(jì)數(shù)器。由于方式于方式0是為兼容是為兼容MCS-48而設(shè),且其計(jì)數(shù)初值計(jì)算復(fù)雜,所以而設(shè),且其計(jì)數(shù)初值計(jì)算復(fù)雜,所以在實(shí)際應(yīng)用中,一般不用方式在實(shí)際

12、應(yīng)用中,一般不用方式0,而采用方式,而采用方式1。6.4.3 P1口外接的口外接的8只只LED每每0.5s閃亮一次。閃亮一次。 【例【例6-1】在在AT89S51單片機(jī)的單片機(jī)的P1口上接有口上接有8只只LED(電路見(jiàn)(電路見(jiàn)圖圖4-7)。下面采用定時(shí)器)。下面采用定時(shí)器T0的方式的方式1的定時(shí)中斷方式,使的定時(shí)中斷方式,使P1口口外接的外接的8只只LED每每0.5s閃亮一次。閃亮一次。 21(1)設(shè)置)設(shè)置TMOD寄存器寄存器 定時(shí)器定時(shí)器T0工作在方式工作在方式1,應(yīng)使,應(yīng)使TMOD寄存器的寄存器的M1、M0=01;應(yīng)設(shè)置應(yīng)設(shè)置C/=0,為定時(shí)器工作模式;對(duì),為定時(shí)器工作模式;對(duì)T0的運(yùn)行

13、控制僅由的運(yùn)行控制僅由TR0來(lái)來(lái)控制,應(yīng)使控制,應(yīng)使GATE0=0。定時(shí)器。定時(shí)器T1不使用,各相關(guān)位均設(shè)為不使用,各相關(guān)位均設(shè)為0。所以,所以,TMOD寄存器應(yīng)初始化為寄存器應(yīng)初始化為0 x01。(2)計(jì)算)計(jì)算T0計(jì)數(shù)初值計(jì)數(shù)初值 設(shè)定時(shí)時(shí)間設(shè)定時(shí)時(shí)間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/晶振頻率晶振頻率22則則5000=(216 X) 12/11.0592得:得:X = 60928,轉(zhuǎn)換成,轉(zhuǎn)換成16進(jìn)制后為:進(jìn)制后為:0 x

14、ee00,其中,其中0 xee裝入裝入TH0,0 x00裝入裝入TL0。(3)設(shè)置)設(shè)置IE寄存器寄存器 本例由于采用定時(shí)器本例由于采用定時(shí)器T0中斷,因此需將中斷,因此需將IE寄存器中的寄存器中的EA、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í)。 參考程序如下:參考程序如下:23#includeChar i=100;/*給變量給變量i賦初值賦初值*/void main( )TMOD=0 x01;/*設(shè)置定時(shí)器設(shè)置定時(shí)器T0為

15、方為方式式1*/TH0=0 xee;/*向向TH0寫(xiě)入初值的高寫(xiě)入初值的高8位位*/TL0=0 x00;/*向向TL0寫(xiě)入初值的低寫(xiě)入初值的低8位位*/P1=0 x00; /*P1口口8只只LED點(diǎn)亮點(diǎn)亮*/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í)中斷*/24/*以下為定時(shí)器以下為定時(shí)器T0的中斷服務(wù)程序的中斷服務(wù)程序*/void T0_int(void) interrupt 1 TH0=0 xee;/*給給T0裝入裝入16位初

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ù)重新設(shè)置循環(huán)次數(shù)*/256.4.4 計(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)上外接開(kāi)關(guān))上外接開(kāi)關(guān)K1,作為計(jì)數(shù),作為計(jì)數(shù)信號(hào)輸入。按信號(hào)輸入。按4次次K1后,后,P1口的口的8只只LED閃爍不停。閃爍不停。(1)設(shè)置)設(shè)置TMOD寄存器寄存器 T1

17、工作在方式工作在方式1,應(yīng)使,應(yīng)使TMOD的的M1、M0=01;設(shè)置計(jì)數(shù)器;設(shè)置計(jì)數(shù)器工作模式工作模式C/T*=1;對(duì);對(duì)T0的運(yùn)行控制僅由的運(yùn)行控制僅由TR0來(lái)控制,應(yīng)使來(lái)控制,應(yīng)使GATE0=0。定時(shí)器。定時(shí)器T0不使用,各相關(guān)位均設(shè)為不使用,各相關(guān)位均設(shè)為0。所以,。所以,TMOD寄存器應(yīng)初始化為寄存器應(yīng)初始化為0 x50。26圖圖6-13 由外部計(jì)數(shù)輸入信號(hào)控制由外部計(jì)數(shù)輸入信號(hào)控制LED的閃爍的閃爍27(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)換成16進(jìn)制后

18、為:進(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ù)。 參考程序如下:參考程序如下:28#include void Delay(unsigned int i)/* 定義延時(shí)函數(shù)定義延時(shí)函數(shù)Delay( ),i是形式參

19、數(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ù)*/TH0=0 xff;/*向向TH0寫(xiě)入初值的高寫(xiě)入初值的高8位位*/29TL0=0 xfc;/*向向TL0寫(xiě)入初值低寫(xiě)入初值低8位位*/EA=1; /*總中斷允許總中斷允許*/ET1=1; /*T1中斷允許中斷允許*/ TR1=1; /*

20、啟動(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 */306.4.5 擴(kuò)展一個(gè)外部中斷源擴(kuò)展一個(gè)外部中斷源 方式方式2可自動(dòng)重新裝載初值。此方式可省去用戶程序中重新裝初值的指令。可自動(dòng)重新裝載初值。此方式可省去用戶程序

21、中重新裝初值的指令。 當(dāng)某個(gè)定時(shí)器當(dāng)某個(gè)定時(shí)器/計(jì)數(shù)器不使用時(shí),可為計(jì)數(shù)器不使用時(shí),可為AT89S51擴(kuò)展一個(gè)負(fù)跳沿觸發(fā)的外擴(kuò)展一個(gè)負(fù)跳沿觸發(fā)的外部中斷源。部中斷源。 基本思想是把定時(shí)器溢出中斷做成外部中斷,然后把計(jì)數(shù)輸入信號(hào)接到基本思想是把定時(shí)器溢出中斷做成外部中斷,然后把計(jì)數(shù)輸入信號(hào)接到定時(shí)器的相應(yīng)引腳上定時(shí)器的相應(yīng)引腳上T0腳(或腳(或T1腳),并把定時(shí)器被設(shè)置為方式腳),并把定時(shí)器被設(shè)置為方式2(自動(dòng)(自動(dòng)裝入常數(shù)方式)計(jì)數(shù)工作模式,計(jì)數(shù)器裝入常數(shù)方式)計(jì)數(shù)工作模式,計(jì)數(shù)器TH0、TL0初值均為初值均為0FFH,并允許,并允許T0中斷,總中斷開(kāi)放。當(dāng)檢測(cè)到中斷,總中斷開(kāi)放。當(dāng)檢測(cè)到T0

22、腳(或腳(或T1腳)引腳電平發(fā)生負(fù)跳變時(shí),腳)引腳電平發(fā)生負(fù)跳變時(shí),計(jì)數(shù)器計(jì)數(shù)器TF0(或或TF1)溢出,這時(shí)將產(chǎn)生一個(gè)中斷請(qǐng)求。溢出,這時(shí)將產(chǎn)生一個(gè)中斷請(qǐng)求。 31 【例【例6-3】擴(kuò)展一個(gè)負(fù)跳沿觸發(fā)的外部中斷源,把定時(shí)器擴(kuò)展一個(gè)負(fù)跳沿觸發(fā)的外部中斷源,把定時(shí)器T0計(jì)數(shù)輸入引腳計(jì)數(shù)輸入引腳作為外部中斷請(qǐng)求信號(hào)的輸入端。作為外部中斷請(qǐng)求信號(hào)的輸入端。#includevoid main( ) TMOD=0 x06;/*設(shè)置定時(shí)器T0為方式2計(jì)數(shù)*/TH0=0 xff;/*給T0裝入初值*/TL0=0 xff; /*給T0裝入初值*/ET0=1; /*允許T0中斷*/EA=1; /*總中斷開(kāi)*/T

23、F0=0;/*T0中斷溢出標(biāo)志位清0*/TR0=1/*接通T0 計(jì)數(shù)* /while (1) /*無(wú)限循環(huán)等待* /32/*以下為定時(shí)器T0的中斷服務(wù)程序*/void T0_int(void) interrupt 1 using 0 /*外中斷處理部分*/ 說(shuō)明:本例所述的使用定時(shí)器擴(kuò)展的外中斷源只能是負(fù)跳沿說(shuō)明:本例所述的使用定時(shí)器擴(kuò)展的外中斷源只能是負(fù)跳沿觸發(fā)。此外,只有當(dāng)定時(shí)器觸發(fā)。此外,只有當(dāng)定時(shí)器T0(或(或T1)不用的話,才可使用)不用的話,才可使用本方法來(lái)擴(kuò)充外部中斷源,此時(shí)定時(shí)器本方法來(lái)擴(kuò)充外部中斷源,此時(shí)定時(shí)器T0本身的功能將不能再本身的功能將不能再使用,除非使用軟件來(lái)對(duì)它進(jìn)

24、行復(fù)用控制。使用,除非使用軟件來(lái)對(duì)它進(jìn)行復(fù)用控制。6.4.6 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的方波,如的方波,如圖圖6-14所示所示33圖圖6-14 定時(shí)器控制定時(shí)器控制P1.0輸出一個(gè)周期為輸出一個(gè)周期為2ms的方波的方波34 基本思想:基本思想:要在要在P1.0上產(chǎn)生周期為上產(chǎn)生周期為2ms的方波,定時(shí)器應(yīng)的方波,定時(shí)器應(yīng)產(chǎn)生產(chǎn)生1ms的周期性的定時(shí),定時(shí)對(duì)的周期性的定時(shí),定時(shí)對(duì)P1.0求反。選擇定時(shí)器求反。選擇定時(shí)器T0,方式方式1定時(shí),采用中

25、斷方式,定時(shí),采用中斷方式,GATE不起作用。不起作用。 計(jì)算計(jì)算T0的初值計(jì)算:的初值計(jì)算: 設(shè)設(shè)T0的初值為的初值為X,則,則(216 X) 1 106 = 1 103= 65536X =1000 則初值為:則初值為:655361000=64536,因此因此 TH0=(65536 1000) /256 ,TL0=(65536 1000) %256。 參考程序如下:參考程序如下:35#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;/*

26、給給T0裝入初值裝入初值*/TL0=(65536 1000) %256; /*給給T0裝入初值裝入初值*/ET0=1; /* 允許允許T0中斷中斷 */EA=1; /* 總中斷開(kāi)總中斷開(kāi) */TR0=1/* 接通接通T0 計(jì)數(shù)計(jì)數(shù) * /do while (1); /* 無(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;366.4.7 P1.1上產(chǎn)生周期為上產(chǎn)生周期為1s的方波的方波 【例【例6-5】假設(shè)系統(tǒng)時(shí)鐘為假設(shè)系統(tǒng)時(shí)鐘為

27、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í)到則對(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輸輸出的脈沖加到定

28、時(shí)器出的脈沖加到定時(shí)器T1的計(jì)數(shù)輸入腳的計(jì)數(shù)輸入腳P3.5(T1腳),作為計(jì)腳),作為計(jì)數(shù)輸入,定時(shí)數(shù)輸入,定時(shí)500ms需計(jì)數(shù)需計(jì)數(shù)50次。次。T1設(shè)為方式設(shè)為方式2計(jì)數(shù),初值計(jì)數(shù),初值X為:為:28X=50,則,則X=206,37 所以所以TH1= TL1=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í),

29、定時(shí),T1為方式為方式2計(jì)數(shù)計(jì)數(shù)*/P1_0=0;TH0=(65536 10000) /256;/*給給T0裝初值裝初值*/TL0=(65536 10000) %256; TH1=206;/*給給T1裝初值裝初值*/TL1=206;38EA=1; /* 總中斷開(kāi)總中斷開(kāi) */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_

30、int(void) interrupt 3 P1_1=! P1_1; ;/* P1.1腳產(chǎn)生腳產(chǎn)生1s的方波的方波*/ 。396.4.8 T1控制發(fā)出控制發(fā)出1KHz的音頻信號(hào)的音頻信號(hào)【例【例6-6】 利用定時(shí)器利用定時(shí)器T1的中斷來(lái)控制蜂鳴器發(fā)出的中斷來(lái)控制蜂鳴器發(fā)出1KHz的音頻的音頻信號(hào),電路圖見(jiàn)信號(hào),電路圖見(jiàn)圖圖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的初

31、值:的初值:TH1=(65536 921) /256;TL1=(65536 921) %256 參考程序如下:參考程序如下:40圖6-15 控制蜂鳴器發(fā)出1KHz的音頻信號(hào)41 #includesbit P1_0=P10;sbit sound=P17;void main(void)EA=1; /* 總中斷開(kāi) */ET1=1; /* 允許T0中斷 */TMOD=0 x10;/*設(shè)置定時(shí)器T1為方式1定時(shí)*/P1_0=0;TH1=(65536 921) /256;/*給T1裝初值*/TL1=(65536 921) %256; TR1=1;while (1);42void T1_int(void)

32、interrupt 3 using0 sound =sound;TH1=(65536 921) /256;TL1=(65536 921) %256;436.4.9 測(cè)量脈沖寬度(門(mén)控位測(cè)量脈沖寬度(門(mén)控位GATEx的應(yīng)用)的應(yīng)用) 下面以定時(shí)器下面以定時(shí)器T1為例,介紹門(mén)控制位為例,介紹門(mén)控制位GATE的具體應(yīng)用,的具體應(yīng)用,即測(cè)量即測(cè)量INT0*(或(或INT1* )引腳上正脈沖的寬度。)引腳上正脈沖的寬度。 【例【例6-7】 門(mén)控位門(mén)控位GATE1可使可使T1的啟動(dòng)計(jì)數(shù)受的控制,當(dāng)?shù)膯?dòng)計(jì)數(shù)受的控制,當(dāng)GATE1=1,TR1=1時(shí),只有引腳時(shí),只有引腳INT1*輸入高電平時(shí),輸入高電平時(shí),

33、T1才才被允許計(jì)數(shù)。利用被允許計(jì)數(shù)。利用GATE1的這一功能,可測(cè)量引腳的這一功能,可測(cè)量引腳INT1*(P3.3)上正脈沖的寬度(機(jī)器周期數(shù)),利用門(mén)控制位)上正脈沖的寬度(機(jī)器周期數(shù)),利用門(mén)控制位GATE1,測(cè)量引腳,測(cè)量引腳INT1*上正脈沖的寬度。方法如上正脈沖的寬度。方法如圖圖6-16所所示。示。44圖6-16 利用GATE位測(cè)量正脈沖的寬度 45參考程序如下:#includesbit P3_3=P33;/* 位變量定義位變量定義*/unsigned count_high; /* 定義計(jì)數(shù)變量,用來(lái)讀取定義計(jì)數(shù)變量,用來(lái)讀取TH0*/unsigned count_low;/* 定義

34、計(jì)數(shù)變量,用來(lái)讀取定義計(jì)數(shù)變量,用來(lái)讀取TL0*/void read_ count( ) ; /* 讀計(jì)數(shù)器函數(shù)讀計(jì)數(shù)器函數(shù)*/void main( )TMOD=0 x90;/*設(shè)置定時(shí)器設(shè)置定時(shí)器T1為方式為方式1定時(shí)定時(shí)*/TH1=0;/*向定時(shí)器向定時(shí)器T1寫(xiě)入計(jì)數(shù)初值寫(xiě)入計(jì)數(shù)初值*/TL1=0;TR1=1;while(P3_3=1); /* 等待變低等待變低*/46TR1=1;/* 如果為低,啟動(dòng)如果為低,啟動(dòng)T1(未真正開(kāi)始計(jì)數(shù)未真正開(kāi)始計(jì)數(shù))*/while(P3_3=0); /* 等待變高,變高后等待變高,變高后T1真正開(kāi)始計(jì)數(shù)真正開(kāi)始計(jì)數(shù)*/while(P3_3=1); /* 等

35、待變低,變低后等待變低,變低后T1停止計(jì)數(shù)停止計(jì)數(shù)*/TR1=0;read_ count( ) /* 讀計(jì)數(shù)寄存器內(nèi)容的函數(shù)讀計(jì)數(shù)寄存器內(nèi)容的函數(shù)*/void read_ count( ) /* 讀取計(jì)數(shù)寄存器的內(nèi)容讀取計(jì)數(shù)寄存器的內(nèi)容*/docount_high=TH1;/* 讀高字節(jié)讀高字節(jié)*/count_low =TL1;/* 讀低字節(jié)讀低字節(jié)*/* 可將兩字節(jié)的機(jī)器周期數(shù)進(jìn)行顯示處理可將兩字節(jié)的機(jī)器周期數(shù)進(jìn)行顯示處理*/while(count_high!= TH1);47 執(zhí)行以上程序,使引腳上出現(xiàn)的正脈沖寬度以機(jī)器周期數(shù)執(zhí)行以上程序,使引腳上出現(xiàn)的正脈沖寬度以機(jī)器周期數(shù)的形式讀入到的

36、形式讀入到count_high 和和count_low兩個(gè)單元中,如果編寫(xiě)兩個(gè)單元中,如果編寫(xiě)了顯示程序,可將其顯示在顯示器上。了顯示程序,可將其顯示在顯示器上。6.4.10 實(shí)時(shí)時(shí)鐘的設(shè)計(jì)實(shí)時(shí)時(shí)鐘的設(shè)計(jì) 本節(jié)介紹如何使用定時(shí)器本節(jié)介紹如何使用定時(shí)器/計(jì)數(shù)器來(lái)實(shí)現(xiàn)實(shí)時(shí)時(shí)鐘。實(shí)時(shí)時(shí)計(jì)數(shù)器來(lái)實(shí)現(xiàn)實(shí)時(shí)時(shí)鐘。實(shí)時(shí)時(shí)鐘就是以秒、分、時(shí)為單位計(jì)時(shí)。鐘就是以秒、分、時(shí)為單位計(jì)時(shí)。1計(jì)時(shí)的實(shí)現(xiàn)計(jì)時(shí)的實(shí)現(xiàn) 時(shí)鐘最小計(jì)時(shí)單位是秒,如何獲得時(shí)鐘最小計(jì)時(shí)單位是秒,如何獲得1s定時(shí)?可將定時(shí)器定時(shí)?可將定時(shí)器T0的定時(shí)時(shí)間定為的定時(shí)時(shí)間定為50ms,采用中斷方式進(jìn)行溢出次數(shù)的累計(jì),采用中斷方式進(jìn)行溢出次數(shù)的累計(jì),計(jì)滿計(jì)

37、滿20次,則秒計(jì)數(shù)變量次,則秒計(jì)數(shù)變量s加加1;若秒計(jì)滿;若秒計(jì)滿60,則分計(jì)數(shù)變量,則分計(jì)數(shù)變量m加加1,同時(shí)將秒計(jì)數(shù)變量,同時(shí)將秒計(jì)數(shù)變量s清清0;若分鐘計(jì)滿;若分鐘計(jì)滿60,則小時(shí)計(jì)數(shù),則小時(shí)計(jì)數(shù)48變量變量h h加加1 1;若小時(shí)計(jì)數(shù)變量滿;若小時(shí)計(jì)數(shù)變量滿2424,則將小時(shí)計(jì)數(shù)變量清,則將小時(shí)計(jì)數(shù)變量清0 0。2 2程序設(shè)計(jì)程序設(shè)計(jì) 先將定時(shí)器以及各計(jì)數(shù)變量,然后調(diào)用時(shí)間顯示的子程序。先將定時(shí)器以及各計(jì)數(shù)變量,然后調(diào)用時(shí)間顯示的子程序。計(jì)時(shí)功能由定時(shí)器計(jì)時(shí)功能由定時(shí)器T0T0的中斷服務(wù)子程序來(lái)實(shí)現(xiàn)。的中斷服務(wù)子程序來(lái)實(shí)現(xiàn)。 參考程序如下:參考程序如下:#include#include

38、unsigned char int_timeunsigned char int_time;/ /* *定義中斷次數(shù)計(jì)數(shù)變量定義中斷次數(shù)計(jì)數(shù)變量* */ /unsigned char secondunsigned char second;/ /* *秒計(jì)數(shù)變量秒計(jì)數(shù)變量* */ /unsigned char minuteunsigned char minute;/ /* *分鐘計(jì)數(shù)變量分鐘計(jì)數(shù)變量* */ /unsigned char hourunsigned char hour;/ /* *小時(shí)計(jì)數(shù)變量小時(shí)計(jì)數(shù)變量* */ /void delay(voidvoid delay(void ) )

39、 ;/ /* *延時(shí)函數(shù)延時(shí)函數(shù)* */ /unsigned char junsigned char j;for(jfor(j=0;j200;j+);=0;j200;j+); ; 49void main(voidvoid main(void) ) TMOD=0 x01TMOD=0 x01;/ /* *設(shè)置定時(shí)器設(shè)置定時(shí)器T0T0為方式為方式1 1定時(shí)定時(shí)* */ /EA=1EA=1; / /* * 總中斷開(kāi)總中斷開(kāi) * */ /ET0=1ET0=1; / /* * 允許允許T0T0中斷中斷 * */ /TH0=(65536TH0=(65536 46483)/25646483)/256;/ /*

40、 *給給T0T0裝初值裝初值* */ /TL0=(65536TL0=(65536 46483)%25646483)%256;TR0=1;TR0=1;int_timeint_time=0=0;/ /* *中斷次數(shù)、秒、分、時(shí)單元清中斷次數(shù)、秒、分、時(shí)單元清0 0* */ /second=0second=0;minute=0minute=0;hour=0hour=0;while (1);while (1); DisplaySecond(secondDisplaySecond(second););/ /* *顯示秒的子程序,此處沒(méi)有編寫(xiě)顯示秒的子程序,此處沒(méi)有編寫(xiě)* */ /delay( );delay( );/ /* *顯示延時(shí)顯示延時(shí)

溫馨提示

  • 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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論