找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7790|回復(fù): 9
收起左側(cè)

51單片機關(guān)閉中斷再打開中斷下次還會進入中斷嗎(附程序)

[復(fù)制鏈接]
ID:381535 發(fā)表于 2018-10-13 09:09 | 顯示全部樓層 |閱讀模式
本帖最后由 gguo2 于 2018-10-13 09:10 編輯

外部下降沿觸發(fā)中斷,進入中斷后EA=0關(guān)閉中斷,while 語句執(zhí)行完后再EA=1 打開中斷。
請問下次再出現(xiàn)下降沿的時候還能進入這個中斷程序嗎?我目的是每發(fā)生一次下降沿,執(zhí)行一次這個中斷內(nèi)部的函數(shù)。

void main()
{
        
  TMOD=0x01; // Timer mode 1
        TR0=1;     // Timer 0 enable
        TR1=1;     // Timer 1 enable
        
        
        IT0=1;  // Falling edge trigger
        EX0=1;  // External interrupt 0 enable
        EA=1;   // Master switch enable
        
        while (1)        ;
                        
}        

void EXINT0() interrupt 0         //0 stands for external interrupt 0
{
        EA=0;
       TH1=0xB1;
       TL1=0xEC;
        cnt=0;
        
      while (cnt<=100)
        {
         P1=0xE3;
         Delay10ms();
               
         P1=0xF3;
         Delay10ms();               

                if (TF1 == 1)
                {
                  TF1=0;
                  TH1=0xB1;
                        TL1=0xE0;
                        cnt++;
                }
        }
        EA=1;
        
}

回復(fù)

使用道具 舉報

ID:388197 發(fā)表于 2018-10-13 11:07 | 顯示全部樓層
進入中斷后,關(guān)閉中斷,執(zhí)行中斷程序里的代碼完后,再打開,還是可以進入中斷的.
但是一般不這么寫,更多的是某中斷執(zhí)行完其代碼后,將自身使能位關(guān)閉,然后再其他中斷或者main函數(shù)里根據(jù)需要條件觸發(fā)再打開,如.
void main(void)
{
    .....
    ......
    while(1)
    {
        ....
        .....
        if(xxxx&&ex0==0)
        {
            ex0 = 1;
        }
        ............
        ............
    }
}
void ex0_ISR() interrupt 0
{
    .............
    ...............
   .................
    ex0 = 0;
}
建議中斷程序里盡量不要寫循環(huán),更加不應(yīng)該寫DELAY,完全可以通過寫IF來判斷,然后設(shè)置標(biāo)志位,main函數(shù)再根據(jù)標(biāo)志位來執(zhí)行對應(yīng)的功能.如:
bit flag_1;
void main(void)
{
    while(1)
    {
        if(flag_1==1)
        {
             while(xxx)
             {
                  .............
                  ...........
             }
             delay(xxxx);
             flag_1 = 0;
             ex0 = 1;
        }
    }
}

void ex0_ISR() interrupt 0
{
    ex0 = 0;
    flag_1 = 1;
}

評分

參與人數(shù) 1黑幣 +50 收起 理由
admin + 50 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:401564 發(fā)表于 2018-10-13 11:59 | 顯示全部樓層
不會C語言,但原理是不變的:你可以在中斷程序里先關(guān)閉中斷,在中斷返回的時候再打開,下一次一樣的可以觸發(fā)中斷,這樣可以避免中斷等級低的中斷被中斷等級高的中斷打斷.

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:387733 發(fā)表于 2018-10-13 10:59 | 顯示全部樓層
只要中斷是打開的,每次下降沿都會產(chǎn)生中斷。

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:408855 發(fā)表于 2018-10-13 11:01 | 顯示全部樓層
可以的啊,只要退出中斷就能再次進入的啊

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:408991 發(fā)表于 2018-10-13 13:39 | 顯示全部樓層
會,只要中斷打開了,申請通過,就會進入中斷服務(wù)

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:409017 發(fā)表于 2018-10-13 14:19 | 顯示全部樓層
會的會的
回復(fù)

使用道具 舉報

ID:409045 發(fā)表于 2018-10-13 15:00 | 顯示全部樓層
注意中斷時間的設(shè)定

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

ID:409613 發(fā)表于 2018-10-14 20:52 | 顯示全部樓層
可以的
回復(fù)

使用道具 舉報

ID:123289 發(fā)表于 2018-10-14 21:17 | 顯示全部樓層
取決于中斷源有沒有消失!

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

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

本版積分規(guī)則

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

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

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