|
定時(shí)器時(shí)間溢出進(jìn)入中斷函數(shù),中斷函數(shù)內(nèi)是不是要先關(guān)閉定時(shí)器TR0=0,當(dāng)中斷函數(shù)內(nèi)程序運(yùn)行到最后,定時(shí)器啟動(dòng)TR0=1.中斷結(jié)束,定時(shí)器開始工作。這樣寫是不是正確�?吹胶枚嗬�,在中斷函數(shù)內(nèi)都不管定時(shí)器,如果定時(shí)器的時(shí)間小于或者大于中斷函數(shù)時(shí)間,這樣的定時(shí)器進(jìn)入中斷函數(shù)的值會(huì)不會(huì)有變化。
下面是加定時(shí)器關(guān)閉的程序,關(guān)閉定時(shí)器與不關(guān)閉定時(shí)器有什么影響。求大神指導(dǎo)。
void InterruptTimer0() interrupt 1 //中斷函數(shù)的特殊寫法,數(shù)字’1’為中斷入口號(hào)
{
static unsigned char j = 0;
TR0=0; //加入定時(shí)器關(guān)閉程序
TH0 = 0xFC; //溢出后進(jìn)入中斷重新賦值
TL0 = 0x67;
counter++; //計(jì)數(shù)值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;
} //動(dòng)態(tài)刷新
TR0=1; //加入定時(shí)器打開程序中斷結(jié)束開始計(jì)時(shí)
} |
|