應(yīng)朋友的要求,說明MCU中斷的知識(shí)。
今天,我以51 MCU的外部中斷0為例,簡(jiǎn)要解釋MCU中斷的用法。
1 51單片機(jī)的中斷源51單片機(jī)有5個(gè)中斷源,分別是:外部中斷0定時(shí)器0中斷外部中斷1定時(shí)器1中斷串口中斷每個(gè)中斷對(duì)應(yīng)一個(gè)中斷向量,該中斷向量表如下:2什么是中斷事件?發(fā)生中斷時(shí),微控制器會(huì)暫時(shí)放下正在執(zhí)行的程序以處理中斷事件。
當(dāng)中斷事件被處理時(shí),它將繼續(xù)處理先前的事件,這可以大大減少微控制器的資源并提高執(zhí)行效率。
舉個(gè)例子來說明什么是中斷:我非常喜歡玩CS。
我每天晚上花時(shí)間玩CS,但與此同時(shí)廚房里水沸騰了。
為了防止水沸騰干dry,我每隔5分鐘去廚房檢查一次水。
確實(shí)發(fā)生了,但是這錯(cuò)過了比賽,總是被別人的爆頭殺死。
我很傷心。
我該怎么辦?因此,我在互聯(lián)網(wǎng)上買了一個(gè)水壺,當(dāng)水燒開時(shí),水壺會(huì)沸騰,這樣我就不必每5分鐘去廚房一次,這樣我就可以專注于玩游戲了。
只有當(dāng)我聽到水壺發(fā)出吱吱聲時(shí),才將水倒出。
就是這樣。
在此示例中,玩游戲是主要任務(wù),開水是中斷,吱吱聲是中斷向量。
當(dāng)我聽到吱吱聲時(shí),我知道水正在沸騰。
這時(shí)候,我想暫時(shí)放下玩游戲的主要任務(wù)。
為了解決沸騰水的中斷問題,倒水后我回到了游戲的主要任務(wù)。
這會(huì)提高玩游戲的效率嗎? 3中斷的硬件實(shí)現(xiàn)51單片機(jī)的外部中斷0引腳連接到一個(gè)按鈕,該按鈕通過上拉電阻連接到電源。
即,當(dāng)按下按鈕時(shí),單片機(jī)檢測(cè)到高電平。
是低級(jí)的。
單片機(jī)的P0.0引腳以吸收電流的方式連接到LED。
按下按鈕時(shí),LED指示燈點(diǎn)亮;沒有按鈕時(shí),LED指示燈熄滅。
4中斷軟件的實(shí)現(xiàn)MCU中斷功能的寫入方法相對(duì)固定。
51 MCU中斷函數(shù)的編寫方法如下:void Initd()interrupt 0其中:void:是中斷函數(shù)的返回類型,并且中斷函數(shù)大多為null類型; Initd():是中斷函數(shù)的名稱,此函數(shù)名稱可以符合C語(yǔ)言函數(shù)的命名規(guī)范,只需啟動(dòng)它即可;中斷:是51單片機(jī)中斷的關(guān)鍵字,必須這樣寫(51單片機(jī)必須寫這個(gè)); 0:是中斷向量,詳細(xì)值請(qǐng)參見第一個(gè)表,如果是外部中斷1,則寫2;如果是定時(shí)器1中斷,則寫3;如果是外部中斷1,寫3。
只要在發(fā)生中斷事件時(shí),不需要在主函數(shù)中調(diào)用中斷函數(shù),微控制器本身就會(huì)主動(dòng)調(diào)用中斷函數(shù)。
該示例的功能如下:5模擬實(shí)現(xiàn)按下一個(gè)鍵時(shí),LED燈點(diǎn)亮,如下圖所示。
注意比較兩個(gè)圖中按鈕的狀態(tài)。
免責(zé)聲明:本文內(nèi)容經(jīng)21ic授權(quán)后發(fā)布,版權(quán)歸原作者所有。
該平臺(tái)僅提供信息存儲(chǔ)服務(wù)。
本文僅代表作者的個(gè)人觀點(diǎn),并不代表該平臺(tái)的立場(chǎng)。
如有任何疑問,請(qǐng)與我們聯(lián)系,謝謝!