使用外部中断1进行掉电唤醒操作,代码如下。但是在实际实验操作时,大部分情况是长按按键进入掉电状态,唤醒两次后就无法继续工作,一直保持在休眠状态,必须上电复位才可以。(上电--掉电--唤醒--掉电--唤醒--掉电--再也唤不醒)
但是有时候又可以唤醒到6次左右。
怀疑过是按键的问题,但是已经更换了电容确保灵敏度足够,只能从代码这里入手了。
已善用搜索,相关问题都查阅过,但是初学者还是有些迷茫,斗胆请教,希望各位指点!
//=======================单片机主程序=============================- void main()
- {
- exint1Init() ;
- while(1)
- {
- KeyWorking() ;
- if( KeyWorking() == 1) //一个长按识别关机的标志,由此进入掉电状态
- {
- EA = 1;
- EX1 = 0 ; //关闭INT1中断
- IT1 = 1;
- PCON |= 0x02; //MCU进入掉电模式
- _nop_(); //掉电模式被唤醒后,首先执行此语句,然后再进入中断服务程序
- _nop_();
- _nop_() ;
- _nop_() ;
- _nop_() ;
- _nop_() ;
- }
- }
- }
复制代码
- //-----------------------------------------
- //中断INT1初始化程序
- void exint1Init()
- {
- EA = 1;
- IT1 = 1; //设置INT1的中断类型为仅下降沿,下降沿唤醒
- EX1 = 1; //使能INT1中断
- }
- //-----------------------------------------
- //中断INT1服务程序
- void exint1() interrupt 2 //INT1中断入口
- {
- EX1 = 0;
- P3^2 = !P3^2; //将测试口取反
- INT1 = 0; //保存INT1口的状态, INT1=0(下降沿); INT1=1(上升沿)
- PCON = 0x00 ;
- EX1 = 1 ;
- }
复制代码
|