1. 程式人生 > >邊沿觸發和電平觸發的區別

邊沿觸發和電平觸發的區別

邊沿觸發和電平觸發的區別 
當然不一樣了
電平觸發是在高或低電平保持的時間內觸發,
而邊沿觸發是由高到低或由低到高這一瞬間觸發
追問:
我總覺得都是在電平為某一值是而觸發的。那邊沿觸發到底解決了電平觸發哪點沒有解決的問題呢?
追答:
邊沿觸發一般時間短,邊沿觸發一般時間都是us級的,響應要快的,而電平觸發只須是高和低就可以了,沒時間要求,比如10s 時間內總是低電平,那麼它也是觸發的,
比如中斷計時或計數,最好用邊沿觸發,用電平觸發誤差會很大,電平觸發一般用於簡單報警,開關一類(時間要求不高的)
分類:
電平觸發,就是隻有高電平的時候才做指定的事, 
邊沿觸發,就是有高電平向低電平轉換,或者翻過來轉換,這個轉換過程觸發一個動作。 
上升沿,顧名思義,就是低電平向高電平轉換的瞬間,比如 
_______ 
____/ ,這個圖中,/部分就是上升沿, 

______ 
\_____ ,這個圖中,\部分就是下降沿


電平就是電壓,高電平就是高電壓,低電平就是低電壓 
高電平觸發就是當電壓為高就觸發 
邊沿觸發就是當電壓由高變低或由低變高時觸發 
上升沿觸發 就是當電壓從低變高時觸發 
下降沿觸發 就是當電壓從高變低時觸發


邊沿觸發:上升沿和下降沿,這個在學數電時都學過的,簡單說就是電平變化那一瞬間。

電平觸發:一般是指低電平,就是電平變為低了之後的全部時間裡。

如果是下降沿觸發,當從高至低電平轉變時,觸發產生。低電平保持多久都只產生一次。

如果是低電平觸發,那麼在低電平時間內中斷一直有效。如果在電平沒有恢復之前就退出中斷程式,那麼會在退出後又再次進入中斷。只要不退出是不會重複觸發的。我的做法是在退出前關閉中斷,等後面有空時再開啟。、

 

 

如:外部中斷1中斷中來檢測按鍵。

void ISR_INT1(void) interrupt 2 
{

if(!INT1)    //INT1為外部中斷1,INT1=P3^3.
{
DelayMs(10);//在此處可以新增動程式,防止按鍵抖動造成錯誤
if(!INT1)
while(!INT1);//等待按鍵釋放
{
L1=!L1; 
}
}

 

來在外部中斷中來檢測按鍵。雖有一丟丟效果。
但不建議用外部中斷來檢測按鍵。
當你按下S2或S3時已經執行中斷服務子程式去了,延時消抖是不可行的,只有採用硬體消抖。在實際應用中INT1和INT0接的應該是穩定數字數字訊號,而不是按鍵產生有干擾的數字訊號,有條件的話就用硬體消抖。

外部中斷是用來檢測要求響應速度高(微秒級)的外設的,而按鍵的動作時間都大於40毫秒,你可以測試一下。
雖然還是有很多做開發板的把按鍵做在中斷上,但那只是驗證是否好用,產品上儘量不要這樣做。
按鍵消抖也不要用延時10ms再檢測一次的辦法,延時的這10ms實在是浪費控制器的資源,要知道時間對微控制器來說是非常寶貴的。
在做按鍵檢測時,建議設定一個10ms的定時器中斷作為時鐘節拍,並在中斷中設定標誌。
程式的主迴圈中檢測時鐘節拍標誌,檢測到標誌後清除標誌並掃描按鍵,記錄當前按鍵狀態並和上次檢測的結果做比較,並記錄相同的次數,連續三次檢測到同一個按鍵按下,則確認按鍵按下。
這樣既可以消抖保證按鍵的準確,又較少的佔用了微控制器的時間資源,稍微增加了點程式的空間,在微控制器做的人機介面的系統中,應該是最合算的。