STC89C52RC为什么不能进入掉电模式
#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;
}
}
}
中断1一直低电平,按道理只是最多触发一次,但是现在不断的触发,不知道为什么
void main() //主函数
{
dscs=0; //定时次数清零
IT1=1; //IT1下降沿触发
EX1=0; //INT1中断关闭
EA=1;
while(1)
{
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;
dscs++;
}
}
主函数改成这样的话,直接就是红-绿-红-绿一直闪烁
进入了掉电,是不是中断一直在唤醒呢?
应该是这样了,但是不应该触发中断的啊,外中断1一直低电平的
