IDL写0本身不会导致死机,排查一下是不是其它因素导致的。
附件例子可以验证,通过串口打印信息或者指示灯判断MCU工作状态。
- if(++SleepDelay >= 3) //3秒后睡眠
- {
- SleepDelay = 0;
- P2 = 0xff; //休眠状态,指示灯关闭
-
- if(INT0 && INT1) //两个中断都是高电平时才进入睡眠,下降沿唤醒。
- {
- SleepDelay = 0;
-
- printf("MCU sleep.\r\n");
- INT0_Flag = 0;
- INT1_Flag = 0;
- INT2_Flag = 0;
- INT3_Flag = 0;
- INT4_Flag = 0;
-
- PCON |= 0x02; //Sleep
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
- _nop_();
-
- IDL = 0; //test
-
- if(INT0_Flag)
- {
- printf("INT0 wakeup.\r\n");
- }
- if(INT1_Flag)
- {
- printf("INT1 wakeup.\r\n");
- }
- if(INT2_Flag)
- {
- printf("INT2 wakeup.\r\n");
- }
- if(INT3_Flag)
- {
- printf("INT3 wakeup.\r\n");
- }
- if(INT4_Flag)
- {
- printf("INT4 wakeup.\r\n");
- }
- }
- }
复制代码
|