單片機中斷功能在干簧管計數(shù)器設(shè)計中的應(yīng)用
在本文的介紹中,要設(shè)計一個干簧管計數(shù)器,并用數(shù)碼管來顯示。本案例例中,還要接觸單片機一個重要的功能“中斷”。
干簧管是干式舌簧管的簡稱,是一種有觸點的無源電子開關(guān)元件,具有結(jié)構(gòu)簡單,體積小便于控制等優(yōu)點,其外殼一般是一根密封的玻璃營,管中裝有兩個鐵質(zhì)的彈性簧片電板,還灌有一種叫金屬銠的惰性氣體。平時,玻璃管中的兩個由特殊材料制成的簧片是分開的。
下圖是它的結(jié)構(gòu)示意圖。
干簧管計數(shù)器結(jié)構(gòu)示意圖
當(dāng)有磁性物質(zhì)靠近玻璃管時,在磁場磁力線的作用下,管內(nèi)的兩個簧片被磁化而互相吸引接觸,簧片就會吸合在一起,使結(jié)點所接的電路連通。外磁力消失后,兩個簧片由于本身的彈性而分開,線路也就斷開了。
因此,作為一種利用磁場信號來控制的線路開關(guān)器件,干簧管可以作為傳感器用,用于計數(shù),限位等,同時還被廣泛使用于各種通信設(shè)備中。在實際運用中,通常用永久磁鐵控制這兩根金屬片的接通與否,所以又被稱為“磁控管”。
下圖是干簧管狀態(tài)讀入電路,
干簧管狀態(tài)讀入電路
當(dāng)磁鐵靠近干簧管時,相當(dāng)于按鍵按下,單片機P3.2口為OV,邏輯“0”:當(dāng)磁鐵拿走時,相當(dāng)于按鍵抬鍵,P3.2為+5V,邏輯“1”。
我們要做的實驗就是記錄磁鐵靠近干簧管的次數(shù),也就是P3.2口由“1”變成“0”的次數(shù)。在寫程序之前先介紹單片機中斷的概念。
舉個例子,如果我們有很多工作要做,偏偏有一個重要的客人要來,而且不知道來的具體時間,我們該怎么辦?沒錯,我們先做工作,客人來了放下工作先接待,等客人走了接著做剛才放下的工作。
單片機的中斷系統(tǒng)也是這樣,中斷請求來臨時,單片機從當(dāng)前運行的程序中跳出,直接運行中斷服務(wù)程序,運行完中斷服務(wù)程序后,再回到剛才程序中斷的地方接著運行。
在本實驗的電路設(shè)計中,用P3.2口讀取干簧管的狀態(tài),單片機的P3.2口有一個重要的功能,它是外部中斷0的接入口。經(jīng)過初始化,當(dāng)P3.2口的狀態(tài)從“1”變到“0”時就會觸發(fā)外部中斷0,程序會自動跳到我們寫好的中斷服務(wù)程序,執(zhí)行完中斷服務(wù)程序后,再回到剛才主程序中斷的地方繼續(xù)執(zhí)行主程序。程序如下:
#include
//存儲數(shù)碼管顯示碼的一維數(shù)組
unsignedcharShowCode[]=(Oxc0,Oxf9,Oxa4,OxbO,Ox99,Ox92,Ox82,Oxf8,Ox80,Ox90):
//主程序
voiDMAin(void){unsignedchari….
….
….
P1=ShowCode[num];//在數(shù)碼管上顯示數(shù)字num}
}
【注1】:主程序第一個語句初始化了外部中斷0,將外部中斷0(P3.2)設(shè)置為下降沿觸發(fā),即觸發(fā)中斷的條件是P3.2口的狀態(tài)從“1”變到“0”。
第二句使能了外部中斷0,只有使能中斷,當(dāng)中斷條件發(fā)生時,程序才能跳到中斷服務(wù)程序;否則,即使中斷條件發(fā)生,程序也不會跳去執(zhí)行中斷服務(wù)程序。
【注2】:中斷服務(wù)程序,外部中斷0的中斷向量為0。每次磁鐵靠近干簧管都會使P3.2的狀態(tài)從“1”變到“0”,從而觸發(fā)中斷,程序會直接跳到本中斷服務(wù)程序,num++語句使變量num加1。