STC89C52RC为什么不能进入掉电模式

2019-07-15 09:40发布

为学习单片机掉电模式以及唤醒,编写了一个小程序,开关直接接在P3.3外中断1引脚,在开关断开时可以进入掉电模式并且唤醒,但是开关一直关闭情况下,却怎么也进入不了,隔一段时间两个灯红-绿-红闪烁。我是新手,检查程序好像没问题啊,麻烦各位大神看下到底怎么回事,谢谢!1ms延时函数ys1ms()没有放上来
#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;
          }        
   }               
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
liujinyi016
1楼-- · 2019-07-15 16:59
进入了掉电,是不是中断一直在唤醒呢?
zqqhyp
2楼-- · 2019-07-15 18:29
应该是这样了,但是不应该触发中断的啊,外中断1一直低电平的

一周热门 更多>