外部中斷—高低電平觸發,(邊沿觸發)上升沿觸發和下降沿觸發區別

2024年2月6日 21点热度 0人点赞

1什麼是中斷

CPU在處理某一事件A時,發生了另一事件B請求CPU迅速去處理(中斷發生);
CPU暫時中斷當前的工作,轉去處理事件B(中斷響應和中斷服務);
待CPU將事件B處理完畢後,再回到原來事件A被中斷的地方繼續處理事件A(中斷返回),這一過程稱為中斷。

通俗點說:你正在傢裡做傢務,突然有人來找你,打斷了你的進程,在你們交談完之後,你就又回去繼續進行你的傢務活,這其中被打斷的過程,就叫做中斷,而在中斷結束之後,你則會繼續進行本來應該做的事情

高低電平觸發:

低電平觸發:

低電平觸發中斷顧名思義,就是檢測到引腳為低電平就觸發,從而進入中斷函數中處理這個中斷,並且在高或低電平保持的時間內持續觸發,假設是低電平觸發,隻要引腳為低電平時間內中斷一直有效,那麼就會一直進入中斷,直到電平變化為高電平

高電平觸發:

則是 檢測為高電平就觸發,其餘與低電平觸發相同

註意事項:

1.電平觸發中斷,如果在電平沒有恢復之前就退出中斷程序,那麼會在退出後又再次進入中斷。隻要不退出是不會重復觸發的。

也就是重復觸發隻有在退出中斷後才會再次觸發,不用擔心這次還沒進行完,中斷已經重新觸發的情況

2.低電平觸發是即時的,當外部中斷信號撤消時,中斷申請信號隨之消失。如果在外部中斷信號申請期間,CPU來不及響應此中斷,那麼有可能這次中斷申請就漏掉了。也就是說假設低/高電平的時間很短。CPU沒來得及相應,那麼這次的電平中斷申請就可能不會檢測到

3.如果想要電平觸發中斷也隻進行一次,通常的做法是在中斷退出前關閉中斷,等後面需要的時候再打開

邊沿觸發:

這裡要先了解下:

從低電平到高電平, 叫做上升
從高電平到低電平, 叫做下降

·上升沿觸發

數字電平從低電平(數字“0”)變為高電平(數字“1”)的那一瞬間叫作上升沿。 上升沿觸發是當信號有上升沿時的開關動作,當電位由低變高而觸發輸出變化的就叫上升沿觸發。也就是當測到的信號電位是從低到高也就是上升時就觸發,叫做上升沿觸發。

·下降沿觸發

數字電路中,數字電平從高電平(數字“1”)變為低電平(數字“0”)的那一瞬間叫作下降沿。 [1] 下降沿觸發是當信號有下降沿時的開關動作,當電位由高變低而觸發輸出變化的就叫下降沿觸發。也就是當測到的信號電位是從高到低也就是下降時就觸發,叫做下降沿觸發。

那麼我們可以很好的理解兩種觸發:

上升沿觸發 就是當電壓從低變高時觸發中斷
下降沿觸發 就是當電壓從高變低時觸發中斷

當然,上升沿與下降沿檢測的是電平變化的一瞬間,就會產生中斷,這個時間是us級別的,但是如果中斷引腳檢測到一直保持低/高電平,則無法產生下次中斷,也就是中斷隻會觸發一次,隻有在下次電平發生變化時才會重新觸發中斷

註意事項:

1 邊沿觸發就是單片機在上一次機器周期內,檢測到中斷引腳口為高電平,這一次機器周期內檢測到為低電平,則會申請產生中斷,所以為us級別

2 下降沿觸發是鎖存中斷信號的,由D觸發器記憶,意即:即使當時CPU來不及響應中斷,外部中斷信號撤消後,由於D觸發器的記憶作用,消失的中斷信號仍然有效,直到中斷被響應並進入中斷ISR,記憶的中斷信號才會由硬件清除。 這也是為什麼邊沿觸發隻能觸發一次的原因

3.對於單片機的中斷引腳,如果你另一端接的是VCC 則需要設置成上升沿或者高電平觸發 如果你接的是GND 就可以設置成下降沿或者低電平觸發

區別:

我們可以理解,電平觸發在你一直按著按鍵的時候會一直進入中斷,邊沿觸發則是隻會觸發一次,再次按下才會重新觸發,這就給我們不同的應用功能提供了選擇,使得我們可以在不同個工作下選擇適合的模式,邊沿觸發適用於對對時間要求高的,比如中斷中有計數之類的(GATE門控位置1時),而電平觸發則適合報警裝置,

51單片機的具體講解與實現:

在51中,為了方便區分兩種方式,用IT0/IT1,將低電平觸發和下降沿觸發這兩種方式轉化成對應的信號:IT0/IT1的高電平和低電平

,IT0/IT1高電平則為下降沿觸發,IT0/IT1低電平則為低電平觸發

IT0=1;//跳變沿出發方式(下降沿)

IT0=0;//電平觸發

而在有中斷觸發之後,是否允許進行該中斷,則對應的轉換為 EX0 EX1的高低電平來實現

EX0 EX1為高電平則允許中斷,EX0 EX1為低電平則不允許中斷

EX1=1;//打開INT1的中斷允許

EX1=0;//關閉INT1的中斷允許

而我們的外部中斷,定時器中斷,串口中斷,等等,都隻是中斷的一個分支,在打開分支之後,相對應的要打開“總閘” EA

EA的作用相當於一個”總閘“,而EX0 EX1隻是支線上的一個開關 ,再打開分支開關之後,需要打開總開關,才能夠進行中斷

簡單來說 ,EA等於告訴單片機是否可以進行中斷這個操作,而EX0 EX1等於是否允許外部觸發中斷進行,

EA=1;//打開總中斷

EA=0;//關閉總中斷

在允許中斷操作進行之後,如果有好幾個中斷應該怎麼怎麼辦呢,如果誰也不服誰,都搶著說我先,那麼MCU估計沒兩天就罷工告竭了,這時候便需要設置中斷優先級,告訴每個中斷誰應該先,誰應該後,大傢禮尚往來,系統才能正常工作 當然在51中有著一個默認的優先級,依次是:外中斷0,定時器0,外中斷1,定時器1,串口 有多個中斷時,會先進行前面的中斷

void函數名() interrupt 2 using 工作組 //外部中斷1的中斷函數

{

//吧啦吧啦代碼

}

interrupt後面跟的數字代表使用哪一個中斷通道,
0 外部中斷0
1 定時器0
2 外部中斷1
3 定時器1
4 串行中斷

工作組一般不用設置,在程序編譯時會自動分配

這樣子外部觸發中斷的配置就配置好了,其他的中斷配置和它都是類似的,同學們學會這個51的中斷基本就可以舉一反三,有一個更好的認識

低電平觸發:

在51中:低電平觸發是當管腳INTO/INT1(P3.2/P3,3)為低電平時,被單片機檢測到後,就認為有中斷請求,EX0/EX1置高電平,向CPU發出中斷請求;則進入中斷

下降沿觸發:

邊沿觸發就是當管腳INTO/INT1有由高電平變低電平的過程時,就認為有中斷請求,EX0/EX1置高電平,向CPU發出中斷請求,進入中斷。

嵌入式物聯網的學習之路非常漫長,不少人因為學習路線不對或者學習內容不夠專業而錯失高薪offer。不過別擔心,我為大傢整理了一份150多G的學習資源,基本上涵蓋了嵌入式物聯網學習的所有內容。點擊下方鏈接,0元領取學習資源,讓你的學習之路更加順暢!記得點贊、關註、收藏、轉發哦!

點擊這裡找小助理0元領取:掃碼進群領資料