㈠ 51單片機外部中斷下降沿去抖動。。。。。。
在中斷裡面,關閉中斷,實為敗筆。
因為在本中斷期間,並不可能再發生本中斷。
外部中斷,可選為下降沿觸發,這樣一次下降沿,就只會產生一次中斷。
想使用外部中斷,就是要利用它的即時反應的特點,這就要求輸入的信號不要抖動。
為了避免在瞬間產生多次下降沿,應該在外部電路中加一個消抖電路。
否則,本來是希望發生一次中斷,就會產生多次響應。
在中斷函數中,也可以加上延時,進行消抖,就像加上delay(10000);,
但是,這樣就降低了中斷的靈敏度,延時期間再真的有中斷,也不會響應。
實際上,這就是不倫不類的四不像程序。
㈡ 單片機的按鍵開關抖動的產生原因,抖動的特點和如何消除抖動
開關按鈕在按下時,表面上只按了一下,但信號的傳導並不是單純的由1直接跳到0。這是由於機械觸點斷開/閉合時會有抖動,信號如圖示會在HIGH和LOW之間抖動。這種抖動對人來說是感覺不到的,但對單片機來說,則是完全可以感應到的。
當按鈕被按下時,你所期待的效果應該是:111111111000000000…,
而事與願違,單片機讀到的信號可能會是:111110110110000000…,
這中間連續的1和0過渡處,短暫的幾個隨機交錯出現的01就是我們不期望產生的抖動,雖然我們只按了一下按鈕,可能會被電路誤讀成按了好幾下按鈕,而給人的感覺就是有時候按鈕會不靈。消抖的目的就是為了要除去信號在高低電位之間彈跳所造成的不正確輸入,就是交錯出現的01那段,一般抖動持續的時間是3-10毫秒。所以簡單的去抖動操作,只要在這段抖動出現的時間跨度兩端進行兩次按鈕狀態檢測即可:
假設放開按鈕信號為1,按下為0,
那麼當首次檢測到按鈕為0,過10ms再次檢測,若依然為0,按鈕按下有效;若為1,說明為抖動,去除。
更可靠,更靈敏的消抖做法為:
首次檢測到按鈕為0後,以後的3-5ms持續檢測,若檢測到信號一直為0,則按鈕有效,若中間有一次不為0,時間清0,重新計時,直到連續3-5ms按鈕信號一直為0,方為有效。(補充一下,持續檢測的意思,並不是讓你把全部的CPU時間全部花在這上面,否則這幾ms時間內單片機相當於死機了,影響其它進程,而是間隔性地采樣一下,比如5ms之內檢測10次,10次全為0有效,其它時間CPU當然去處理別的事務)
至於按鈕的連按和單按、雙按,多按鈕同時生效等更復雜的功能,可藉助其它的標志位實現。
㈢ 關於單片機消抖問題
去抖就是檢測到中斷電平後需要隔一段時間(幾十個ms)再去檢測一次。因為io的抖動也可能有高低電平變化而被單片機檢測到,而真正的按鍵是持續100ms以上的,所以通過延時去抖可以判別出來。
㈣ 單片機 按鍵去抖啥意思
單片機 按鍵去抖, 就是單片機的 按鍵 在正常操作中 在按壓過程時 不能一下 完全接通,
就是按壓抖動,單片機在接收這種 信息時 會判斷錯誤,所有要去掉這種抖動因素,
去抖 有 硬體 去抖 就是在 按鍵與單片機連接的 IO 口 加 消抖電容 。
還有 用 軟體 去抖 就是 在單片機 接收按鍵 信息時 多次 判斷 相同 才確認 是 與 否。
㈤ 單片機輸出方波,觀測到方波有抖動,C程序很簡單,求分析
看到了你的程序和插圖。
你是打算讓T0在36個機器周期(大概是36us)中斷一次,輸出反相的波形。
但是,中斷,並不是嚴格按照機器周期的個數來發生的。
當主程序執行的時候,是一條一條的匯編語言指令,有些的指令是兩個機器周期的。
如果在執行「兩個機器周期的指令」期間,中間發生了定時器溢出,中斷並不會立即發生。
要等到「兩個機器周期的指令」執行完了,才會去執行中斷程序。
根據主程序當時的不同指令,中斷申請到中斷程序的進入,往往有3~8個機器周期。
這個數據,是有資料可以證明的。
當執行對中斷系統操作的指令時,耽誤的時間最長。
樓主看到的現象,其實是很正常的。