功能可以设定延时几个小时内才能按键输入,在这几个小时里肯定不能使用掉电模式是吧。为了省电,这段时间内我就先进入空闲模式,只留定时器和唤醒用的外中断工作,延时时间到了后就进入掉电模式,可是我再按唤醒键却不能唤醒,我是在定时器中断函数里进入掉电模式的,如下程序:
void int0() interrupt 0 //这里我只是关闭中断,因为进入空闲模式函数里我又开启中断的,是不是我这里再多做点什么才好?比如跳转到主循 //环那里去,可是程序该怎么写呢,有知道的大侠请指导一下!谢谢!
{
EA=0;
EX0=0;
EA=1;
}
/×××××××××××××××××××××××××××××××××××××××××××××××××××/
void tm2_isr() interrupt 12 using 1
{
EA = 0;
y++;
if(y==yanshi) //这里是设定的延时时间到了,然后进入执行里面的功能
{
y=0;yanshi=0;AUXR&=0xef;
PCON|=0x02; _nop_(); //这里进入掉电模式,据说唤醒后首先执行的是下面那个空指令
_nop_();
_nop_();
_nop_();
}
EA = 1;
}
我测试能从空闲模式进入掉电模式,但是按下唤醒键后系统继续睡眠,一睡不醒了,咋办?开始在主循环里设置进入掉电模式是可以唤醒的,为什么在定时器函数里就不行?下面是主循环进入空闲模式,原来是PCON|=0x02;就是02是掉电模式,现在这里改为01空闲模式,因为定时器还需要工作几个小时。