52單片機一共有6箇中斷源,它們的符號,名稱以及各產生的條件分別以下:編程
其中T2是52單片機特有的。ui
51單片機內部共有兩個16位可編程的定時器/計數器,即定時器T0和定時器T1spa
52單片機內部多一個T2定時器/計數器3d
它們既有定時功能,也有計數功能。可經過設置與它們相關的特殊功能寄存器選擇啓用定時功能仍是計數功能。code
這個定時器系統是單片機內部一個獨立的硬件部分,它與CPU和晶振經過內部某些控制線鏈接並相互做用,CPU一旦設置開啓定時功能後,定時器便在晶振的做用下自動開始計時,但定時器的計數器計滿後,會產生中斷。blog
定時器/計數器的實質是加1計數器(16位), 由高8位和低8位兩個寄存器組成,it
TMOD:定時器/計數器的工做方式寄存器,肯定工做方式和功能。class
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++; }