標(biāo)題:
關(guān)于定時(shí)器中斷函數(shù)問(wèn)題求解
[打印本頁(yè)]
作者:
無(wú)尾熊
時(shí)間:
2016-7-15 23:51
標(biāo)題:
關(guān)于定時(shí)器中斷函數(shù)問(wèn)題求解
定時(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í)器開(kāi)始工作。這樣寫(xiě)是不是正確?吹胶枚嗬樱谥袛嗪瘮(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ù)的特殊寫(xiě)法,數(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í)器打開(kāi)程序中斷結(jié)束開(kāi)始計(jì)時(shí)
}
作者:
李志博32
時(shí)間:
2016-7-16 09:56
如果未關(guān)中斷而且中斷處理函數(shù)中處理數(shù)據(jù)過(guò)多;因?yàn)槎〞r(shí)器時(shí)間已到它就會(huì)又進(jìn)入下一個(gè)中斷處理函數(shù),也就是這個(gè)中斷處理函數(shù)還沒(méi)有處理完下一個(gè)中斷又來(lái)了。這樣會(huì)造成結(jié)果錯(cuò)誤或異常。
作者:
3154
時(shí)間:
2016-7-16 15:52
開(kāi)定時(shí)器中斷表示可以進(jìn)入定時(shí)器中斷函數(shù),執(zhí)行完中斷函數(shù)后,你想怎么操作就怎么操作看你的需求了。至于定時(shí)時(shí)間和函數(shù)執(zhí)行時(shí)間,最好的是不要在中斷函數(shù)中執(zhí)行太多的步驟,容易造成錯(cuò)誤。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1