欧美极品高清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