看板 ASM 關於我們 聯絡資訊
※ 引述《dream3325 (憂鬱藍調)》之銘言: : 最近剛接觸8051 : 想請問依下 : 外部中斷要如何用C語言寫(INT0) : 還有要如何消彈跳(像按個一秒鐘 程式就判斷我按了9下 類似的問題)? : 拜託了><" 消除彈跳可以用硬體和軟體 軟體程式複雜但硬體簡單 彈跳現象有兩個發生點 1.按下時 2.放開時 彈跳波形時間大約 10ms~40ms左右 要閃開彈跳現象則要看使用者如何設定sw跟執行動作 裝況有很多種: 1.按下sw後,馬上執行動作,很快就放開,繼續判斷下一次sw 2.按下sw後,不動作,等sw off時才執行動作,所以按下時間可以很久或很短 3....... 現在假設 SW OFF時 信號腳位為 HI SW ON 時 信號腳位為 LOW 現在情況是根據原po要求按下sw ( P1.0 ) 後進入中斷副程式執行想要的動作, 但是一秒後才放開,以下是簡單的防彈跳程式區段 C語言少寫,用組語代替 INT0_INT: CLR EX0 CALL DELAY_30ms ;跳過sw on之彈跳(如果 動作程式有達 30 ms,可不用此行) . . . 動作程式 . . JNB P1.0,$ ;等待按鍵放開 CALL DELAY_30ms ;跳過sw off之彈跳 SETB EX0 RETI 以上只是其中一種,因為要考慮的因素很多 要看你的動作要求為何,連動作程式執行時間也可以考慮當做跳過彈跳時間 就試試看吧,還有外部中斷使用 負緣觸發 比較好,不然準位觸發會更難防止彈跳 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.23.154.94
icetofux:按1秒鐘9跳下,感覺他好像用到低準位觸發了@.@? 04/23 22:36
dexders:可以判斷重複幾次動作 然後再決定是不是正確的動作 04/23 22:42
stool100:C少寫的這個想法 個人不以為然 04/23 23:02
stool100:建議也可以用軟體積分方法.有中斷時累加.超過某值動作 04/23 23:43
final01:他是說ISR最好用ASM寫吧 04/24 15:06
stool100:ISR中建議不要DELAY 04/24 15:37
DamonF1:感謝大家的意見,看看怎樣可以改善的最好, 04/24 23:46