下面是我的程序,想用按鍵控制定時器和LED的亮滅——按一次LED亮,再按一次LED滅,燈亮的同時開始定時5s,5s到后進入中斷熄滅LED。但是現在程序只可以進入一次中斷,后面就進入不了了
# include <STC8.h>
sbit KEY = P3^5;
sbit LED = P3^4;
unsigned int num=0,second=0,minute=0,hour=0;
bit LED_flag=0;
void Delay10ms()//@24.000MHz
{
unsigned char data i, j, k;
i = 2;
j = 56;
k = 172;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Init_IO()//
{
P0M1 = 0x00; P0M0 = 0x00;
P1M1 = 0x00; P1M0 = 0x00;
P2M1 = 0x00; P2M0 = 0x00;
P3M1 = 0x00; P3M0 = 0x00;
P4M1 = 0x00; P4M0 = 0x00;
P5M1 = 0x00; P5M0 = 0x00;
P6M1 = 0x00; P6M0 = 0x00;
P7M1 = 0x00; P7M0 = 0x00;
}
void Timer0_Init(void)//20ms@24.000MHz
{
AUXR &= 0x7F;//12T
TMOD &= 0xF0;
TL0 = 0xC0;
TH0 = 0x63;
EA=1;
TF0 = 0;
TR0 = 0;
ET0 = 1;
}
void KeyScan()
{
if(KEY == 0)
{
Delay10ms();
if(KEY == 0)
{
Delay10ms();
LED =~LED;
}
while(!KEY);
}
}
void Timer0_Isr(void) interrupt 1
{
TL0 = 0xC0;
TH0 = 0x63;
num++;
if(num == 50)//1s
{
num=0;
second++;
if(second==5) //5s
{
LED = 0;
TR0 = 0;
}
}
}
void main()
{
LED = 0;
Init_IO();
Timer0_Init();
while(1)
{
KeyScan();
if(LED==1)
{
TR0 = 1;
}
else
{
TR0 = 0;
}
}
}
|