您的位置:首頁 > 熱點 >

52定時器2的使用

*Thisfileisanexampletousetimer2inmode0此程序用于定時器2模式0。以下程序200811.07調試成功。/*/#include52.h>/*當前文件夾內的文件*/#defineMSB_reload_value0x36/*msbreloadvalueexemple高位重載值:延時60ms*/#defineLSB_reload_value0x36/*lsbreloadvalueexemple低位重載值*///sfrT2MOD=0xC9;/*定時器2控制寄存器地址??晌粚ぶ罚瑥臀恢担絏XXXXX00B應該加在reg52.h文件中。*/sbitP1_2=P1^2;/**FUNCTION_PURPOSE:Thisfilesetuptimer2inmode0(16bitsauto-reloadup/downcountingtimer).*用于模式0:16位自動重載向上/下計時*The16-bitsregisterconsistofall8bitsofTH2andall8bitsofTL2.*16位寄存器由8位的TH2和8位的TL2組成*TheEXF2bittoggleswhentimer2overfloworunderflowoccurs.*當timer2向上/下溢出時,置位EXF2位*EXF2doesnotgenerateinterrupt.Thisbitcanbeusedtoprovide17-bitresolution*FUNCTION_INPUTS:P1.1(T2EX)=0fordowncountingor1forupcounting.*EXF2位并不引起中斷。此位可以用來提供17位輸入功能:向上/下計數功能*FUNCTION_OUTPUTS:void*/voidsystem_init(){EA=0;/*關中斷,設置定時器2*/T2MOD&=0xFC;/*T2OE=0;定時器2輸出不允許*/T2MOD|=0x01;/*DCEN=1;可以設置為向上/下計數:此程序中為向上達到0xff時溢出*/EXF2=0;/*resetflag定時器2外部標志位清除*/TCLK=0;RCLK=0;/*disablebaudrategenerator不用于波特率發(fā)生器*/EXEN2=0;/*ignoreeventsonT2EX視T2EX(P1.1)端信號無效*/TH2=MSB_reload_value;/*Initmsb_value填入初始化值*/TL2=LSB_reload_value;/*Initlsb_value*/RCAP2H=MSB_reload_value;/*reloadmsb_value重載值*/RCAP2L=LSB_reload_value;/*reloadlsb_value*/C_T2=0;/*timermode定時模式*/CP_RL2=0;/*reloadmode重載模式*/ET2=1;/*enabletimer2interrupt允許T2中斷*/TR2=1;/*timer2run開始計時*/EA=1;/*interuptenable中斷允許*/}voidmain(void){system_init();while(1)/*endless*/{}}/***FUNCTION_PURPOSE:timer2interrupt*FUNCTION_INPUTS:void*FUNCTION_OUTPUTS:P1.2toggleperiod=2*(65536-reload_value)cycles*/voidit_timer2(void)interrupt5/*interruptaddressis0x002b定時器2中斷向量入口*/{P1_2=~P1_2;/*P1.2togglewheninterrupt.中斷時取反*/TF2=0;/*resetinterruptflag復位中斷標志位*/}

標簽: 52定時器

相關閱讀