單片機中斷簡介
52單片機一共有6個中斷源,它們的符號,名稱以及各產生的條件分別如下:
- INT0 - 外部中斷0,由P3.2端口線引入,低電平或下降沿引起
- INT1 - 外部中斷1,由P3.3端口線引入,低電平或下降沿引起
- T0 - 定時器/計數器0中斷, 由T0計數器計滿回零引起
- T1 - 定時器/計數器1中斷, 由T1計數器計滿回零引起
- T2 - 定時器/計數器2中斷, 由T2計數器計滿回零引起
- TI/RI - 串行口中斷,串行端口完成一幀字符發送/接收后引起
其中T2是52單片機特有的。
中斷允許寄存器IE
中斷優先級寄存器IP
定時器中斷
51單片機內部共有兩個16位可編程的定時器/計數器,即定時器T0和定時器T1
52單片機內部多一個T2定時器/計數器
它們既有定時功能,也有計數功能。可通過設置與它們相關的特殊功能寄存器選擇啟用定時功能還是計數功能。
這個定時器系統是單片機內部一個獨立的硬件部分,它與CPU和晶振通過內部某些控制線連接並相互作用,CPU一旦設置開啟定時功能后,定時器便在晶振的作用下自動開始計時,但定時器的計數器計滿后,會產生中斷。
定時器/計數器的實質是加1計數器(16位), 由高8位和低8位兩個寄存器組成,
TMOD:定時器/計數器的工作方式寄存器,確定工作方式和功能。
TCON:控制寄存器,控制T0,T1的啟動和停止及設置溢出標志。
TMOD:定時器/計數器工作方式寄存器
TCON:定時器/計數器控制寄存器
每個定時器有4種工作方式,可通過設置TMOD寄存器中的M1和M0來進行工作方式選擇。
方式1的技術位數是16bit,對T0來說, TL0寄存器作為低8bit,TH0寄存器作為高8bit,組成了16bit加1計數器,邏輯結構框圖如下
如何計算定時器的初值
中斷服務程序的寫法
示例
#include<reg51.h> #include<intrins.h> #define uchar unsigned char #define uint unsigned int sbit led1 = P0^0; uchar num = 0; //主程序 void main() { TMOD = 0x01; TH0 = (65536 - 45872) / 256; // 設置定時器0為工作方式1(M1M0為01) TL0 = (65536 - 45872) % 256; // 裝初值11.0592M晶振定時50ms數位45872 EA = 1; // 開總中斷 ET0 = 1; // 開定時器0中斷 TR0 = 1; // 啟動定時器0 while(1) { if (num == 20) { num = 0; led1 = ~led1; } } } void T0_time() interrupt 1 { TH0 = (65536 - 45872) / 256; TL0 = (65536 - 45872) % 256; num++; }