[問題] 8051的外部中斷 除彈跳問題

看板ASM (組合語言)作者時間15年前 (2010/05/15 20:33), 編輯推噓4(4016)
留言20則, 5人參與, 最新討論串1/3 (看更多)
各位高手好, 小弟最近在使用按鈕觸發8051外部中斷的時候, 碰到了彈跳問題, 以往都使用輪詢的方式, 例如: sbit SW = P1^0; if(SW == 0) { delay(); //避開按下去的彈跳現象 要作的動作; while(SW == 0); //等待放開按鈕 delay(); //避開放開的彈跳現象 } 小弟之前使用此種方式, 在輪詢的情況下都可以除的還不錯, 現在為了改進效能,而使用外部中斷的方式, 但是將同樣的方式用在外部中斷的情況卻失敗了, 下面是我想做的一個測試, 就只是很簡單的按一次,計數變數就+1,如此來確認是否除彈跳, 不知道應該如何改進彈跳現象, 程式如下: unsigned int cnt=0; void main(void) { EA = 1; ET0 = 1; EX0 = 1; while(1) { P2 = cnt; } } void EX0(void) interrupt 0 using 1 { cnt++; } 另外想請問, 中斷旗標IE0是在進入中斷就被清除 or 執行完中斷副程式才清除? 又,在中斷副程式執行過程中, 如果又發生中斷,是否IE0也會被影響? 看似是一個簡單不過的問題, 但真的卡很久在這裡了, 要麻煩各位高手幫忙 > <" -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.45.141.204 ※ 編輯: Jhih8051 來自: 114.45.141.204 (05/15 20:34)

05/16 01:32, , 1F
開關彈跳時間,一般來說是22ms(如果我沒記錯的話-.-)
05/16 01:32, 1F

05/16 01:33, , 2F
一般來說,中斷程式內是很少再觸發同樣的中斷發生(避免BUG)
05/16 01:33, 2F

05/16 01:34, , 3F
所以如果說要在中斷內在中斷,程式的架構要很完善
05/16 01:34, 3F

05/16 01:35, , 4F
至於旗標,一般來說是在要從中斷副程式返回時,才會清除重設
05/16 01:35, 4F

05/16 01:37, , 5F
不過有時在例外情況中,也會有人為重設...
05/16 01:37, 5F

05/16 13:21, , 6F
我在測試的時候,在cnt++後面丟一個很長的delay
05/16 13:21, 6F

05/16 13:23, , 7F
就發現P2會在按了+1之後..一段時間又自己多+1
05/16 13:23, 7F

05/16 13:23, , 8F
而我按鍵早已放開,所以才會懷疑IE0是否又被致能
05/16 13:23, 8F

05/16 14:02, , 9F
你在進入中斷副程式時,第一行就將中斷智能關閉,等到要
05/16 14:02, 9F

05/16 14:03, , 10F
結束中斷副程式時再將中斷智能打開,這樣就好了!
05/16 14:03, 10F

05/16 20:36, , 11F
51可設中斷priority, low priority中斷的ISR會被 high
05/16 20:36, 11F

05/16 20:37, , 12F
priority的中斷中斷. 中斷旗標在ISR何處清除沒什麼影響
05/16 20:37, 12F

05/17 03:00, , 13F
我覺得.....是不是用錯中斷的用途了?
05/17 03:00, 13F

05/17 03:00, , 14F
需要DEBUNCE的輸入不會快速到非用中斷不可,想用自動對應
05/17 03:00, 14F

05/17 03:01, , 15F
用計時器掃描輸入會不會比較適當?
05/17 03:01, 15F

05/17 14:18, , 16F
樓上的意思是在計時中斷裡丟掃描訊號,然後偵測是否有按?
05/17 14:18, 16F

05/17 14:19, , 17F
我會問這個問題只是單純想解決外部中斷的彈跳問題@@
05/17 14:19, 17F

05/17 14:24, , 18F
每隔5-10MS檢查,要持續兩週期以才才MAKESURE
05/17 14:24, 18F

05/17 14:27, , 19F
一般,INT的輸入都是提供給外部電子電路觸發的,哪來彈跳
05/17 14:27, 19F

05/17 18:43, , 20F
假如真的要用按鈕開關觸發何不再接個除彈跳電路勒?!
05/17 18:43, 20F
文章代碼(AID): #1BxfIKRb (ASM)
文章代碼(AID): #1BxfIKRb (ASM)