Re: [問題] 8051 外部中斷 用C語言

看板ASM作者 (..........)時間16年前 (2008/04/23 21:15), 編輯推噓4(403)
留言7則, 5人參與, 最新討論串2/3 (看更多)
※ 引述《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

04/23 22:36, , 1F
按1秒鐘9跳下,感覺他好像用到低準位觸發了@.@?
04/23 22:36, 1F

04/23 22:42, , 2F
可以判斷重複幾次動作 然後再決定是不是正確的動作
04/23 22:42, 2F

04/23 23:02, , 3F
C少寫的這個想法 個人不以為然
04/23 23:02, 3F

04/23 23:43, , 4F
建議也可以用軟體積分方法.有中斷時累加.超過某值動作
04/23 23:43, 4F

04/24 15:06, , 5F
他是說ISR最好用ASM寫吧
04/24 15:06, 5F

04/24 15:37, , 6F
ISR中建議不要DELAY
04/24 15:37, 6F

04/24 23:46, , 7F
感謝大家的意見,看看怎樣可以改善的最好,
04/24 23:46, 7F
文章代碼(AID): #183pQ67Y (ASM)
文章代碼(AID): #183pQ67Y (ASM)