欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: 51單片機關閉中斷再打開中斷下次還會進入中斷嗎(附程序) [打印本頁]

作者: gguo2    時間: 2018-10-13 09:09
標題: 51單片機關閉中斷再打開中斷下次還會進入中斷嗎(附程序)
本帖最后由 gguo2 于 2018-10-13 09:10 編輯

外部下降沿觸發中斷,進入中斷后EA=0關閉中斷,while 語句執行完后再EA=1 打開中斷。
請問下次再出現下降沿的時候還能進入這個中斷程序嗎?我目的是每發生一次下降沿,執行一次這個中斷內部的函數。

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;
        
}


作者: sxhwdz    時間: 2018-10-13 10:59
只要中斷是打開的,每次下降沿都會產生中斷。
作者: chenghaidong    時間: 2018-10-13 11:01
可以的啊,只要退出中斷就能再次進入的啊
作者: cjm82    時間: 2018-10-13 11:07
進入中斷后,關閉中斷,執行中斷程序里的代碼完后,再打開,還是可以進入中斷的.
但是一般不這么寫,更多的是某中斷執行完其代碼后,將自身使能位關閉,然后再其他中斷或者main函數里根據需要條件觸發再打開,如.
void main(void)
{
    .....
    ......
    while(1)
    {
        ....
        .....
        if(xxxx&&ex0==0)
        {
            ex0 = 1;
        }
        ............
        ............
    }
}
void ex0_ISR() interrupt 0
{
    .............
    ...............
   .................
    ex0 = 0;
}
建議中斷程序里盡量不要寫循環,更加不應該寫DELAY,完全可以通過寫IF來判斷,然后設置標志位,main函數再根據標志位來執行對應的功能.如:
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;
}
作者: Y_G_G    時間: 2018-10-13 11:59
不會C語言,但原理是不變的:你可以在中斷程序里先關閉中斷,在中斷返回的時候再打開,下一次一樣的可以觸發中斷,這樣可以避免中斷等級低的中斷被中斷等級高的中斷打斷.
作者: 啊哈0098    時間: 2018-10-13 13:39
會,只要中斷打開了,申請通過,就會進入中斷服務
作者: qscwdfr    時間: 2018-10-13 14:19
會的會的
作者: 83543    時間: 2018-10-13 15:00
注意中斷時間的設定
作者: 青桔檸檬    時間: 2018-10-14 20:52
可以的
作者: yzwzfyz    時間: 2018-10-14 21:17
取決于中斷源有沒有消失!




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1