使用外部中斷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 ;
- }
復制代碼
|