定时器时间溢出进入中断函数,中断函数内是不是要先关闭定时器TR0=0,当中断函数内程序运行到最后,定时器启动TR0=1.中断结束,定时器开始工作。这样写是不是正确。看到好多例子,在中断函数内都不管定时器,如果定时器的时间小于或者大于中断函数时间,这样的定时器进入中断函数的值会不会有变化。
下面是加定时器关闭的程序,关闭定时器与不关闭定时器有什么影响。求大神指导。
void InterruptTimer0() interrupt 1 //中断函数的特殊写法,数字’1’为中断入口号
{
static unsigned char j = 0;
TR0=0; //加入定时器关闭程序
TH0 = 0xFC; //溢出后进入中断重新赋值
TL0 = 0x67;
counter++; //计数值counter加1
P0 = 0xFF; //消隐
switch(j)
{
case 0: ADDR0=0; ADDR1=0; ADDR2=0; j++; P0=LedChar[LedNumber[0]]; break;
case 1: ADDR0=1; ADDR1=0; ADDR2=0; j++; P0=LedChar[LedNumber[1]]; break;
case 2: ADDR0=0; ADDR1=1; ADDR2=0; j++; P0=LedChar[LedNumber[2]]; break;
case 3: ADDR0=1; ADDR1=1; ADDR2=0; j++; P0=LedChar[LedNumber[3]]; break;
case 4: ADDR0=0; ADDR1=0; ADDR2=1; j++; P0=LedChar[LedNumber[4]]; break;
case 5: ADDR0=1; ADDR1=0; ADDR2=1; j=0; P0=LedChar[LedNumber[5]]; break;
default: break;
} //动态刷新
TR0=1; //加入定时器打开程序中断结束开始计时
} |