*Thisfileisanexampletousetimer2inmode0此程序用于守时器2形式0。以下程序200811.07调试成功。/*/
#include
#defineMSB_reload_value0x36/*msbreloadvalueexemple高位重载值:延时60ms*/
#defineLSB_reload_value0x36/*lsbreloadvalueexemple低位重载值*/
//sfrT2MOD=0xC9;/*守时器2操控寄存器地址。可位寻址,复位值=XXXXXX00B应该加在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不用于波特率发生器*/
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复位中止标志位*/
}