问题是程序进入掉电模式后,外部上电后,本来灯要闪的,现在不闪,要按下开关才会闪,是不是外部上电时外部中断没起作用?请大家多多指教
#include"STC15.H"
#include "intrins.h"
sbit LED1 = P3^0; //主LED
sbit LED2 = P3^1; //副LED
sbit SDKZ = P3^4; //充电指示控制
sbit key = P3^5; //轻触开关
sbit CDZS = P3^3; //充电指示变化取样
sbit vin = P3^2; //充电取样
void MCU_down(void)
{
PCON=0X02; //进入掉电模式
_nop_();
_nop_();
_nop_();
}
void Timer0Init(void) //10毫秒@11.0592MHz
{
AUXR &= 0x7F; //定时器时钟12T模式
TMOD &= 0xF0; //设置定时器模式
TL0 = 0x00; //设置定时初值
TH0 = 0xDC; //设置定时初值
TF0 = 0; //清除TF0标志
}
void Delay10ms() //@11.0592MHz
{
unsigned char i, j;
i = 108;
j = 145;
do
{
while (--j);
} while (--i);
}
void LED1_SD(void) //闪灯1Hz
{
unsigned char a;
TR0=1;
if(TF0==1)
{
TF0=0;
a++;
if(a==50)
{
a=0;
LED1=~LED1;
}
}
}
void CDZSD(void) //充电指示控制
{
unsigned char a;
if(vin==1) //上电
{
LED1=0;
LED2=0;
if(CDZS==0) //充电
{
TR0=1;
if(TF0==1)
{
TF0=0;
a++;
if(a==50)
{
a=0;
SDKZ=~SDKZ;
}
}
}
if(CDZS==1) //充好电
{
TR0=0;
SDKZ=1;
}
}
if(vin==0)
{
SDKZ=0;
INT_CLKO |= 0x20; //开外中断3
}
}
void keydown(void) //按钮开关控制
{
unsigned char ID;
if(vin==0)
{
if(key==0)
{
Delay10ms();
if(key==0)
{
ID++;
if(ID==4)
{
ID=0;
}
while(key==0);
}
}
switch(ID)
{
case 0:
LED1=0;
LED2=0;
TR0=0;
INT_CLKO |= 0x20; //开外中断3
EX0=1;
MCU_down();
break;
case 1:
LED1=1;
break;
case 2:
LED2=1;
LED1=0;
break;
case 3:
LED2=0;
LED1_SD();
}
}
}
void main(void) //主函数
{
LED1=0;
LED2=0;
SDKZ=0;
P3M1 = 0x0C; //设置P32,P33为高阻,其它为推挽输口
P3M0 = 0x13;
Timer0Init();
IT0 = 0; //设置INT0的中断类型:1为下降沿,0为上升和下降
EA = 1;
WDT_CONTR=0x37; //设置看门狗分频,并启动
while(1)
{
keydown();
CDZSD();
WDT_CONTR |=0x10; //清零看门狗
}
}
//外部中断服务程序
void exint3() interrupt 11 //INT3中断入口
{
INT_CLKO = 0x00; //关外中断3
}
void exint0() interrupt 0 //INT0中断入
{
EX0=0;
}
|