51定时中断
一个关于定时器中断的问题:
下面是关于定时中断的代码,请高手指点迷津:
uint ondisp_time;
uint offdisp_time; // 声明全局变量
void timer0(void) interrupt 1
{
if(ondisp_time) ondisp_time--;
if(offdisp_time) offdisp_time--;
flag = 1;
}
void main()
{
ondisp_time = 30;
offdisp_time = 40;
TMOD=0X01; // 定时器0方式1
EA = 1; // 允许所有中断
ET0 = 1; // 开定时器0中断
TR0 = 1; // Timer0开始计数
Seq:while(1)
{
if(bCurrDisp_state)
{
bCurrDisp_state = 0;
ET0 = 1;
TR0 = 1;
if(flag == 1)
//if(ondisp_time == 0)
{
lcd_partclear();
offdisp_time = 6000;
flag = 0;
}
}
else
{
bCurrDisp_state = 1;
ET0 = 1;
TR0 = 1;
if(flag == 1)
//if(offdisp_time == 0)
{
flag = 0;
lcd_disp16_16hanzi(4,16,kai);
lcd_disp16_16hanzi(4,32,shi);
disp_num++;
if(disp_num == 15)
break;
else
ondisp_time = 6000;
goto Seq;
}
}
if(P1_2)
break;
}
}
代码中用ondisp_time和offdisp_time两个变量做定时器,通过调试上面的代码也可以进入中断,但是我不明白
在中断里ondisp_time、offdisp_time怎么没有做减法运算啊,如果做了减法运算,在主程序中我判断这两个变量是否为0时,
是应该显示“开始”两字的,但是现在不显示;判断'flag',可以显示“开始”两字
不知问题处在哪,请高手指教!