51微控制器之——外部中斷0(INT0)
阿新 • • 發佈:2019-01-02
暫存器是幹什麼的?怎麼配置它?配置完暫存器後,有什麼作用呢?
暫存器是中央處理器內的組成部分。它是有限存貯容量的高速存貯部件,它們可用來暫存指令、資料和地址。暫存器可以用來暫存指令、暫存資料、暫存地址。換而言之,我們配置暫存器,便是給暫存器中賦予一定的值,而這些值又要與我們的目的想對應,這樣它便會有相應的作用。
例如,晶片的資料規定,當給晶片的 A 暫存器賦“0x11”時,它會出現 B 現象;賦“0x77”時,它會出現 C 現象。那麼當我們目的是完成 B 現象時,我們就只需要配置 A 暫存器為“0x11”即可。
雖說看起來很簡單,並且去完成目的時的流程並非這麼容易。但是,實實在在而言,這些就是控制暫存器的根本!
這裡以外部中斷0(INT0)為例,使得外部中斷0每發生一次,最後一位數碼管的數值加1。
前一篇博文已經提到,要實現外部中斷0,就必須要配置好兩個暫存器IP、IE。而對於中斷優先順序暫存器IP,當我們使用預設優先順序時(上篇博文的優先順序表格所述),就不必要去配置IP。
接下來附上IE暫存器的每一位的作用:
首先,中斷允許位暫存器 IE 是可位定址的,意思是說,我們可以單獨的對D0~D7每一位進行操作,而不需要對 IE 整個賦值(為什麼可以這樣,因為keil的標頭檔案“reg52.h”已經對 IE 的地址進行了定義)。
在這裡說明一點,對於51微控制器的 I/O 口而言,上電時,預設輸出為高電平。對於其暫存器而言,上電是,預設為0。可見,當要完成外部中斷0的配置時,我們只需要配置中的EX0、EA,當然還有外部中斷0的觸發方式(產生方式),這裡就要看到中斷及控制暫存器TCON,其成員及意義如下:
可見外部中斷0和外部中斷1的設定方式雷同,跟據上表所述,我們通過設定IT0來設定外部中斷0的觸發方式(分別為:低電平觸發、下降沿觸發),其中 IE 位由硬體自身控制,不需要軟體操作。
例項的核心程式碼如下:
/*數碼管配置完成*/
void main()
{
IT0 = 1; //設定為下降沿觸發
EX0 = 1; //外部中斷0中斷允許位
EA = 1;
while(1); //等待外部中斷0發生
{
display();
}
}
void INT0() interrupt 0 //中斷服務函式的書寫格式
{
if( IE == 1) //產生了外部中斷,IE 自動置為1
{
dspbuf[0]++;
}
}
在上面可以看到配置外部中斷0相關的暫存器時,我們先開啟EX0=1,允許外部中斷產生,再EA = 1,開啟總中斷,這樣就配置好了能產生外部中斷0的先決條件,通過IT0 來配置中斷的觸發方式。在中斷服務函式中,函式名“INT0”可自由編寫,並且中單服務函式不需要宣告,後面所加的“interrupt X”X為該中斷對應的C語言序號。
值得注意的是,對於51微控制器而言,上電之後,所有暫存器的值預設為“0”,所有 I/O 口的值預設為“1”。
通過外部中斷的理解,很方便的能引出下一節的定時器/計數器中斷。
未完待續……