• 回复
  • 收藏
  • 点赞
  • 分享
  • 发新帖

求助单片机省电模式问题

功能可以设定延时几个小时内才能按键输入,在这几个小时里肯定不能使用掉电模式是吧。为了省电,这段时间内我就先进入空闲模式,只留定时器和唤醒用的外中断工作,延时时间到了后就进入掉电模式,可是我再按唤醒键却不能唤醒,我是在定时器中断函数里进入掉电模式的,如下程序:

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空闲模式,因为定时器还需要工作几个小时。

全部回复(5)
正序查看
倒序查看
fzhlpp
LV.7
2
2014-06-12 20:47
问题找到了,在定时器里进入掉电模式前我忘记开启外中断。在定时器里在这句PCON|=0x02; _nop_();前面加入EX0=1;就可以了。
0
回复
fzhlpp
LV.7
3
2014-06-12 20:49
@fzhlpp
问题找到了,在定时器里进入掉电模式前我忘记开启外中断。在定时器里在这句PCON|=0x02; _nop_();前面加入EX0=1;就可以了。
真是的,没人回复啊,自己解决的怎么结贴啊!!!
0
回复
2014-06-15 10:58
0
回复
2014-06-26 12:53
@fzhlpp
真是的,没人回复啊,自己解决的怎么结贴啊!!!
一般需自己找原因了,代码没人原意一行一行帮你去分析
0
回复
fzhlpp
LV.7
6
2014-06-30 21:53
@贺赫无名
一般需自己找原因了,代码没人原意一行一行帮你去分析

是的是的,一行一行的看人家的代码是个问题,特别是比较复杂的程序逻辑深度大的排版不工整的。

可是有时实在是一时自己解决不了,好希望有网友能指点啊,这个心情我想初学的大部分人都是这样的吧。

0
回复