單片機(jī)的定時(shí)器計(jì)數(shù)器_第1頁(yè)
單片機(jī)的定時(shí)器計(jì)數(shù)器_第2頁(yè)
單片機(jī)的定時(shí)器計(jì)數(shù)器_第3頁(yè)
單片機(jī)的定時(shí)器計(jì)數(shù)器_第4頁(yè)
單片機(jī)的定時(shí)器計(jì)數(shù)器_第5頁(yè)
已閱讀5頁(yè),還剩50頁(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)介

單片機(jī)的定時(shí)器計(jì)數(shù)器第1頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月6.1定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)與工作原理6.1.1定時(shí)/計(jì)數(shù)器的基本原理6.1.2定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)6.2定時(shí)/計(jì)數(shù)器的控制6.3定時(shí)/計(jì)數(shù)器的工作方式6.4定時(shí)/計(jì)數(shù)器的編程和應(yīng)用第2頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月純軟件定時(shí)/計(jì)數(shù)方法:定時(shí)——空循環(huán)預(yù)定周次,等待預(yù)定時(shí)間計(jì)數(shù)——讀取I/O口電平,統(tǒng)計(jì)變化次數(shù)基本思路:由CPU統(tǒng)計(jì)狀態(tài)變化次數(shù),待預(yù)定結(jié)果出現(xiàn)后結(jié)束統(tǒng)計(jì)。delay(unsignedinttime){unsignedintj=0;for(;time>0;time--)for(j=0;j<125;j++);}存在問(wèn)題:占用過(guò)多CPU機(jī)時(shí)純軟件第3頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月單片機(jī)軟硬件聯(lián)合定時(shí)/計(jì)數(shù)方法:等待CPU響應(yīng)系統(tǒng)時(shí)鐘脈沖加1計(jì)數(shù)器溢出標(biāo)志溢出定時(shí)器外來(lái)信號(hào)脈沖加1計(jì)數(shù)器溢出標(biāo)志溢出等待CPU響應(yīng)計(jì)數(shù)器外來(lái)信號(hào)脈沖加1計(jì)數(shù)器溢出標(biāo)志溢出等待CPU響應(yīng)系統(tǒng)時(shí)鐘脈沖K定時(shí)/計(jì)數(shù)器定時(shí)器的本質(zhì)是計(jì)數(shù)器(對(duì)時(shí)鐘脈沖計(jì)數(shù)),計(jì)數(shù)器則是對(duì)外來(lái)脈沖計(jì)數(shù).軟硬件聯(lián)合第4頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月計(jì)數(shù)器的溢出空間可隨計(jì)數(shù)初值改變→定時(shí)時(shí)間tt=(計(jì)數(shù)器最大空間-計(jì)數(shù)初值)×機(jī)器周期=(2n-a)×12/fosc(s)t與n、a、fosc三個(gè)因素有關(guān)TFx(X=0、1)Tx端(每個(gè)機(jī)器周期產(chǎn)生一個(gè)計(jì)數(shù)脈沖)邏輯開(kāi)關(guān)功能:=0→定時(shí)器方式,=1計(jì)數(shù)器方式基本工作原理第5頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月TFx(X=0、1)Tx端計(jì)數(shù)值N=(計(jì)數(shù)器滿計(jì)數(shù)值-計(jì)數(shù)初值)=(2n–a)N與n、a兩個(gè)因素有關(guān)計(jì)數(shù)值N第6頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月6.1定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)與工作原理6.1.1定時(shí)/計(jì)數(shù)器的基本原理6.1.2定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)6.2定時(shí)器的控制6.3定時(shí)/計(jì)數(shù)器的工作方式6.4定時(shí)/計(jì)數(shù)器的編程和應(yīng)用第7頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月2個(gè)16位計(jì)數(shù)器T0(TH0、TL0)和T1(TH1、TL1)——加1計(jì)數(shù)器2個(gè)控制寄存器TCON和TMOD——管理計(jì)數(shù)器的運(yùn)行2個(gè)外部引腳T0(P3.4)和T1(P3.5)——接入外部脈沖定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)第8頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月6.1定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)與工作原理6.2定時(shí)器/計(jì)數(shù)器的控制6.3定時(shí)/計(jì)數(shù)器的工作方式6.4定時(shí)/計(jì)數(shù)器的編程和應(yīng)用第9頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月門(mén)控位GATE=0-允許TR1啟動(dòng)計(jì)數(shù)器GATE=1-允許INT1啟動(dòng)計(jì)數(shù)器啟動(dòng)控制位TR1=1-啟動(dòng)計(jì)數(shù)器TR1=0-停止計(jì)數(shù)器外部中斷1參與定時(shí)器的啟停管理中斷請(qǐng)求標(biāo)志位TF1=1-請(qǐng)求TR1=0-復(fù)位

T1模式選擇位=0-定時(shí)=1-計(jì)數(shù)定時(shí)/計(jì)數(shù)器的控制關(guān)系(以T1為例)第10頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月定時(shí)器方式寄存器——TMODT0定時(shí)器控制寄存器——TCON第11頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月TF1TR1TF0TR0IE1IT1IE0IT08FH8DH8CH8BH8AH89H88HTCON8EH(88H)定時(shí)器控制位外部中斷控制位

T1

T0

TF0

TR0

T0腳INT0注意,系統(tǒng)上電默認(rèn)值為T(mén)CON=0,則默認(rèn)狀態(tài)應(yīng)為:TR0和TR1均為關(guān)閉狀態(tài)、電平中斷觸發(fā)方式、沒(méi)有外部中斷請(qǐng)求TCON第12頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月GATEC/TM1M0GATEC/TM1M0D7D5D4D3D2D1D0TMODD6(89H)T1T0

T1方式選擇位00-方式001-方式110-方式2T1工作狀態(tài)

T1

T0

TF0

TR0

T0腳INT0T0方式選擇位00-方式001-方式110-方式211-方式3T0工作狀態(tài)TMOD第13頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月GATEC/TM1M0GATEC/TM1M0D7D5D4D3D2D1D0TMODD6(89H)T1T0

注意:TMOD只能以字節(jié)方式進(jìn)行初始化例如,設(shè)置T0為定時(shí)器方式1,允許TR0啟動(dòng);T1為計(jì)數(shù)器方式0,允許INT1啟動(dòng)。則TMOD=11000001B=0xc1又如,系統(tǒng)上電默認(rèn)值為T(mén)MOD=0,則默認(rèn)狀態(tài)應(yīng)為:T0和TI均為定時(shí)器方式0,允許TR0、TR1啟動(dòng)。注意:第14頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月6.1定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)與工作原理6.2定時(shí)器/計(jì)數(shù)器的控制6.3定時(shí)/計(jì)數(shù)器的工作方式6.4定時(shí)/計(jì)數(shù)器的編程和應(yīng)用第15頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月M1M0工作方式功能說(shuō)明00110101012313位定時(shí)/計(jì)數(shù)器16位定時(shí)/計(jì)數(shù)器8位自動(dòng)重裝定時(shí)/計(jì)數(shù)器3種定時(shí)/計(jì)數(shù)器關(guān)系T0工作方式注意:T0有4種工作方式,每種工作方式都有定時(shí)和計(jì)數(shù)2種方式。T1只有3種工作方式(T0的方式3中占用了T1的部分資源)。M1M0工作方式功能說(shuō)明00101001213位定時(shí)/計(jì)數(shù)器16位定時(shí)/計(jì)數(shù)器8位自動(dòng)重裝定時(shí)/計(jì)數(shù)器T1工作方式學(xué)習(xí)順序:方式1→方式2→方式0→方式3工作方式第16頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月定時(shí)時(shí)間:t=(216-a)×12/fosc(s)——使用16位定時(shí)/計(jì)數(shù)器(THx+TLx)(M0M1為01組合時(shí))定時(shí)范圍為1~65,536μs(≈65ms)。最大定時(shí)時(shí)間(a=0,fosc=12MHz):t=216(s)=65536(s)定時(shí)方式(1)方式1第17頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月最大計(jì)數(shù)值:N=65536(脈沖)計(jì)數(shù)值:N=(216–a)由于檢測(cè)一個(gè)負(fù)跳變需要2個(gè)機(jī)器周期,即24個(gè)振蕩周期,故最高計(jì)數(shù)頻率=。故,對(duì)于12MHz晶振,最大外部脈沖的頻率為0.5MHz。計(jì)數(shù)方式第18頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月設(shè)單片機(jī)的fosc=12MHz,采用T0定時(shí)方式1在P1.0腳上輸出周期為2ms的方波。虛擬示波器實(shí)例1第19頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月分析:周期為2ms的方波由2個(gè)半周期為1ms的正負(fù)脈沖組成方波輸出原理:定時(shí)1ms后將端口輸出電平取反。2ms1msTH0=0xfcTL0=0x181ms定時(shí)的計(jì)數(shù)初值應(yīng)為:a=216–t*fos/12=216–1000*12/12=64536=0xfc18注意:需要不斷重裝計(jì)數(shù)初值?;颍篢H0=64536/256;TL0=64536%256;

第20頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月#include<reg51.h>sbitP1_0=P1^0;main(){

TMOD=0x01;//設(shè)置T0定時(shí)方式1(00000001B)TR0=1;//啟動(dòng)T0for(;;){

TH0=0xfc;//裝載計(jì)數(shù)初值

TL0=0x18;

do{}while(!TF0);//等待TF0溢出P1_0=!P1_0;//定時(shí)時(shí)間到P1.0反相

TF0=0;//TF0標(biāo)志清0 }}T0(1)查詢方式第21頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月圖6.14實(shí)例1仿真波形圖第22頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月#include<reg51.h>sbitP1_0=P1^0;timer0()interrupt1{//T0中斷函數(shù)P1_0=!P1_0; //P1.0取反

TH0=0xfc; //裝載計(jì)數(shù)初值

TL0=0x18;}main(){

TMOD=0x01; //T0定時(shí)方式1

TH0=0xfc; //裝載計(jì)數(shù)初值

TL0=0x18;EA=1; //開(kāi)總中斷ET0=1; //開(kāi)T0中斷TR0=1; //啟動(dòng)T0 while(1);}注意:中斷響應(yīng)后系統(tǒng)可自動(dòng)將TFx標(biāo)志位清0(2)中斷方式第23頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月小結(jié):使用定時(shí)/計(jì)數(shù)器的步驟強(qiáng)調(diào):TMOD的設(shè)置只能以字節(jié)形式給出T0(1)設(shè)置TMOD——確定定時(shí)/計(jì)數(shù)器的工作狀態(tài)T1定時(shí)計(jì)數(shù)012012T0定時(shí)計(jì)數(shù)01230123第24頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月(2)計(jì)算計(jì)數(shù)初值——產(chǎn)生期望的定時(shí)間隔計(jì)數(shù)初值a=216-t×fosc/12(t≤65536s)THx=a/256TLx=a%256裝載計(jì)數(shù)初值:第25頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月3)確定采用何種方式處理溢出結(jié)果若是查詢方式——采用條件判斷語(yǔ)句若是中斷方式→中斷初始化設(shè)置和中斷服務(wù)程序:do{}while(!TFx); //x=0或1……ETx=1;//開(kāi)定時(shí)x中斷,x=0或1EA=1;//開(kāi)總中斷tx_srv()interruptn{//n=1或3……}第26頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月4)啟動(dòng)定時(shí)器:TR0=1或TR1=15)進(jìn)行定時(shí)或計(jì)數(shù)結(jié)束后的其它工作6)為下次定時(shí)/計(jì)數(shù)做準(zhǔn)備(清TFx標(biāo)志+重裝載計(jì)數(shù)初值)若是中斷方式,則無(wú)需軟件清TFx標(biāo)志位;若是查詢方式,需要軟件清除TFx標(biāo)志位。第27頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月采用8位計(jì)數(shù)器,延時(shí)時(shí)間t=(28-a)×12/fosc(微秒)→12MHz時(shí)的最大定時(shí)量為256s;可自動(dòng)重裝載計(jì)數(shù)初值(TLx溢出后,THx數(shù)值可自動(dòng)裝入TLx);因沒(méi)有裝載計(jì)數(shù)初值造成的定時(shí)延誤,方式2定時(shí)精度相對(duì)較高。(2)方式2第28頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月(1)查詢方式#include<reg51.h>sbitP1_0=P1^0;main(){TMOD=0x02;

TH0=TL0=0x06;TR0=1;for(;;){

do{}while(!TF0);P1_0=!P1_0;TF0=0; }}(2)中斷方式#include<reg51.h>sbitP1_0=P1^0;timer0()interrupt1{P1_0=!P1_0; }main(){TMOD=0x02;

TH0=TL0=0x06;EA=ET0=1; TR0=1;

while(1);}采用T0定時(shí)方式2在P1.0口輸出周期為0.5ms的方波(設(shè)fosc=12MHz)。分析:計(jì)數(shù)初值TL0=((256-250)*12/12)%256=0x06,TMOD=0x02實(shí)例2第29頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月周期為0.5ms方波第30頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月將第4章實(shí)例5“計(jì)數(shù)顯示器”中的軟件查詢法進(jìn)行按鍵檢測(cè)改用T0計(jì)數(shù)器方式2,并以中斷方式編程?!窘狻吭瓐D中按鍵是由I/O口P3.7引腳接入的,本實(shí)例需要將其改由T0(P3.4)引腳接入。實(shí)例3第31頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月分析:將T0設(shè)置為計(jì)數(shù)器方式2,設(shè)法使其在1個(gè)外部脈沖到來(lái)時(shí)就能溢出(即計(jì)數(shù)溢出周次為1)產(chǎn)生中斷請(qǐng)求。計(jì)數(shù)初值為:a=28–1=255=0xff初始化TMOD=00000110B=0x06第32頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月#include<reg51.h>unsignedchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};unsignedcharcount=0;sbitp1_0=P1^0;int0_srv()interrupt1{ //T0中斷服務(wù)if(++count==100)count=0;P0=table[count/10];P2=table[count%10];}main(){P0=P2=table[0]; //開(kāi)始顯示00TMOD=0x06; //T0方式1計(jì)數(shù)TH0=TL0=0xFF; //計(jì)數(shù)初值0xFFET0=1; //允許T0中斷EA=1; //允許CPU中斷TR0=1; //啟動(dòng)T0while(1); //無(wú)限循環(huán)}實(shí)例3參考程序第33頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月運(yùn)行效果第34頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月使用13位的定時(shí)/計(jì)數(shù)器(THx7-0+TLx4-0)定時(shí)時(shí)間t=(213-a)×12/fosc(μs)計(jì)數(shù)初值a=213-t×fosc/1212MHz時(shí)的最大定時(shí)量t=213μs=8.192ms(3)方式0第35頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月解:計(jì)數(shù)初值a=213-5000×12/12=3192=110001111000BTH0TL0011000110

0

0110006 3 1 8H計(jì)算T0方式0定時(shí)5ms的計(jì)數(shù)初值a由于方式0的TL0高3位未用(一般填0),因此a=0110001100011000=6318H即,TH0=0x63;TL0=0x18;實(shí)例4fosc=12MHz或:TH0=3192/32;TL0=3192%32;第36頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月除計(jì)數(shù)器位數(shù)不同外,方式0與方式1的邏輯結(jié)構(gòu)并無(wú)差異。方式0采用13位計(jì)數(shù)器是為了與早期產(chǎn)品MCS-48單片機(jī)兼容。方式0的初值計(jì)算比較麻煩,一般采用方式1替代。方式0方式1第37頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月3種組合狀態(tài)T1仍可設(shè)置為方式0~2;通常將T1設(shè)定為定時(shí)方式2(作為波特率發(fā)生器使用)TH0+TF1+TR1組成的8位定時(shí)器TL0+TF0+TR0組成的8位定時(shí)/計(jì)數(shù)器T1組成的無(wú)中斷功能的定時(shí)器特點(diǎn):方式3下T0可有2個(gè)具有中斷功能的8位定時(shí)器(4)方式3第38頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月6.1定時(shí)/計(jì)數(shù)器的結(jié)構(gòu)與工作原理6.2定時(shí)器/計(jì)數(shù)器的控制6.3定時(shí)/計(jì)數(shù)器的工作方式6.4定時(shí)/計(jì)數(shù)器的編程和應(yīng)用第39頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月應(yīng)用:定時(shí)器——用于定時(shí)控制,或作為分頻器發(fā)生各種不同頻率的方波;計(jì)數(shù)器——用于外部脈沖統(tǒng)計(jì)或外部中斷源擴(kuò)充;復(fù)雜應(yīng)用—需要將定時(shí)與計(jì)數(shù)結(jié)合起來(lái)。第40頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月實(shí)例5

由P3.4口輸入一個(gè)外部低頻窄脈沖信號(hào)。當(dāng)該信號(hào)出現(xiàn)負(fù)跳變時(shí),由P3.0口輸出寬度為500μs的同步脈沖,如此往復(fù)。要求據(jù)此設(shè)計(jì)一個(gè)波形展寬程序(fosc=6MHz)。第41頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月1)將T0設(shè)置為1次計(jì)數(shù)方式2,初值設(shè)為0xff。這樣P3.4一旦發(fā)生負(fù)跳變T0就會(huì)產(chǎn)生溢出;2)查詢TF0標(biāo)志位。當(dāng)TF0=1時(shí)將T0設(shè)置為500s定時(shí)方式2,初值a為0x06(=256-500×6/12),同時(shí)使P3.0輸出低電平;3)查詢TF0標(biāo)志位。待T0再次溢出后使P3.0輸出高電平,然后將T0設(shè)置為1次計(jì)數(shù)方式2,如此往復(fù)進(jìn)行。分析:可以采取如下做法:第42頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月T0實(shí)例5參考程序#include<reg51.h>sbitP3_0=P3^0;voidmain(){TMOD=0x06; //設(shè)置為T(mén)0計(jì)數(shù)方式2TH0=256-250; //6MHz晶振時(shí)500μs相當(dāng)于250個(gè)機(jī)器周期TL0=255; //初值0xff可使1個(gè)外來(lái)脈沖即產(chǎn)生溢出TR0=1; //啟動(dòng)計(jì)數(shù)器while(1){while(!TF0); //等待首次溢出TF0=0; //清TF0溢出標(biāo)志TMOD=0x02; //設(shè)置為T(mén)0定時(shí)方式2P3_0=0;while(!TF0); //等待再次溢出TF0=0; //清TF0溢出標(biāo)志P3_0=1;TMOD=0x06; //設(shè)置為T(mén)0計(jì)數(shù)方式2TL0=255; //重新置初值}}第43頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月實(shí)例5仿真運(yùn)行效果P3.0P3.4第44頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月采用10MHz晶振,在P1.0腳上輸出周期為2.5s,高電平占空比為20%的脈沖信號(hào)。分析:10兆晶振,方式1最大定時(shí)為78.643ms;可以采用定時(shí)中斷與軟件計(jì)數(shù)聯(lián)合法:利用定時(shí)中斷進(jìn)行中斷次數(shù)統(tǒng)計(jì);若取10ms產(chǎn)生定時(shí),則2.5s=250次中斷之和;則500ms(20%占空比)相當(dāng)于50次中斷之和。2.5s0.5s實(shí)例610ms定時(shí),晶振fosc=10MHz.定時(shí)器計(jì)數(shù)次數(shù)=10*1000*10/12=8333第45頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月實(shí)例6參考程序#include<reg51.h>#defineucharunsignedcharuchartime;ucharperiod=250;ucharhigh=50;timer0(void)interrupt1using1//------定時(shí)器0中斷處理程序----

{TH0=(65536-8333)/256; //重載計(jì)數(shù)初值TL0=(65536-8333)%256;if(++time==high)P1=0; //高電平時(shí)間到變低elseif(time==period) //周期時(shí)間到變高{time=0;P1=1;}}main()//-------------------主函數(shù)---------------------------{TMOD=0x01; //定時(shí)器0方式1TH0=(65536-8333)/256; //計(jì)數(shù)初值TL0=(65536-8333)%256;EA=1;ET0=1;TR0=1;do{}while(1);}第46頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月實(shí)例6仿真運(yùn)行效果第47頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月采用定時(shí)中斷控制流水燈,實(shí)現(xiàn)每秒1位,自上而下循環(huán)功能(fosc=12MHz)。實(shí)例7第48頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月分析:可以利用20次50ms的定時(shí)中斷方案,計(jì)數(shù)初值為:a=65536-50000×12/12=0x3cb0中斷函數(shù)的任務(wù)過(guò)多,不利于實(shí)時(shí)控制。如何減少中斷函數(shù)任務(wù)?新方案:中斷函數(shù)中僅做中斷次數(shù)統(tǒng)計(jì)和計(jì)數(shù)初值重入,控制操作改在主函數(shù)中進(jìn)行。實(shí)例6的問(wèn)題:第49頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月實(shí)例7參考程序

//定時(shí)中斷方式實(shí)現(xiàn)的跑馬燈實(shí)例 #defineucharunsignedchar//定義一下方便后面使用 #include<reg51.h> //包括一個(gè)51標(biāo)準(zhǔn)內(nèi)核的頭文件 bitldelay=0; //長(zhǎng)定時(shí)溢出標(biāo)記 uchart=0; //定時(shí)溢出次數(shù)

//定時(shí)器0中斷函數(shù) timer0()interrupt1{ t++; if(t==20){ t=0; ldelay=1;//每次溢出置一個(gè)標(biāo)記,以便主程序處理 } TH0=0x3c; //重置T0初值0x3cb0

TL0=0xb0; }第50頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月voidmain(void){ ucharcodeledp[8]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; ucharledi=0; //用來(lái)指示顯示順序 TMOD=0x01; //定義T0定時(shí)方式1 TH0=0x3c; //溢出20次=1秒(12M晶振)

TL0=0xb0; TR0=1; //啟動(dòng)定時(shí)器 ET0=1; //打開(kāi)定時(shí)器0中斷 EA=1; //打開(kāi)總中斷 while(1){ //主程序循環(huán) if(ldelay){ //發(fā)現(xiàn)有時(shí)間溢出標(biāo)記,進(jìn)入處理 ldelay=0; //清除標(biāo)記 P2=ledp[ledi];//讀出一個(gè)值送到P2口 ledi++; //指向下一個(gè) if(ledi==8)ledi=0;//到了最后一個(gè)燈就換到第一個(gè) } }}第51頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月測(cè)量從P3.2(INT0)輸入的正脈沖的寬度,測(cè)量結(jié)果以BCD碼形式存放在片內(nèi)RAM40H開(kāi)始的單元處(設(shè)40H地址存放個(gè)位,系統(tǒng)時(shí)鐘為12MHz,被測(cè)脈沖信號(hào)周期不超過(guò)100ms)。0分析:GATE=TR0=1時(shí)允許INT0的脈沖控制定時(shí)器的啟停,則根據(jù)T0先啟動(dòng)、再關(guān)閉后的計(jì)數(shù)值可算出被測(cè)脈沖寬度。INT0端信號(hào)T0中的脈沖數(shù)實(shí)例8第52頁(yè),課件共55頁(yè),創(chuàng)作于2023年2月實(shí)例8參考程序#include<reg51.h>sbitP3_2=P3^2;main(){unsignedchar*P;unsignedinta;P=0x40; //指針指向片內(nèi)RAM40H單元TMOD=0x09; //T0定時(shí)方式1,允許INT0啟動(dòng)計(jì)數(shù)器TH0=TL0=0; //裝入計(jì)數(shù)初值do{}while(P3_2==1);//等待INT0變低TR0=1 //啟動(dòng)計(jì)數(shù)器條件之一while(P3_2==0); //等待脈沖上升沿,啟動(dòng)計(jì)數(shù)器條件之二while(P3_2==1); //等待脈沖下降沿,關(guān)閉計(jì)數(shù)器TR0=0; //關(guān)閉計(jì)數(shù)器a=TH0*256+TL0; //將TH0和TL0中的數(shù)據(jù)

溫馨提示

  • 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)論