找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

帖子
查看: 6430|回復(fù): 2
打印 上一主題 下一主題
收起左側(cè)

關(guān)于定時器中斷函數(shù)問題求解

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:125673 發(fā)表于 2016-7-15 23:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
定時器時間溢出進(jìn)入中斷函數(shù),中斷函數(shù)內(nèi)是不是要先關(guān)閉定時器TR0=0,當(dāng)中斷函數(shù)內(nèi)程序運(yùn)行到最后,定時器啟動TR0=1.中斷結(jié)束,定時器開始工作。這樣寫是不是正確�?吹胶枚嗬�,在中斷函數(shù)內(nèi)都不管定時器,如果定時器的時間小于或者大于中斷函數(shù)時間,這樣的定時器進(jìn)入中斷函數(shù)的值會不會有變化。
下面是加定時器關(guān)閉的程序,關(guān)閉定時器與不關(guān)閉定時器有什么影響。求大神指導(dǎo)。
void InterruptTimer0()  interrupt 1               //中斷函數(shù)的特殊寫法,數(shù)字’1’為中斷入口號
{
    static unsigned char j = 0;
    TR0=0;   //加入定時器關(guān)閉程序
    TH0 = 0xFC;    //溢出后進(jìn)入中斷重新賦值
     TL0 = 0x67;
    counter++;    //計數(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;
     }      //動態(tài)刷新
    TR0=1;     //加入定時器打開程序中斷結(jié)束開始計時
}   
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩

相關(guān)帖子

回復(fù)

使用道具 舉報

沙發(fā)
ID:67175 發(fā)表于 2016-7-16 09:56 | 只看該作者
如果未關(guān)中斷而且中斷處理函數(shù)中處理數(shù)據(jù)過多;因為定時器時間已到它就會又進(jìn)入下一個中斷處理函數(shù),也就是這個中斷處理函數(shù)還沒有處理完下一個中斷又來了。這樣會造成結(jié)果錯誤或異常。
回復(fù)

使用道具 舉報

板凳
ID:130180 發(fā)表于 2016-7-16 15:52 | 只看該作者
開定時器中斷表示可以進(jìn)入定時器中斷函數(shù),執(zhí)行完中斷函數(shù)后,你想怎么操作就怎么操作看你的需求了。至于定時時間和函數(shù)執(zhí)行時間,最好的是不要在中斷函數(shù)中執(zhí)行太多的步驟,容易造成錯誤。
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表