T0定时器实现的功能
/**************************************定时器中断初始化
***************************************/
void Timer_Init(void)
{
TMOD = 0x01; // 采用T0方式
TH0 = (65536-45872)/256;
TL0 = (65536-45872)%256; // 定时的时间
ET0 = 1; //定时器T0中断允许位
TR0 = 1; //启动定时器
EA = 1; //CPU中断允许(总允许)位
}
/****************************************
定时器0溢出中断
****************************************/
void Timer0(void) interrupt 1 using 1
{
TH0 = (65536-45872)/256;
TL0 = (65536-45872)%256;
num++;
if(num == 20)
{
TR0 = 0; //初始化定时器
if(key0 == 1)
{
#ifdef _DEVICEFLAG_
Delay_ms(20);
if(key0 == 0) //按键2
{
ControlFlag = 2;
}
else if(key0 == 1)
{
ControlFlag = 1;
}
#else
if(key0 == 1)
{
ControlFlag = 1;
}
#endif
}
num = 0;
TR0 = 1; //启动定时器
}
}
单片机为at89c51,这个中断要实现短按(小于2s),长按(大于3s),为什么这个只能执行长按啊,还有num=20不是循环?这个对短按,长按有影响?求教