| 
 
| 为学习单片机掉电模式以及唤醒,编写了一个小程序,开关直接接在P3.3外中断1引脚,在开关断开时可以进入掉电模式并且唤醒,但是开关一直关闭情况下,缺怎么也进入不了,隔一段时间两个灯红-绿-红闪烁。麻烦各位大神看下到底怎么回事,谢谢! #include "STC89C52.H"
 #include "intrins.h"
 #define u8 unsigned char
 #define u16 unsigned int
 sbit R=P1^0;                    //红灯
 sbit K=P3^3;                                        //开关
 sbit G=P0^3;                                        //绿灯
 u16 dscs;
 
 void HX() interrupt 2                    //外中断1唤醒单片机
 {
 PCON=0x00;
 G=0;                                                        //进入中断后绿灯亮一下
 ys1ms(200);
 G=1;
 }
 
 void main()                                                //主函数
 {
 dscs=0;                                                //定时次数清零
 IT1=1;                      //IT1下降沿触发
 EX1=0;                                                 //INT1中断关闭
 EA=1;
 while(1)
 {
 dscs++;
 if(K==0)                                //开关闭合
 {
 ys1ms(20);
 if (K==0)
 {
 if (K==1)                    //开关断开,进入掉电状态
 {
 ys1ms(20);
 if(K==1)
 {
 EX1=1;     //开启INT1中断
 EA=1;
 _nop_();
 _nop_();
 PCON=0x02;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 dscs=0;
 EX1=0;
 }
 }
 if (K==0 && dscs>=300 )        //开关闭合,一段时间后进入掉电状态
 {
 EX1 = 1;          //开启INT1中断
 R=0;
 ys1ms(200);
 R=1;                           //红灯亮一下
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 PCON=0x02;                   //进入掉电状态
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 dscs=0;
 EX1=0;
 R=0;                           //红灯亮一下
 ys1ms(200);
 R=1;
 }
 }
 }
 if (K==1 || dscs>=600 )        //开关闭合或者等待一段时间后进入掉电状态
 {
 EX1 = 1;          //开启INT1中断
 R=0;                           //红灯亮一下
 ys1ms(200);
 R=1;
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 PCON=0x02;                   //进入掉电状态
 _nop_();
 _nop_();
 _nop_();
 _nop_();
 dscs=0;                    //dscs清零
 EX1=0;
 R=0;                           //红灯亮一下
 ys1ms(200);
 R=1;
 }
 }
 }
 | 
 |