版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1單片機(jī)與嵌入式系統(tǒng)第八講本次課主要內(nèi)容第二章單片機(jī)原理(六)2單片機(jī)定時(shí)/計(jì)數(shù)器及其應(yīng)用!單片機(jī)原理(六)1.本次課的目標(biāo)2.單片機(jī)定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)3.定時(shí)器的控制4.定時(shí)器的四種模式及應(yīng)用5.定時(shí)器初始化過程6.綜合實(shí)驗(yàn)7.小結(jié)31.本次課的目標(biāo)熟悉單片機(jī)定時(shí)/計(jì)數(shù)器的基本概念、基本結(jié)構(gòu)、四種工作模式;熟練掌握其應(yīng)用;4單片機(jī)原理(三)1.本次課的目標(biāo)2.單片機(jī)定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)3.定時(shí)器的控制4.定時(shí)器的四種模式及應(yīng)用5.定時(shí)器初始化過程6.綜合實(shí)驗(yàn)7.小結(jié)52.單片機(jī)定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)數(shù)字電路中的計(jì)數(shù)器6時(shí)鐘來自哪里?溢出之后怎么辦?單片機(jī)定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)7核心是16位的加1計(jì)數(shù)器。T0由TH0和TL0構(gòu)成。T1由TH1和TL1構(gòu)成。定時(shí)器由特殊功能寄存器TMOD和TCON所控制!定時(shí)器可產(chǎn)生中斷!計(jì)數(shù)器可對外部輸入脈沖計(jì)數(shù)!定時(shí)器/計(jì)數(shù)器結(jié)構(gòu)的核心是一個(gè)16位的加1計(jì)數(shù)器。定時(shí)器/計(jì)數(shù)器T0(Timer0)由TH0(TimerHigh0)和TL0(TimerLow0)構(gòu)成。定時(shí)器/計(jì)數(shù)器T1由TH1和TL1構(gòu)成。89問題:假設(shè)TL0為8位,T0與TH0和TL0有什么樣的關(guān)系?10T0=TH0×256+TL0TH0=T0/256TL0=T0%256問題:假設(shè)TL0為5位,T0與TH0和TL0有什么樣的關(guān)系?11T0=TH0×32+TL0TH0=T0/32TL0=T0%32單片機(jī)的定時(shí)器/計(jì)數(shù)器具有兩種功能:定時(shí):計(jì)算機(jī)器周期的個(gè)數(shù),對初始值進(jìn)行累加,溢出時(shí)產(chǎn)生中斷。計(jì)數(shù):計(jì)算外部輸入脈沖的個(gè)數(shù),對初始值進(jìn)行累加,溢出時(shí)產(chǎn)生中斷。12由特殊功能寄存器TMOD(TimerMode)和TCON(TimerControl)所控制。定時(shí)器工作不占用CPU時(shí)間,除非定時(shí)器/計(jì)數(shù)器溢出,才能中斷CPU的當(dāng)前操作。1314TF1TR1TF0TR0IE1IT1IE0IT0
TCON(88H)8FH8EH8DH8CH8BH8AH89H88H高四位對定時(shí)器控制低四位涉及外部中斷定時(shí)工作方式定時(shí)器計(jì)數(shù)89C51片內(nèi)振蕩器輸出經(jīng)12分頻后的脈沖,即在初始值基礎(chǔ)上每個(gè)機(jī)器周期使定時(shí)器(T0或T1)的數(shù)值加1直至計(jì)滿溢出。15問題:當(dāng)89C51采用12MHz晶振時(shí),計(jì)數(shù)頻率為多少?16答案:一個(gè)機(jī)器周期為1μs,計(jì)數(shù)頻率為1MHz。計(jì)數(shù)工作方式通過引腳T0(P3.4)和T1(P3.5)對外部脈沖信號(hào)計(jì)數(shù)。當(dāng)輸入脈沖信號(hào)產(chǎn)生由1至0的下降沿時(shí)計(jì)數(shù)器的值加1。為了確保某個(gè)電平在變化之前被采樣一次,要求電平保持時(shí)間至少是一個(gè)完整的機(jī)器周期。17問題:計(jì)數(shù)器對外部脈沖計(jì)數(shù)時(shí),最高計(jì)數(shù)頻率與振蕩頻率有什么關(guān)系?18答案:CPU檢測一個(gè)1至0的跳變需要兩個(gè)機(jī)器周期,故最高計(jì)數(shù)頻率為振蕩頻率的1/24。問題:當(dāng)89C51采用12MHz晶振時(shí),所能計(jì)數(shù)的外部管腳輸入頻率最大為多少?19答案:最高計(jì)數(shù)頻率為振蕩頻率的1/24,因此所能計(jì)數(shù)的最大外部管腳輸入頻率為500KHz?;貞洠和庵袛嘣吹臄U(kuò)展方法利用定時(shí)器/計(jì)數(shù)器擴(kuò)充外中斷源用中斷和查詢結(jié)合法擴(kuò)充外中斷源20思考:如何利用計(jì)數(shù)器進(jìn)行外部中斷擴(kuò)展?由于計(jì)數(shù)器溢出時(shí)會(huì)產(chǎn)生中斷,因此,可以讓計(jì)數(shù)器初始值為“溢出值-1”,當(dāng)外部來一個(gè)脈沖時(shí),就可以觸發(fā)中斷,進(jìn)而將2個(gè)計(jì)數(shù)器中斷擴(kuò)展為2個(gè)外部中斷。21單片機(jī)原理(三)1.本次課的目標(biāo)2.單片機(jī)定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)3.定時(shí)器的控制4.定時(shí)器的四種模式及應(yīng)用5.定時(shí)器初始化過程6.綜合實(shí)驗(yàn)7.小結(jié)223.定時(shí)器的控制3.1工作模式寄存器TMOD(TimerMode)3.2控制器寄存器TCON(TimerControl)2324定時(shí)器T1定時(shí)器T0TMOD(89H)GATEC/TM1M0GATEC/TM1M03.1工作模式寄存器TMODTMOD用于控制T0和T1的工作模式。特別注意:TMOD不能位尋址,只能用字節(jié)設(shè)置定時(shí)器的工作模式,低半字節(jié)設(shè)置T0,高半字節(jié)設(shè)置T1。89C51系統(tǒng)復(fù)位時(shí),TMOD所有位被清0。2526定時(shí)器T1定時(shí)器T0TMOD(89H)D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M027M1和M0—操作模式控制位。兩位可形成四種編碼,對應(yīng)于四種模式。28TMOD(89H)D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M0C/T(Counter/Timer)—計(jì)數(shù)器/定時(shí)器方式選擇位。C/T=0,設(shè)置為定時(shí)方式。定時(shí)器計(jì)數(shù)89C51片內(nèi)脈沖,即對機(jī)器周期計(jì)數(shù)。C/T=1,設(shè)置為計(jì)數(shù)方式。計(jì)數(shù)器的輸入來自引腳T0(P3.4)或T1(P3.5)端的外部脈沖。29TMOD(89H)D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M030GATE(ORgateenablebitwhichcontrolRUN/STOPoftimer)—門控位。GATE=0,只要用軟件使TR0(或TR1)置1就可以啟動(dòng)定時(shí)器,而不管INT0(或INT1)的電平是高還是低。GATE=1,只有INT0(或INT1)引腳為高電平且由軟件使TR0(或TR1)置1時(shí),才能啟動(dòng)定時(shí)器工作。31TMOD(89H)D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M032問題:TMOD=0x01;是什么含義?33答案:T1工作于定時(shí)器、不受INT1控制,工作在模式0。T0工作于定時(shí)器、不受INT0控制,工作在模式1。3.2控制器寄存器TCONTCON除可字節(jié)尋址外,還可位尋址。89C51系統(tǒng)復(fù)位時(shí),TCON的所有位被清0。34TF1TR1TF0TR0IE1IT1IE0IT0TCON(88H)8FH8EH8DH8CH8BH8AH89H88H35TF1(Timer1Overflowflag)—T1溢出標(biāo)志位。當(dāng)T1溢出時(shí),由硬件自動(dòng)使中斷觸發(fā)器TF1置1,并向CPU申請中斷。當(dāng)CPU響應(yīng)中斷進(jìn)入中斷服務(wù)程序后,TF1被硬件自動(dòng)清0。TF1也可以用軟件清0。36TF1TR1TF0TR0IE1IT1IE0IT0TCON(88H)8FH8EH8DH8CH8BH8AH89H88H37TF0(Timer0Overflowflag)—T0溢出標(biāo)志位。其功能和操作情況同TF1。38TR1(Timer1runcontrolbit)—T1運(yùn)行控制位可通過軟件置1(TR1=1)或清0(TR1=0)來啟動(dòng)或關(guān)閉T1工作。在程序中用指令“TR1=1”使TR1位置1,定時(shí)器T1便開始計(jì)數(shù)。用“TR1=0”使TR1清0,定時(shí)器停止工作。TR0(Timer0Overflowflag)—T0運(yùn)行控制位。其功能和操作情況同TR1。39TF1TR1TF0TR0IE1IT1IE0IT0TCON(88H)8FH8EH8DH8CH8BH8AH89H88H40問題:當(dāng)計(jì)數(shù)器0溢出時(shí),哪個(gè)寄存器狀態(tài)將會(huì)發(fā)生變化?41答案:當(dāng)T0溢出時(shí),由硬件自動(dòng)使中斷觸發(fā)器TF0置1TF1TR1TF0TR0IE1IT1IE0IT0TCON(88H)8FH8EH8DH8CH8BH8AH89H88H問題:下述語句什么含義?TMOD=0x01;TR0=1;42答案:T1工作于定時(shí)器、不受INT1控制,工作在模式0。T0工作于定時(shí)器、不受INT0控制,工作在模式1。啟動(dòng)定時(shí)器0。單片機(jī)原理(三)1.本次課的目標(biāo)2.單片機(jī)定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)3.定時(shí)器的控制4.定時(shí)器的四種模式及應(yīng)用5.定時(shí)器初始化過程6.綜合實(shí)驗(yàn)7.小結(jié)434.定時(shí)器的四種模式及應(yīng)用4.1模式0及其應(yīng)用4.2模式1及其應(yīng)用4.3模式2及其應(yīng)用4.4模式3簡介444.1模式0及其應(yīng)用在這種模式下,16位寄存器(TH0和TL0)只用了13位。其中TL0的高3位未用,其余5位為整個(gè)13位的低5位,TH0占高8位。當(dāng)TL0的低5位溢出時(shí),向TH0進(jìn)位;TH0溢出時(shí),向中斷標(biāo)志TF0進(jìn)位(硬件置位TF0),并申請中斷。45×××TH0TL08位5位問題:模式0所能計(jì)數(shù)的最大值是多少?213=8192問題:模式0計(jì)數(shù)到多少時(shí)產(chǎn)生溢出中斷?213=81924647問題:在具有初值的情況下,計(jì)數(shù)器模式0在多長時(shí)間后溢出?這個(gè)問題非常重要?。。=(8192-初值)×?xí)r鐘周期×12T=(8192-初值)×機(jī)器周期問題:單片機(jī)外部接12MHz晶振,定時(shí)器采用模式0,則定時(shí)器最大定時(shí)時(shí)間為多少?48答案:
模式0用13位計(jì)時(shí),機(jī)器周期為1us,213×機(jī)器周期=8.192ms。問題:單片機(jī)外部接12MHz晶振,定時(shí)器采用模式0,如何產(chǎn)生1s的定時(shí)?49答案:模式0用13位計(jì)時(shí),12MHz時(shí)鐘時(shí),定時(shí)器最大定時(shí)時(shí)間為8.192ms。直接計(jì)時(shí),達(dá)不到1s的要求??僧a(chǎn)生5ms的定時(shí),再由5ms累計(jì)200次產(chǎn)生1s的定時(shí)。這個(gè)問題非常重要?。?!定時(shí)器工作于模式0,若要產(chǎn)生5ms的定時(shí),計(jì)數(shù)初值如何選擇?50答案:使用公式:(213–初值)×機(jī)器周期=5ms,可以計(jì)算出初值為:213-5000/1。這個(gè)問題非常重要?。?!定時(shí)器工作于模式0,定時(shí)器初值為:213-5000/1,應(yīng)如何設(shè)置TH0和TL0?51答案: TH0=(8192-5000)/32; TH1=(8192-5000)%32;這個(gè)問題非常重要?。?!問題:如果使用中斷處理T0溢出,應(yīng)如何初始化中斷?52答案:EA=1;ET0=1;或 IE=0x82;EA
ESET1EX1ET0EX0問題:如果使用中斷處理T0溢出,應(yīng)如何定義中斷處理函數(shù)?53INT0:0T0:1INT1:2T1:3串口:4答案:voidTimer_Interrupt()interrupt1{……}例:用單片機(jī)驅(qū)動(dòng)一個(gè)發(fā)光二極管,閃爍周期為1s,振蕩頻率為12MHz。54演示:Project1例:用單片機(jī)驅(qū)動(dòng)一個(gè)發(fā)光二極管,閃爍周期為1s,振蕩頻率為12MHz。分析:發(fā)光二極管亮的時(shí)間為500ms,然后熄滅500ms,之后周期循環(huán)。由于模式0最大定時(shí)時(shí)間為:213×機(jī)器周期=8.192ms,達(dá)不到500ms的要求??梢远〞r(shí)產(chǎn)生5ms的中斷,再根據(jù)此中斷累加100次達(dá)到500ms。55問題:定時(shí)器應(yīng)工作于什么模式?(TimerorCounter?)Timer問題:定時(shí)器是否需要INT0來控制?不需要56Step1:若要產(chǎn)生5ms的定時(shí),計(jì)數(shù)初值如何選擇?使用公式:(213–初值)×機(jī)器周期=5ms,可以計(jì)算出初值為:213-5000/1.57程序設(shè)計(jì)#include<AT89X51.h>sbitLED=P0^0;unsignedcharT_Count=0;voidmain(){//設(shè)置定時(shí)器工作在模式0,且不受INT0控制,工作于Timer狀態(tài)
TMOD=0x00;//TH0和TL0應(yīng)如何設(shè)置?
TH0=(8192-5000)/32; TL0=(8192-5000)%32;//如何初始化中斷?
IE=0x82;//如何啟動(dòng)定時(shí)器0?
TR0=1;//接下來干什么?
while(1);}58//如何定義T0中斷處理函數(shù)?voidTimer_Interrupt()interrupt1{//中斷處理函數(shù)中應(yīng)做哪些事情?//定時(shí)器初值初始化;5ms累加產(chǎn)生500ms;500msLED狀態(tài)翻轉(zhuǎn)//定時(shí)器初值初始化;
TH0=(8192-5000)/32; TL0=(8192-5000)%32;//5ms累加產(chǎn)生500ms;500msLED狀態(tài)翻轉(zhuǎn) if(++T_Count==100) { LED=!LED;
T_Count=0; }}59演示:Project1例:如何使用單片機(jī)對外部脈沖計(jì)數(shù)?6061演示:Project7數(shù)碼管顯示按鍵按下的次數(shù)分析:使用T0,工作于模式0,使用外部計(jì)數(shù)模式;一個(gè)數(shù)碼管僅顯示0~9;62voidmain(){ unsignedchari=0;//初始化定時(shí)器0,工作于計(jì)數(shù)模式、模式0,不受INT0控制 TMOD=0x04;//開始計(jì)數(shù)
TR0=1; P0=0x00; while(1) { P0=~Disp[i]; //TL0內(nèi)保存了按鍵次數(shù),只有一個(gè)數(shù)碼管,需處理一下
i=(TL0)%10; }}63TMOD(89H)D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M0演示:Project7思考:在剛剛的例子基礎(chǔ)上,如何利用T0和T1進(jìn)行外部中斷擴(kuò)展?6465主任務(wù)(讓D5一直閃爍)INT0中斷(讓D1閃爍5次)INT1中斷(讓D2閃爍5次)T0中斷(讓D3閃爍5次)T1中斷(讓D4閃爍5次)INT0中斷INT1中斷T0擴(kuò)展中斷T1擴(kuò)展中斷演示:Project9問題:要實(shí)現(xiàn)T0一次外部脈沖就觸發(fā)中斷(產(chǎn)生定時(shí)器溢出中斷)初始值應(yīng)為多少? TH0=(8192-1)/32; TL0=(8192-1)%32;66問題:要實(shí)現(xiàn)T0、T1外部中斷觸發(fā),T0、T1應(yīng)工作于哪種模式?應(yīng)工作于計(jì)數(shù)模式。如何用C語言設(shè)置。TMOD=0x4467T0對應(yīng)的中斷處理函數(shù)如何定義?voidExternal_Interrupt_t0()interrupt1T0溢出中斷處理函數(shù)中應(yīng)執(zhí)行哪些工作?定時(shí)器初始化、LED閃爍控制68INT0:0T0:1INT1:2T1:3串口:4程序應(yīng)包含幾個(gè)函數(shù)?主函數(shù)、4個(gè)中斷處理函數(shù)主程序完成什么功能?中斷初始化、定時(shí)器初始化、定時(shí)器開始、while(1)循環(huán)69voidmain(){ //LED初始狀態(tài)
LED0=1;LED1=1;LED2=1;LED3=1; //T0T1初始化
TMOD=0x44;TH0=(8192-1)/32;TL0=(8192-1)%32; TH1=(8192-1)/32; TL1=(8192-1)%32; //INT0INT1初始化
IT0=1; IT1=1; //初始化中斷
EA=1; //打開總中斷開關(guān)
EX0=1;//打開INT0中斷
EX1=1;//打開INT1中斷
ET1=1;//打開T1中斷
ET0=1;//打開T0中斷70//初始化中斷優(yōu)先級(jí)
PX0=1; //T0T1開始工作
TR0=1;TR1=1; //主任務(wù)
while(1) { LED4=!LED4; DelayX1ms(100); }}71//INT0中斷處理函數(shù)voidExternal_Interrupt_0()interrupt0{ unsignedint
i; for(i=0;i<10;i++) {
LED0=!LED0; DelayX1ms(200); }}72//INT1中斷處理函數(shù)voidExternal_Interrupt_1()interrupt2{ unsignedint
i; for(i=0;i<10;i++) {
LED1=!LED1; DelayX1ms(400); }}73//T0中斷處理函數(shù)voidExternal_Interrupt_t0()interrupt1 //T0{ unsignedint
i;
TH0=(8192-1)/32; TL0=(8192-1)%32; for(i=0;i<10;i++) {
LED2=!LED2; DelayX1ms(300); }}74//T1中斷處理函數(shù)voidExternal_Interrupt_t1()interrupt3 //T1{ unsignedint
i;
TH1=(8192-1)/32; TL1=(8192-1)%32; for(i=0;i<10;i++) {
LED3=!LED3; DelayX1ms(500); }}754.2模式1及其應(yīng)用76TH0TL08位8位77問題:在具有初值的情況下,計(jì)數(shù)器模式1在多長時(shí)間后溢出?T=(65536-初值)×?xí)r鐘周期×12T=(65536-初值)×機(jī)器周期問題:單片機(jī)外部接12MHz晶振,定時(shí)器采用模式1,則定時(shí)器最大定時(shí)時(shí)間為多少?78答案:
模式1用16位計(jì)時(shí),機(jī)器周期為1us,216×機(jī)器周期=65.536ms。例子:流水燈,每隔200ms滾動(dòng)一次。79演示:Project2分析:模式1最大定時(shí)為216×機(jī)器周期=65.536ms,無法滿足200ms的定時(shí)要求,因此同模式0的例子一樣,通過另外一個(gè)計(jì)數(shù)器來進(jìn)行累加。這里我們首先產(chǎn)生40ms的定時(shí),根據(jù)公式:(216-初值)×機(jī)器周期=40ms可得:初值=216-40000.80#include<AT89X51.h>#include<intrins.h>voidmain(){ unsignedcharT_Count=0; P0=0xFE; P2=0xFE;
TMOD=0x01;
TH0=(65536-40000)/256; TL0=(65536-40000)%256;
TR0=1;
81while(1) { if(TF0==1) { TF0=0; TH0=(65536-40000)/256; TL0=(65536-40000)%256; if(++T_Count==5) { P0=_crol_(P0,1); P2=_crol_(P2,1);
T_Count=0; } } }}82演示:Project2剛剛的代碼中,沒有使用到中斷處理函數(shù),是根據(jù)TF0==1來判斷T0是否發(fā)生了溢出。如何使用中斷的方法?83中斷模式如下:#include<AT89X51.h>#include<intrins.h>unsignedcharT_Count=0;voidmain(){ P0=0xFE; P2=0xFE; TMOD=0x01; IE=0x82; TH0=(65536-40000)/256; TL0=(65536-40000)%256; TR0=1; while(1); }84voidInterrput_handle()interrupt1{ TH0=(65536-40000)/256; TL0=(65536-40000)%256; if(++T_Count==5) { P0=_crol_(P0,1); P2=_crol_(P2,1);
T_Count=0; }}85演示:Project34.3模式2及其應(yīng)用TL0計(jì)數(shù)溢出時(shí),不僅使溢出中斷標(biāo)志位TF0置1,而且還自動(dòng)把TH0中的內(nèi)容重新裝載到TL0中。TL0用作8位計(jì)數(shù)器,TH0用以保存初值。86該模式可省去軟件中重裝常數(shù)的語句,并可產(chǎn)生相當(dāng)精確的定時(shí)時(shí)間,適合于作串行口波特率發(fā)生器。8788問題:單片機(jī)外部接12MHz晶振,定時(shí)器采用模式2,則定時(shí)器最大定時(shí)時(shí)間為多少?89答案:
模式2用8位計(jì)時(shí),機(jī)器周期為1us,28×機(jī)器周期=256us。例子:流水燈,每隔200ms滾動(dòng)一次。(模式2來實(shí)現(xiàn))90演示:Project4分析:由于只能8位計(jì)數(shù),最大定時(shí)時(shí)間為28×機(jī)器周期=256×1us=256us,可以先用模式3產(chǎn)生200us的中斷,再累加1000次達(dá)到200ms。91#include<AT89X51.h>#include<intrins.h>unsignedint
T_Count=0;voidmain(){ P0=0xFE; P2=0xFE;
TMOD=0x02;
IE=0x82; TH0=(256-200); TL0=(256-200); TR0=1; while(1); }92voidInterrput_handle()interrupt1{ if(++T_Count==1000) { P0=_crol_(P0,1); P2=_crol_(P2,1);
T_Count=0; }}93演示:Project44.4模式3簡介T0設(shè)置為模式3,TL0和TH0被分成兩個(gè)相互獨(dú)立的8位計(jì)數(shù)器。TL0:用原T0的各控制位、引腳和中斷源,即C/T,GATE,TR0,TF0,T0(P3.4)引腳,INT0(P3.2)引腳。TL0可工作在定時(shí)器方式和計(jì)數(shù)器方式。其功能和操作與模式0、模式1相同(只是8位)。TH0:只可用作簡單的內(nèi)部定時(shí)功能。TH0占用了定時(shí)器T1的控制位TR1和T1的中斷標(biāo)志TF1,其啟動(dòng)和關(guān)閉僅受TR1的控制。9495那么,定時(shí)器1怎么辦?定時(shí)器1將不能產(chǎn)生溢出中斷,但可用于其它不需產(chǎn)生中斷的場合。如作為波特率發(fā)生器或作為定時(shí)計(jì)數(shù)器被軟件查詢。由于此時(shí)T1的TR1歸TH0所用,因此T1將自動(dòng)工作。如果需要停止T1工作,可以將T1設(shè)置為模式3。注意:當(dāng)定時(shí)器1設(shè)置為工作方式3時(shí),將停止工作。96當(dāng)系統(tǒng)需要用定時(shí)器1來產(chǎn)生波特率而又同時(shí)需要兩個(gè)定時(shí)/計(jì)數(shù)器時(shí),這種工作方式十分有用。97判斷下述說法是否正確:在方式3模式下,定時(shí)/計(jì)數(shù)器0可以構(gòu)成二個(gè)定時(shí)器正確在方式3模式下,定時(shí)/計(jì)數(shù)器0可以構(gòu)成一個(gè)定時(shí)器和一個(gè)計(jì)數(shù)器。正確在方式3模式下,定時(shí)/計(jì)數(shù)器0可以構(gòu)成二個(gè)計(jì)數(shù)器錯(cuò)誤98當(dāng)T0工作于模式3時(shí),TH0不能用作計(jì)數(shù)器。正確當(dāng)T0工作于模式3時(shí),T1工作于模式0~2時(shí),可以使用TR1時(shí)T1開始工作。錯(cuò)誤當(dāng)T0工作于模式3時(shí),要使T1停止工作只有將其置于模式3。正確99單片機(jī)原理(三)1.本次課的目標(biāo)2.單片機(jī)定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)3.定時(shí)器的控制4.定時(shí)器的四種模式及應(yīng)用5.定時(shí)器初始化過程6.綜合實(shí)驗(yàn)7.小結(jié)1005.定時(shí)器初始化過程(1)、確定并設(shè)定定時(shí)器工作模式
TMOD(2)、設(shè)置定時(shí)/計(jì)數(shù)器初值
TH0、TL0或TH1、TL1(3)、開啟定時(shí)器中斷
IE:ET0(ET1)和EA101(4)、啟動(dòng)定時(shí)器
TCON:TR0(TR1)注:如果采用查詢方式控制定時(shí)器還需要判斷TF0(TF1)102定時(shí)器0使用步驟Step1:設(shè)置Timer0工作模式103Step2:啟動(dòng)Timer0Step3:Timer0不斷累加,直至溢出,TF0置1。然后重新開始累加,依次類推。直至TR0=0停止累加。104單片機(jī)原理(三)1.本次課的目標(biāo)2.單片機(jī)定時(shí)器/計(jì)數(shù)器的結(jié)構(gòu)3.定時(shí)器的控制4.定時(shí)器的四種模式及應(yīng)用5.定時(shí)器初始化過程6.綜合實(shí)驗(yàn)7.小結(jié)105實(shí)驗(yàn)一:用定時(shí)器0方式1在P1.0上產(chǎn)生周期為2S的方波。晶振頻率為12MHz。1、最大定時(shí)時(shí)間:65536×1
s=65.536ms2、選定定時(shí)T=50ms3、
4、TH0=(65536-50000)/256;TL0=(65536-50000)%256;6.綜合實(shí)驗(yàn)演示:Proteus仿真(Project5)#include<reg51.h>sbitP1_0=P1^0;main(){ unsignedchari=20;//T0工作模式為1
TMOD=0x01;//根據(jù)計(jì)算設(shè)定計(jì)數(shù)器初值 TH0=(65536-50000)/256; TL0=(65536-50000)%256;//啟動(dòng)定時(shí)器 TR0=1;程序(查詢方式) while(1) {
if(TF0==1)//判斷定時(shí)溢出標(biāo)志 { TH0=(65536-50000)/256; TL0=(65536-50000)%256; TF0=0;//清除標(biāo)志位
i=i-1;if(i==0)//判斷是否計(jì)滿20次,即定時(shí)1秒{
i=20; P1_0=!P1_0;//將P1.0電平翻轉(zhuǎn)} } }}演示:KeilC仿真(Project5)演示:Proteus仿真(Project5)將上述程序改為中斷模式:109#include<reg51.h>sbitP1_0=P1^0;unsignedchari=20;main(){ //初始化中斷
IE=0x82; //設(shè)定T0工作模式為1 TMOD=0x01; TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
//啟動(dòng)定時(shí)器 TR0=1; //接下來干什么? while(1){}}110//T0溢出中斷處理函數(shù)如何定義?voidInterrput_handle()interrupt1{ //T0初始化
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
i=i-1; if(i==0)//判斷是否計(jì)滿20次,即定時(shí)1秒
{ i=20; P1_0=!P1_0;//將P1.0電平翻轉(zhuǎn)
}}111演示:KeilC仿真(Project6)實(shí)驗(yàn)二:設(shè)計(jì)制作一個(gè)頻率計(jì)。112演示:Proteus仿真(Project10)基本思路計(jì)算1s內(nèi)脈沖的個(gè)數(shù),即為頻率按鍵按下,啟動(dòng)定時(shí)器;定時(shí)器T1工作于計(jì)數(shù)模式定時(shí)器T0工作于定時(shí)模式當(dāng)計(jì)時(shí)達(dá)到1s時(shí),停止定時(shí)器,將T1值顯示出來。由50ms擴(kuò)展得到1s定時(shí)113核心代碼:初始化部分(中斷、定時(shí)器初始化)//打開T1、T0中斷
IE=0x8A;// T1模式1,計(jì)數(shù);T0模式1,定時(shí)
TMOD=0x51; TH0=(65536-50000)/256; TL0=(65536-50000)%256;114EAESET1EX1ET0EX0
IE(A8H)AFHAEHADHACHABHAAHA9HA8HTMOD(89H)D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M0主程序:按鍵按下,開始計(jì)時(shí)
while(1) { if(P1_0==0) { DdelayX1ms(2); if(P1_0==0) { TR1=1; TR0=1; } } else {for(i=0;i<5;i++) { P2=DSY_BIT[i]; P0=~DSY_CODE[Disp_Buffer[i]]; DdelayX1ms(2); } } }115中斷服務(wù)程序voidTimer_Interrupt()interrupt1{ unsignedint
Tmp; TH0=(65536-50000)/256; TL0=(65536-50000)%256; if(++Count==20) { TR1=TR0=0; Count=0;
Tmp=TH1*256+TL
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025黑龍江大興安嶺地區(qū)韓家園林業(yè)局工勤崗位人員招聘40人筆試備考重點(diǎn)題庫及答案解析
- 2025內(nèi)蒙古呼蘭貝爾扎蘭屯市第二輪“歸雁計(jì)劃”綜合崗位回引人才11人筆試備考重點(diǎn)試題及答案解析
- 2026中國社會(huì)科學(xué)院招聘管理人員60人筆試備考重點(diǎn)題庫及答案解析
- 2025遼寧沈陽康平縣消防救援大隊(duì)政府專職消防隊(duì)員招聘17人筆試備考重點(diǎn)試題及答案解析
- 2025廣西崇左市江州區(qū)消防救援大隊(duì)政府專職消防員招聘筆試備考重點(diǎn)試題及答案解析
- 2025黑龍江七臺(tái)河七煤醫(yī)院招聘財(cái)務(wù)專業(yè)人員2人筆試備考重點(diǎn)題庫及答案解析
- 2025年國科大杭州高等研究院公開招聘編外工作人員備考題庫完整答案詳解
- 2025年為濰坊市檢察機(jī)關(guān)公開招聘聘用制書記員的備考題庫及完整答案詳解1套
- 2025年中國科學(xué)院深??茖W(xué)與工程研究所招聘備考題庫(十三)及完整答案詳解1套
- 2025年溫嶺農(nóng)商銀行招聘備考題庫有答案詳解
- 護(hù)理部主任年終匯報(bào)
- 《電力市場概論》 課件 第七章 發(fā)電投資分析
- 2024年新蘇教版四年級(jí)上冊科學(xué)全冊知識(shí)點(diǎn)(復(fù)習(xí)資料)
- 題庫二附有答案
- 市場拓展與銷售渠道拓展方案
- 工地大門施工協(xié)議書
- 文史哲與藝術(shù)中的數(shù)學(xué)智慧樹知到期末考試答案章節(jié)答案2024年吉林師范大學(xué)
- 鐵血將軍、建軍元?jiǎng)?葉挺 (1)講解
- 2023年西門子PLC知識(shí)考試題(附含答案)
- 鼻鼽(變應(yīng)性鼻炎)診療方案
- 消防應(yīng)急疏散和滅火演習(xí)技能培訓(xùn)
評論
0/150
提交評論