//WKT 自动唤醒定时器
WKCON=B0000_0111;//时钟2048分频
RWK=255-244;//50秒中断一次
set_EWKT;//使能中断
//自动唤醒中断
void WKT_ISR (void) interrupt 17
{
clr_WKTF;//中断清标记位
wkt_f=1;//置中断标记
}
下面进入掉电和退出掉电的程序段。
clr_TR0;//关定时器0
clr_TR2;//关定时器2
//切换成LIRC,并关闭HIRC
clr_EA;
TA=0xaa;
TA=0x55;
CKSWT=B0000_0100;//切换成LIRC
TA=0xaa;
TA=0x55;
CKEN=B0001_0000;//关闭HIRC
set_EA;//恢复中断
//
set_WKTR;//启动WKT定时器
set_PD;//进入掉电模式
if(wkt_f==1)
{//WKT中断唤醒,
clr_WKTR;
wkt_f=0;//清wkt中断标记
wkt_t++;//wkt中断次加1
if(wkt_t>12095) wkt_t=0,POWER=0; //12095个计数为一星期
}
else
{//其它中断唤醒
clr_EA;
TA=0xaa;
TA=0x55;
CKEN=B0011_0000;//启动HIRC
TA=0xaa;
TA=0x55;
CKSWT=B0000_0000;//切换到HIRC
set_EA;
clr_WKTR;//关WKT定时器
set_TR0;//开定时器0
idl_t=8;
}
}
|