天天看點

micropython運作機制_Micropython之外部中斷

外部中斷是微控制器的另一個重要的硬體資源。

微控制器在程式運作過程中,一般是在一個主循環(死循環)中進行,主要的程式,都在這個大循環中定義,包括函數的調用等。在沒有外界幹預的情況下,程式運作基本處于一個封閉狀态。上次課我們講到定時器,這是微控制器内部打斷主循環的一個機制,但是從微控制外部來看的話,微控制器還是一個封閉的運作環境。但是往往這種情況是不能滿足更多的任務操作需求的,是以就有了微控制器的外部中斷,我們可以通過外部的一些操作,來打斷微控制器的主循環程式,轉向執行中斷程式。就像是人一樣,一個人自嗨,不和外界交流,那麼這個人隻能服務于自己,而不能服務于别人。是以,外部中斷這個資源就顯得至關重要了。

具體實作方式,外部中斷就是在微控制器的一個引腳上,由于外部原因導緻了電平發生了變化,比如電平由高到低(我們稱之為下降沿),或者由低到高(我們稱之為上升沿),或者高電平、低電平等。微控制器通過硬體感受到這個變化,微控制器自打斷主循環的程式,轉而去執行相應的中斷處理程式,執行完後又回到原來主循環程式打斷的地方繼續執行原來的程式。而這個過程是很短暫的,在外界看來,基本上感覺不到程式的跳轉。是以在這裡,就需要注意一點了,在中斷服務程式中,程式不能太多,比如在中斷程式中延時了200ms,這是不允許的。一般我們在中斷服務程式中,隻對一些變量進行改變,或者對一些标志位置位。然後在主循環中通過查詢标志位,去執行代碼量更多的操作。

本次課,我們使用到了一個編碼電機,參考購買連結:

micropython運作機制_Micropython之外部中斷

該編碼電機的碼盤使用3.3V供電,非常适合接在掌控闆的拓展闆上。

學習筆記:

1、外部中斷的使用

a、首先将該引腳執行個體化,模式為PinMode.IN

如p5=MPythonPin(5,PinMode.IN)

b、使用irq()函數設定外部中斷的觸發方式(上升沿或下降沿),和回調函數(即中斷服務函數)

如p5.irq(trigger=Pin.IRQ_FALLING,handler=BuzzOn)

trigger方式包括

Pin.IRQ_FALLING 下降沿觸發

Pin.IRQ_RISING 上升沿觸發

Pin.IRQ_LOW_LEVEL 低電平觸發

Pin.IRQ_HIGH_LEVEL 高電平觸發

handler表示指向的回調函數,這裡指向BuzzOn函數

c、定義的回調函數必須包含一個參數,表示這個中斷的實體對象

如def BuzzOn(q):