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++; }