除了掉电唤醒定时器没有中断外,其它唤醒源关闭中断后就没有唤醒功能了。
在每个中断里加个标志,唤醒后查询标志看看是哪个中断唤醒的,判断是不是这个中断漏关了。
像这样
- /********************* INT0中断函数 *************************/
- void INT0_int (void) interrupt 0 //进中断时已经清除标志
- {
- Source = 0;
- }
-
- /********************* INT1中断函数 *************************/
- void INT1_int (void) interrupt 2 //进中断时已经清除标志
- {
- Source = 1;
- }
-
- /********************* INT2中断函数 *************************/
- void INT2_int (void) interrupt 10 //进中断时已经清除标志
- {
- Source = 2;
- }
-
- /********************* INT3中断函数 *************************/
- void INT3_int (void) interrupt 11 //进中断时已经清除标志
- {
- Source = 3;
- }
-
- /********************* INT4中断函数 *************************/
- void INT4_int (void) interrupt 16 //进中断时已经清除标志
- {
- Source = 4;
- }
-
- PCON |= 0x02; //Sleep
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
-
- switch(Source)
- {
- case 0:
- printf("INT0 Wakeup!\r\n");
- break;
- case 1:
- printf("INT1 Wakeup!\r\n");
- break;
- case 2:
- printf("INT2 Wakeup!\r\n");
- break;
- case 3:
- printf("INT3 Wakeup!\r\n");
- break;
- case 4:
- printf("INT4 Wakeup!\r\n");
- break;
- default:
- printf("Other Wakeup!\r\n");
- break;
- }
复制代码
|