1.前言
最近用到了51單片機的中斷功能,於是找出了當初購買STC89C52開拓者單片機時附贈的學習視頻,現將學習筆記記錄如下。
2.學習筆記
中斷簡介:
主程序執行過程中,(中斷請求)->主程序被打斷,轉而執行分支任務,分支任務執行完畢后,回到主程序繼續執行。
中斷優點:
- 分時操作;
- 實時響應(響應速度快);
- 可靠性高;
中斷系統結構:
中斷源:
- /INTO (P3.2管腳)
- T0(采集外部脈沖個數)
- /INT1(P3.3管腳)
- T1(采集外部脈沖個數)
- RX&TX(P3.0、P3.1串口引腳)
TCON寄存器:IT0 = 1(下降沿觸發)
0(高電平觸發)
IE0 = 0
1(允許中斷請求)
IE寄存器(中斷控制寄存器):EX0 = 0
1(外部中斷使能)
EA = 0
1(中斷總開關)
IP(中斷優先級)寄存器:1-高;(IP寄存器通常不使用)
注意中斷號!!中斷號是中斷的代號,也是默認優先級的排列順序(優先級從大到小依次是01234);
c程序中標記中斷時也是通過:
1 void int0() interrupt 0 2 { 3 4 //中斷函數執行內容; 5 6 }
的形式,interrupt 0代表這個函數是中斷0觸發時執行的。
中斷寄存器:
TCON:8位
TR0、TF0統歸於定時器中斷0;
TR0 = 1,定時/計數器開啟(開始計數),記滿了(計數溢出),TF0置1,開始定時/計數器中斷0請求;
中斷優先級:
CPU同時收到請求,首先響應高優先級的中斷;
中斷執行過程中,同等級或低等級不可被打斷,可以被高優先級中斷打斷。
中斷的使用:
示例:
1 #include “reg52.h” 2 3 void main() 4 { 5 EA = 1; //打開總中斷開關 6 EX0 = 1; //開外部中斷0 7 //IT0 = 0; 8 IT0 = 1;//設置外部中斷的觸發方式 9 while(1) ; 10 11 } 12 13 //中斷服務函數 14 void int0() interrupt 0 using 1//中斷0,使用第1組寄存器 15 { 16 //中斷執行指令 17 }
本文目的在於學習分享,無商業目的。部分資源來自於網絡,如有侵權,請聯系作者刪除,謝謝!