打印
[STC单片机]

STC89C52RC为什么进不了掉电模式

[复制链接]
1056|1
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zzz116|  楼主 | 2017-9-14 16:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
为学习单片机掉电模式以及唤醒,编写了一个小程序,开关直接接在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;
          }       
   }               
}

相关帖子

沙发
zzz116|  楼主 | 2017-9-14 21:07 | 只看该作者
按说边沿触发的话,中断引脚一直低电平,最多触发中断一次,但是现在是不断的触发

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

主题

6

帖子

1

粉丝