找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 7678|回復: 9
打印 上一主題 下一主題
收起左側

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

[復制鏈接]
跳轉到指定樓層
樓主
ID:381535 發(fā)表于 2018-10-13 09:09 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 gguo2 于 2018-10-13 09:10 編輯

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

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

來自 4#
ID:388197 發(fā)表于 2018-10-13 11:07 | 只看該作者
進入中斷后,關閉中斷,執(zhí)行中斷程序里的代碼完后,再打開,還是可以進入中斷的.
但是一般不這么寫,更多的是某中斷執(zhí)行完其代碼后,將自身使能位關閉,然后再其他中斷或者main函數(shù)里根據(jù)需要條件觸發(fā)再打開,如.
void main(void)
{
    .....
    ......
    while(1)
    {
        ....
        .....
        if(xxxx&&ex0==0)
        {
            ex0 = 1;
        }
        ............
        ............
    }
}
void ex0_ISR() interrupt 0
{
    .............
    ...............
   .................
    ex0 = 0;
}
建議中斷程序里盡量不要寫循環(huán),更加不應該寫DELAY,完全可以通過寫IF來判斷,然后設置標志位,main函數(shù)再根據(jù)標志位來執(zhí)行對應的功能.如:
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 回帖助人的獎勵!

查看全部評分

回復

使用道具 舉報

來自 5#
ID:401564 發(fā)表于 2018-10-13 11:59 | 只看該作者
不會C語言,但原理是不變的:你可以在中斷程序里先關閉中斷,在中斷返回的時候再打開,下一次一樣的可以觸發(fā)中斷,這樣可以避免中斷等級低的中斷被中斷等級高的中斷打斷.

評分

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

查看全部評分

回復

使用道具 舉報

沙發(fā)
ID:387733 發(fā)表于 2018-10-13 10:59 | 只看該作者
只要中斷是打開的,每次下降沿都會產(chǎn)生中斷。

評分

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

查看全部評分

回復

使用道具 舉報

板凳
ID:408855 發(fā)表于 2018-10-13 11:01 | 只看該作者
可以的啊,只要退出中斷就能再次進入的啊

評分

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

查看全部評分

回復

使用道具 舉報

6#
ID:408991 發(fā)表于 2018-10-13 13:39 | 只看該作者
會,只要中斷打開了,申請通過,就會進入中斷服務

評分

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

查看全部評分

回復

使用道具 舉報

7#
ID:409017 發(fā)表于 2018-10-13 14:19 | 只看該作者
會的會的
回復

使用道具 舉報

8#
ID:409045 發(fā)表于 2018-10-13 15:00 | 只看該作者
注意中斷時間的設定

評分

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

查看全部評分

回復

使用道具 舉報

9#
ID:409613 發(fā)表于 2018-10-14 20:52 | 只看該作者
可以的
回復

使用道具 舉報

10#
ID:123289 發(fā)表于 2018-10-14 21:17 | 只看該作者
取決于中斷源有沒有消失!

評分

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

查看全部評分

回復

使用道具 舉報

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

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

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

快速回復 返回頂部 返回列表