【摘要】外部中斷是單片機接收外部器件的信號而不占用CPU常規(guī)時間的實用技術,是單片機技術的一個難點?;谖以簡纹瑱C實驗室的基本實驗條件,經(jīng)過近四個學期的研究和教學實踐驗證,設計了適用于高職高專相關專業(yè)教學和自學單片機外部中斷的一種方法,實驗表明該方法可以實現(xiàn)良好的教學效果。
【關鍵詞】單片機;外部中斷;優(yōu)先級;教學方法
1.前言
在多年的機電一體化技術專業(yè)《單片機原理及應用》課程的授課過程中,逐漸總結出了該課程的重點和難點,其中,單片機外部中斷是重中之重。
2.實驗設備介紹
我院采用的是自主研發(fā)的單片機實踐教學設備,如圖1所示。
圖1 單片機實踐教學設備
控制核心為STC89C52RC單片機,采用DIP40封裝,該系列單片機具備極為方便的程序下載方式,是目前保有率較高的一款通用單片機。顯示器采用六個共陽極數(shù)碼管,P2口作為數(shù)碼管的位選信號,P0口信息作為數(shù)碼管的顯示段碼。兩類輸入設備均采用機械式自復位按鍵,其一是4*4矩陣按鍵,其二是P3口的獨立式按鍵。P3.2和P3.3分別是外部中斷0和外部中斷1的觸發(fā)信號,KEY2和KEY3兩個按鍵產(chǎn)生的低電平信號和由1到0的下降沿信號可以觸發(fā)中斷。設備的部分原理圖如圖2所示。
3.中斷原理
3.1 中斷基本原理
中斷技術是指CPU要中斷當前正在處理而未完成的任務一,先去完成任務二,待任務二完成之后再繼續(xù)完成先前未完成的任務一。在這里任務一可以是C代碼的任何一個函數(shù)或者是主函數(shù),任務二是中斷處理子函數(shù)。
可以觸發(fā)單片機中斷的信號被叫做中斷觸發(fā)信號,單片機配置兩個外部中斷源INT0和INT1,他們的觸發(fā)信號分別是由P3.2和P3.3兩條管腳輸入的,低電平觸發(fā)INT0。外部中斷觸發(fā)信號的形式可以通過IT0和IT1兩個控制位來配置,控制位設置為0,其觸發(fā)相應中斷的信號形式為低電平觸發(fā),若設置為1則為控制引腳出現(xiàn)由1到0的下降沿的時候觸發(fā)。兩類信號均可以通過連接在P3口的獨立式按鍵實現(xiàn)。
3.2 中斷優(yōu)先級
中斷優(yōu)先級有兩層意義。第一層意義是中斷源的默認優(yōu)先級,他們依次從高到低是INT0,定時器0,INT1,定時器1,串行口。第二層意義是中斷源的自定義優(yōu)先級,一般設置兩級自定義優(yōu)先級,若將中斷源的優(yōu)先級控制位設置為高電平1,則為高級中斷,反之為低級中斷。自定義優(yōu)先級同為高級中斷或者低級中斷的中斷源,他們的中斷優(yōu)先級由默認優(yōu)先級決定。
4.中斷的實驗驗證
為了充分解析單片機的中斷技術,結合上述中斷原理,研究設計了一系列實驗模塊,各模塊詳見下列程序清單。
#include
unsigned char code table[]={0xc0, 0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8, 0x80,0x90,0x88,0x83,0xc6,0xa1,0x86,
0x8e};//共陽極數(shù)碼管顯示段碼。
unsigned char counter,ValueS,ValueG; //定義三個無符號字符型變量。
void DelayXms(unsigned char i);
void display();
void main()
{
EA=1;//打開總中斷“開關”。
EX0=1;//打開INT0“開關”。
EX1=1;//打開INT1“開關”。
IT0=1;//INT0觸發(fā)引腳P3.2低電平0觸發(fā)(IT0=1將配置該觸發(fā)引腳出現(xiàn)1->0下降沿時觸發(fā)中斷)。
IT1=0;//INT1觸發(fā)引腳P3.3低電平0觸發(fā)(IT1=1將配置該觸發(fā)引腳出現(xiàn)1->0下降沿時觸發(fā)中斷)。
PX0=0;//設置INT0為低級中斷。
PX1=1;//設置INT1為高級中斷。
while(1){display();}//主函數(shù)循環(huán)的主體是顯示工作。
}
void WINT0()interrupt 0//INT0處理函數(shù)。模塊一:實現(xiàn)計數(shù)值加一。
{
DelayXms(5);//消除機械式自復位按鍵的抖動。
if(INT0==0)//INT0=P3.2。
{counter++;}//計數(shù)值加一。
if(counter==10)
{counter=0;}//計數(shù)值逢十清零。
}
void WINT11()interrupt 2//INT1處理函數(shù)。模塊二:實現(xiàn)最左邊一個數(shù)碼管顯示0。
{
P2=0x01;
P0=table[0];
display();
}
void display()//模塊三:最右邊兩位數(shù)碼管的動態(tài)顯示計數(shù)值。
{
ValueS=counter/10;//取整,十位。
ValueG=counter%10;//取余,個位。
P2=0x20;
P0=table[ValueG];
DelayXms(3);
P2=0X10;
P0=table[ValueS];
DelayXms(3);
}
void DelayXms(unsigned char i)//模塊四:X毫秒延時。
{
while(--i)
{
unsigned char j = 250;
while(--j);
}
}
(1)實驗一:設置INT0為下降沿觸發(fā)方式(IT0=1),中斷處理函數(shù)為模塊一計數(shù)值加一。實驗結果表明單片機可以順利的將按鍵的按下次數(shù)顯示出來。
(2)實驗二:設置INT0為低電平觸發(fā)方式(IT0=0)。實驗結果表明單片機不能夠正常顯示按鍵按下次數(shù)。因為電平觸發(fā)方式的時候,只要觸發(fā)信號引腳是低電平就要申請中斷加一,人工按下機械式按鍵,將會被單片機掃描為多次低電平,出現(xiàn)重復加一,顯示亂碼的情況。可以擴展到INT1,收獲同樣的實驗結果。
(3)實驗三:采用默認優(yōu)先級,設置INT0為低電平0觸發(fā),一直按下KEY2實現(xiàn)顯示0功能。設置INT1為下降沿觸發(fā),按下KEY3一次實現(xiàn)加一功能。實驗第一步,單獨按KEY3可以順利實現(xiàn)加一功能;第二步,保持KEY2按下狀態(tài),因為低電平0觸發(fā)的緣故,CPU將不斷的實現(xiàn)INT0的顯示0的功能,這時候按下KEY3是不能夠實現(xiàn)加一功能的,因為INT0的優(yōu)先級要高于INT1。
(4)實驗四:設置INT0實現(xiàn)加一功能而INT1實現(xiàn)顯示0的功能。實驗第一步,單獨的KEY2和KEY3的功能可以分別實現(xiàn);第二步,在保持KEY3按下的情況下,再來按KEY2可以實現(xiàn)加一功能。
(5)實驗五:通過自定義優(yōu)先級的方式將INT1設置為高級中斷(PX1=1),INT0設置為低級中斷(PX0=0),重復實驗三和實驗四可以達到類似的效果。
5.總結
經(jīng)過近幾年的實踐教學,研究設計了適用于高職高專機電一體化技術相關專業(yè)教學和自學單片機外部中斷的一種方法,其中涵蓋了簡單可行的五個實驗,實驗表明該方法可以實現(xiàn)良好的教學效果。
參考文獻
[1]脫建智.基于自適應算法的圓柱狀旋轉顯示屏的研究與設計[J].電子世界,2013,7:155.
[2]脫建智.高職單片機技術的理論與實踐一體化教學研究[J].中國職工教育,2012.12:136.
[3]脫建智.一種基于單片機的矩陣式鍵盤的設計與應用[J].中國新通信.2012,24:52.
作者簡介:脫建智(1981—),男,山東青州人,碩士,講師,現(xiàn)供職于濰坊工程職業(yè)學院,研究方向:機電一體化系統(tǒng)。