作者Aquatics (小哈)
看板ASM
標題Re: [問題] 8051的外部中斷 除彈跳問題
時間Sun May 16 11:46:14 2010
※ 引述《Jhih8051 ()》之銘言:
: void EX0(void) interrupt 0 using 1
: {
unsigned int Delay;
EX0 = 0;
Delay = 5000;
while(Delay--)
{
if(SW == 0)
{
Delay = 5000;
}
}
: cnt++;
IE0 = 0;
EX0 = 1;
: }
: 另外想請問,
: 中斷旗標IE0是在進入中斷就被清除 or 執行完中斷副程式才清除?
進中斷時IE0就會清掉(by hardware)
但若有殘餘彈跳,則IE0 又會被set
所以我的作法是,在離開中斷程式前,手動清除IE0
反彈跳的Delay設定數值,跟你的頻率與彈跳特性有關
: 又,在中斷副程式執行過程中,
: 如果又發生中斷,是否IE0也會被影響?
yes。所以中斷程式要寫得越短越好
: 看似是一個簡單不過的問題,
: 但真的卡很久在這裡了,
: 要麻煩各位高手幫忙 > <"
--
※ 編輯: Aquatics 來自: 219.85.2.249 (05/16 11:47)
※ 編輯: Aquatics 來自: 219.85.2.249 (05/16 11:47)
推 Jhih8051:頻率是指震盪器頻率嗎@@? 05/16 13:33
→ Aquatics:yes 05/16 20:26
→ ksmrt0123:基本上在isr中用loop delay是不好的習慣 05/16 21:02
推 WolfLord:真的非用INT當輸入的話,可以INT ISR一進入就把中斷除能 05/17 14:54
→ WolfLord:然後ISR內啟動計時器50MS後在致能中斷。這樣就不會彈跳了 05/17 14:55
→ ruemann:加個電容就好了 05/17 22:17
推 WolfLord:一顆電容要一塊錢,人家閒貴唒 f^^;; 05/18 01:54
推 kdjf:電容要用多大的? 我看書下很多用1uf 這樣就夠了嗎? 05/30 11:24
→ kdjf: 上 05/30 11:24