




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
會計學1ATS單片機的定時器計數(shù)器PPT教學課件TMOD用于選擇定時器/計數(shù)器T0、T1的工作模式和工作方式。TCON用于控制T0、T1的啟動和停止,同時包含T0、T1狀態(tài)。計數(shù)器起始計數(shù)從初值開始。單片機復位時計數(shù)器初值為0。7.1.1工作方式控制寄存器TMOD
圖7-2
寄存器TMOD格式第1頁/共60頁(1)GATE—門控位GATE=0,是否計數(shù),由控制位TRx(x
=
0,1)來控制。GATE=1,是否計數(shù),由外中斷引腳INTx*上的電平與運行控制位TRx共同控制。3第2頁/共60頁
(2)M1、M0—工作方式選擇位M1、M04種編碼,對應于4種工作方式的選擇,見表7-1。表7-1 M1、M0工作方式選擇4第3頁/共60頁
(3)C/T*—計數(shù)器模式和定時器模式選擇位C/T*=0,定時器模式,對系統(tǒng)時鐘12分頻的脈沖進行計數(shù)。C/T*=1,計數(shù)器模式,計數(shù)器對外部輸入引腳T0(P3.4)或T1(P3.5)的外部脈沖(負跳變)計數(shù)。7.1.2定時器/計數(shù)器控制寄存器TCON
TCON控制T0、T1的啟動和停止,同時包含T0、T1狀態(tài)。
5圖7-3TCON格式第4頁/共60頁這里僅介紹高4位功能。(1)TF1、TF0—計數(shù)溢出標志位
當計數(shù)器計數(shù)溢出時,該位置“1”。使用查詢方式時,此位可供CPU查詢,但應注意查詢后,用軟件及時將該位清“0”。使用中斷方式時,作為中斷請求標志位,進入中斷服務程序后由硬件自動清“0”。(2)TR1、TR0—計數(shù)運行控制位TR1位(或TR0)=1,啟動計數(shù)器計數(shù)的必要條件。TR1位(或TR0)=0,停止計數(shù)器計數(shù)。該位可由軟件置“1”或清“0”。7.2定時器/計數(shù)器的4種工作方式4種工作方式,分別介紹如下。6第5頁/共60頁7圖7-5
方式1的邏輯結(jié)構(gòu)框圖方式1和方式0差別僅僅在于計數(shù)器的位數(shù)不同7.2.2方式1當M1、M0=01時,工作于方式1,等效電路邏輯結(jié)構(gòu)見圖7-5。7.2.1方式0第6頁/共60頁7.2.3方式2
方式0和方式1最大特點是計數(shù)溢出后,計數(shù)器為全0。因此在循環(huán)定時或循環(huán)計數(shù)應用時就存在用指令反復裝入計數(shù)初值的問題,這會影響定時精度,方式2就是為解決此問題而設置的。
當M1、M0=10時,工作方式2,等效邏輯結(jié)構(gòu)見圖7-6(以T1為例,x=1)。
工作方式2為自動恢復初值(初值自動裝入)的8位定時器/計數(shù)器,TLx(x=0,1)作為常數(shù)緩沖器,當TLx計數(shù)溢出時,在溢出標志TFx置“1”的同時,還自動將THx中的初值送至TLx,使TLx從初值開始重新計數(shù)。定時器/計數(shù)器方式2工作過程見圖7-7。8第7頁/共60頁9圖7-6
方式2邏輯結(jié)構(gòu)框圖第8頁/共60頁10圖7-7方式2工作過程方式2可省去用戶軟件中重裝初值的指令執(zhí)行時間,簡化定時初值的計算方法,可相當精確地定時。第9頁/共60頁7.2.4方式3
方式3是為增加一個附加的8位定時器/計數(shù)器而設置的,從而使AT89S51具有3個定時器/計數(shù)器。方式3只適用于T0,T1不能工作在方式3。T1方式3時相當于TR1
=
0,停止計數(shù)(此時T1可作為串口波特率產(chǎn)生器)。1.工作方式3下的T0
當TMOD的低2位為11時,T0被選為方式3,各引腳與T0的邏輯關(guān)系見圖7-8。T0分為兩個獨立的8位計數(shù)器TL0和TH0,TL0使用T0的狀態(tài)控制位C/T*、GATE、TR0,而TH0被固定為一個8位定時器(不能作為外部計數(shù)模式),并使用定時器T1的狀態(tài)控制位TR1,同時占用定時器T1的中斷請求源TF1。11第10頁/共60頁
圖7-8T0方式3的邏輯結(jié)構(gòu)框圖第11頁/共60頁2.T0工作在方式3時T1的各種工作方式
一般情況下,當T1用作串口波特率發(fā)生器時,T0才工作在方式3。T0方式3時,T1可為方式0、1、2,作為串口波特率發(fā)生器,或不需要中斷的場合。(1)T1工作在方式0
(2)T1工作在方式1
當T1的控制字中M1、M0
=
01時,T1工作在方式1,工作示意見圖7-10。13第12頁/共60頁(3)T1工作在方式2
當T1控制字中M1、M0
=
10時,T1為方式2,工作示意如圖7-11所示。14圖7-10T0方式3時T1為方式1工作示意圖
圖7-11T0方式3時T1為方式2工作示意圖第13頁/共60頁(4)T1設置在方式3T0方式3時,再把T1也設置成方式3,此時T1停止計數(shù)。7.3對外部輸入的計數(shù)信號的要求
計數(shù)器模式時,計數(shù)脈沖來自外部輸入引腳T0或T1。當輸入信號產(chǎn)生負跳變時,計數(shù)值增1。每個機器周期S5P2期間,都對外部輸入引腳T0或T1進行采樣。如在第1個機器周期中采得值為1,而在下一個機器周期中采得的值為0,則在緊跟著的再下一個機器周期S3P1期間,計數(shù)器加1。由于確認一次負跳變要花2個機器周期,即24個振蕩周期,因此外部輸入的計數(shù)脈沖的最高頻率為系統(tǒng)振蕩器頻率1/24。
15第14頁/共60頁
如選用6MHz晶體,允許輸入脈沖頻率最高為250kHz。如選用12MHz頻率晶體,則可輸入最高頻率500kHz外部脈沖。對外輸入信號占空比沒有限制,但為確保某一給定電平在變化前能被采樣1次,則該電平至少保持1個機器周期。故對外部輸入信號要求見圖7-12,圖中Tcy為機器周期。圖7-12對外部計數(shù)輸入信號的要求第15頁/共60頁177.4定時器/計數(shù)器的編程和應用
4種工作方式中,方式0與方式1基本相同,只是計數(shù)位數(shù)不同。方式0為13位,方式1為16位。由于方式0是為兼容MCS-48而設,計數(shù)初值計算復雜,所以在實際應用中,一般不用方式0,常采用方式1。7.4.1P1口控制8只LED每0.5s閃亮一次
【例7-1】在AT89S51的P1口上接有8只LED,原理電路見圖7-13。采用T0方式1的定時中斷方式,使P1口外接的8只LED每0.5s閃亮一次。第16頁/共60頁18圖7-13方式1定時中斷控制LED閃亮第17頁/共60頁(1)設置TMOD寄存器(2)計算定時器T0的計數(shù)初值(3)設置IE寄存器(4)啟動和停止定時器T0
19第18頁/共60頁#include<reg51.h>chari=100;voidmain(){ TMOD=0x01; //定時器T0為方式1 TH0=0xee; //設置定時器初值 TL0=0x00;P1=0x00; //P1口8個LED點亮 EA=1; //開總中斷 ET0=1; //開定時器T0中斷 TR0=1; //啟動定時器T0 while(1); //循環(huán)等待 { ; }}20第19頁/共60頁
voidtimer0()interrupt1 //T0中斷程序{ TH0=0xee; //重新賦初值 TL0=0x00;i--; //循環(huán)次數(shù)減一 if(i<=0) { P1=~P1; //P1口按位取反 i=100; //重置循環(huán)次數(shù) }}第20頁/共60頁7.4.2計數(shù)器的應用【例7-2】如圖7-14,T1的采用計數(shù)模式,方式1中斷,計數(shù)輸入引腳T1(P3.5)上外接按鈕開關(guān),作為計數(shù)信號輸入。按4次按鈕開關(guān)后,P1口的8只LED閃爍不停。(1)設置TMOD寄存器(2)計算定時器T1的計數(shù)初值(3)設置IE寄存器(4)啟動和停止定時器T1。22第21頁/共60頁圖7-14
由外部計數(shù)輸入信號控制LED的閃爍第22頁/共60頁#include<reg51.h>voidDelay(unsignedinti)//定義延時函數(shù)Delay(),i是形式參數(shù),不能賦初值{ unsignedintj; for(;i>0;i--) //變量i由實際參數(shù)傳入一個值 //因此i不能賦初值 for(j=0;j<125;j++) {;} //空函數(shù)}第23頁/共60頁voidmain() //主函數(shù){ TMOD=0x50; //設置定時器T1為方式1計數(shù) TH1=0xff; //向TH1寫入初值的高8位 TL1=0xfc; //向TL1寫入初值的低8位 EA=1; //總中斷允許ET1=1; //定時器T1中斷允許
TR1=1; //啟動定時器T1 while(1); //無窮循環(huán),等待計數(shù)中斷}25第24頁/共60頁26
voidT1_int(void)interrupt3 //T1中斷函數(shù){ for(;;) //無限循環(huán) { P1=0xff; //8位LED全滅 Delay(500); //延時500ms P1=0; //8位LED全亮 Delay(500); //延時500ms } }第25頁/共60頁277.4.3控制P1.0產(chǎn)生周期為2ms的方波
【例7-3】假設系統(tǒng)時鐘為12MHz,設計電路并編寫程序?qū)崿F(xiàn)從P1.0引腳上輸出一個周期為2ms的方波,見圖7-15。
要在P1.0上產(chǎn)生周期為2ms的方波,定時器應產(chǎn)生1ms的定時中斷,定時時間到則在中斷服務程序中對P1.0求反。使用定時器T0,方式1定時中斷,GATE不起作用。
第26頁/共60頁圖7-15
定時器控制P1.0輸出一個周期2ms方波第27頁/共60頁29圖7-16
定時器控制P1.0輸出周期2ms的方波的原理電路第28頁/共60頁30#include<reg51.h> //頭文件reg51.hsbitP1_0=P1^0; //定義特殊功能寄存器P1的位變量P1_0voidmain(void) //主程序{ TMOD=0x01; //設置T0為方式1 TR0=1; //接通T0 while(1) //無限循環(huán) {TH0=0xfc; //置T0高8位初值 TL0=0x18; //置T0低8位初值 do{}while(!TF0); //判TF0是否為1,為1則T0溢出,往下 //執(zhí)行,否則原地循環(huán) P1_0=!P1_0; //P1.0狀態(tài)求反 TF0=0; //TF0標志清零 }}第29頁/共60頁31
仿真時,右鍵單擊虛擬數(shù)字示波器,出現(xiàn)下拉菜單,點擊“Digitaloscilloscope”選項,就會在數(shù)字示波器上顯示P1.0引腳輸出周期為2ms方波,如圖7-17所示。第30頁/共60頁32圖7-17虛擬數(shù)字示波器顯示的2ms的方波波形第31頁/共60頁7.4.4利用T1控制發(fā)出1kHz的音頻信號
【例7-4】利用T1的中斷控制P1.7引腳輸出頻率為1kHz方波音頻信號,驅(qū)動蜂鳴器發(fā)聲。系統(tǒng)時鐘為12MHz。方波音頻信號周期1ms,因此T1的定時中斷時間為0.5ms,進入中斷服務程序后,對P1.7求反。電路見圖7-18。
先計算T1初值,系統(tǒng)時鐘為12MHz,則方波周期為1μs。1kHz音頻信號周期為1ms,要定時計數(shù)的脈沖數(shù)為a。則T1初值:
TH1=(65
536
?a)
/256; TL1=(65
536
?a)
%25633第32頁/共60頁34圖7-18控制蜂鳴器發(fā)出1kHz的音頻信號第33頁/共60頁參考程序如下:#include<reg51.h> //包含頭文件sbitsound=P1^7; //將sound位定義為P1.7腳#definef1(a)(65536-a)/256 //定義裝入定時器高8位時間常數(shù)#definef2(a)(65536-a)%256 //定義裝入定時器低8位時間常數(shù)unsignedinti=500;unsignedintj=0;voidmain(void){ EA=1; //開總中斷.ET1=1; //允許定時器T1中斷. TMOD=0x10; //TMOD=0001000B,使用T1的方式1定時TH1=f1(i); //給定時器T1高8位賦初值. TL1=f2(i); //給定時器T1低8位賦初值. TR1=1; //啟動定時器T1 while(1)第34頁/共60頁36{ //循環(huán)等待 i=460; while(j<2000); j=0; i=360; while(j<2000); j=0;}}voidT1(void)interrupt3using0 //定時器T1中斷函數(shù){ TR1=0; //關(guān)閉定時器T1 sound=~sound; //P1.7輸出求反 TH1=f1(i); //定時器T1的高8位重新賦初值. TL1=f2(i); //定時器T1的低8位重新賦初值.第35頁/共60頁37 j++; TR1=1; //啟動定時器T1}7.4.5LED數(shù)碼管秒表的制作
【例7-5】用2位數(shù)碼管顯示計時時間,最小計時單位為“百毫秒”,計時范圍0.1~9.9s。當?shù)?次按一下計時功能鍵時,秒表開始計時并顯示;第2次按一下計時功能鍵時,停止計時,將計時的時間值送到數(shù)碼管顯示;如果計時到9.9s,將重新開始從0計時;第3次按一下計時功能鍵,秒表清0。再次按一下計時功能鍵,則重復上述計時過程。
本秒表應用定時器模式,計時范圍0.1~9.9s。此外還涉及如何編寫控制LED數(shù)碼管顯示的程序。
本例原理電路見圖7-19。第36頁/共60頁38圖7-19LED數(shù)碼管顯示的秒表原理電路及仿真第37頁/共60頁39參考程序如下:#include<reg51.h> //包含51單片機寄存器定義的頭文件unsignedcharcodediscode1[]={0xbf,0x86,0xdb,0xcf,0xe6,0xed,0xfd,0x87,0xff,0xef}; //數(shù)碼管顯示0~9的段碼表,帶小數(shù)點unsignedcharcodediscode2[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //數(shù)碼管顯示0~9的段碼表,不帶小數(shù)點unsignedchartimer=0; //記錄中斷次數(shù)unsignedcharsecond; //儲存秒unsignedcharkey=0; //記錄按鍵次數(shù)main() //主函數(shù){ TMOD=0x01; //定時器T0方式1定時
ET0=1; //允許定時器T0中斷第38頁/共60頁40EA=1; //總中斷允許second=0; //設初始值P0=discode1[second/10]; //顯示秒位0P2=discode2[second%10]; //顯示0.1s位0while(1) //循環(huán){ if((P3&0x80)==0x00) //當按鍵被按下時 { key++; //按鍵次數(shù)加1 switch(key) //根據(jù)按鍵次數(shù)分三種情況 { case1: //第一次按下為啟動秒表計時 TH0=0xee; //向TH0寫入初值的 //高8位第39頁/共60頁41 TL0=0x00; //向TL0寫入初值的低8位,定時5ms TR0=1; //啟動定時器T0 break; case2: //按下兩次暫定秒表 TR0=0; //關(guān)閉定時器T0 break; case3: //按下3次秒表清0 key=0; //按鍵次數(shù)清 second=0; //秒表清0 P0=discode1[second/10]; //顯示秒位0 P2=discode2[second%10]; //顯示0.1s位0 break;}while((P3&0x80)==0x00); //如果按鍵時間過長在此循環(huán)}第40頁/共60頁 }}voidint_T0()interrupt1using0 //定時器T0中斷函數(shù){ TR0=0; //停止計時,執(zhí)行以下操作(會帶來計時誤差) TH0=0xee; //向TH0寫入初值的高8位 TL0=0x00; //向TL0寫入初值的低8位,定時5ms timer++; //記錄中斷次數(shù) if(timer==20) //中斷20次,共計時20*5ms=100ms=0.1s { timer=0; //中斷次數(shù)清0 second++; //加0.1s P0=discode1[second/10];//根據(jù)計時,即時顯示秒位 P2=discode2[second%10];//根據(jù)計時,即時顯示0.1s位 }42第41頁/共60頁43if(second==99) //當計時到9.9s時{ TR0=0; //停止計時 second=0; //秒數(shù)清0 key=2; //按鍵數(shù)置2,當再次按下按鍵時,
//key++,即key=3,秒表清0復原
}else //計時不到9.9s時{ TR0=1; //啟動定時器繼續(xù)計時}}第42頁/共60頁7.4.6測量脈沖寬度——門控位GATEx的應用
介紹門控位GATE應用。利用GATE測量INT1*腳上正脈沖寬度。
【例7-6】門控位GATE1可使T1啟動計數(shù)受INT1*控制,當GATE1=1,TR1=1時,只有INT1*引腳輸入高電平時,T1才被允許計數(shù)。利用該功能,可測量INT1*腳正脈沖寬度,方法見圖7-20。
原理電路見圖7-21,圖中省略復位電路和時鐘電路。利用門控位GATE1來測量INT1*腳上正脈沖寬度,并在6位數(shù)碼管上以機器周期數(shù)顯示。對被測量脈沖信號寬度,要求能通過旋轉(zhuǎn)信號源旋鈕可調(diào)。44第43頁/共60頁圖7-20利用GATE位測量正脈沖的寬度第44頁/共60頁46圖7-21利用GATE位測量
引腳上正脈沖的寬度的原理電路第45頁/共60頁參考程序如下:#include<reg51.h>#defineuintunsignedint#defineucharunsignedcharsbitP3_3=P3^3; //位變量定義ucharcount_high; //定義計數(shù)變量,用來讀取TH0ucharcount_low; //定義計數(shù)變量,用來讀取TL0uintnum;ucharshiwan,wan,qian,bai,shi,ge;ucharflag;ucharcodetable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};//共陰極數(shù)碼管段碼表voiddelay(uintz) //延時函數(shù)47第46頁/共60頁{ uintx,y; for(x=z;x>0;x--) for(y=110;y>0;y--);}voiddisplay(uinta,uintb,uintc,uintd,uinte,uintf) //數(shù)碼管顯示函數(shù){ P2=0xfe; P0=table[f]; delay(2); P2=0xfd; P0=table[e]; delay(2); P2=0xfb; P0=table[d];48第47頁/共60頁 delay(2); P2=0xf7; P0=table[c]; delay(2); P2=0xef; P0=table[b]; delay(2); P2=0xdf; P0=table[a]; delay(2);}voidread_count() //讀取計數(shù)寄存器的內(nèi)容49第48頁/共60頁50{ do { count_high=TH1; //讀高字節(jié) count_low=TL1; //讀低字節(jié) }while(count_high!=TH1); num=count_high*256+count_low;/*可將兩字節(jié)的機器周期數(shù)進行
顯示處理*/ }voidmain(){ while(1) { flag=0; TMOD=0x90; //設置定時器T1為方式1定時第49頁/共60頁TH1=0; //向定時器T1寫入計數(shù)初值TL1=0;while(P3_3==1); //等待INT1*變低TR1=1; //如果INT1*為低,啟動T1(未真正開始計數(shù))while(P3_3==0); //等待INT1*變高,變高后T1真正開始計數(shù)while(P3_3==1); //等待INT1*變低,變低后T1停止計數(shù)TR1=0;read_count(); //讀計數(shù)寄存器內(nèi)容的函數(shù)shiwan=num/100000;wan=num%100000/10000;qian=num%10000/1000;bai=num%1000/100;shi=num%100/10;51第50頁/共60頁ge=num%10;while(flag!=100) //減小刷新頻率 { flag++; display(ge,shi,bai,qian,wan,shiwan); }}}
執(zhí)行上述程序仿真,把INT1*引腳上出現(xiàn)的正脈沖寬度顯示在LED數(shù)碼管顯示器上。晶振頻率為12MHz,如果默認信號源輸出頻率為1kHz的方波,則數(shù)碼管顯示為500。
注意:在仿真時,偶爾顯示501是因為信號源的問題,若將信號源換成頻率固定的激勵源則不會出現(xiàn)此問題。52第51頁/共60頁537.4.7LCD時鐘的設計
【例7-7】使用定時器實現(xiàn)一個LCD顯示時鐘。采用LCD1602,具體見第5章的紹。LCD時鐘的原理電路見圖7-22。
最小計時單位是秒,如何獲得1s的定時?可將T0定時時間定為50ms,采用中斷方式進行溢出次數(shù)累計,滿20次,則秒計數(shù)變量second加1;若秒計滿60,則分計數(shù)變量minute加1,同時將秒計數(shù)變量second清0;若分鐘計滿60,則小時計數(shù)變量hour加1;若小時計數(shù)變量滿24,則將小時計數(shù)變量hour清0。第52頁/共60頁圖7-22LCD時鐘的原理電路第53頁/共60頁先將定時器以及各計數(shù)變量設定完畢,然后調(diào)用時間顯示子程序。秒計時由T0中斷服務子程序來實現(xiàn)。參考程序如下:#include<reg51.h>#include<lcd1602.h>#defineucharunsignedchar#defineuintunsignedintucharint_time; //定義中斷次數(shù)計數(shù)變量ucharsecond; //秒計數(shù)變量55第54頁/共60頁ucharminute; //分鐘計數(shù)變量ucharhour; //小時
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 本年度辦公室工作總結(jié)及下一年度規(guī)劃報告
- 甘肅省武威市涼州區(qū)武威第八中學2024-2025學年高一下學期開學生物學試題(含答案)
- 古代寓言故事教案狐貍與烏鴉新解
- 雪孩子幼兒教育動畫片觀后感
- 故事性文本的寫作技巧與實踐練習:初中作文指導課程教案
- 互聯(lián)網(wǎng)產(chǎn)品聯(lián)合推廣合作協(xié)議書
- 古詩文朗讀技巧與欣賞
- 小學生綜合素質(zhì)評價標準征文
- 法律學科民法學原理試題及答案庫
- 家用電器選購與使用注意事項指南
- 施工機械檢查驗收表(挖掘機)
- JBT 14856-2023 高溫袋式除塵器 (正式版)
- 戶主變更協(xié)議書
- 2024年阜陽職業(yè)技術(shù)學院單招職業(yè)適應性測試題庫附答案
- 《打草驚蛇》課件
- 圍手術(shù)期管理課件
- 蝦皮shopee新手賣家考試題庫及答案
- 公路隧道豎井施工技術(shù)規(guī)程(征求意見稿)
- 五年級口算1000題(打印版)
- 《孔乙己》教案(4篇)
- 鋁合金壓鑄件PFMEA分析
評論
0/150
提交評論