1 定时器
1.1 定时器介绍
51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成
1.2 定时器作用
(1)用于计时系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作
(2)替代长时间的Delay,提高CPU的运行效率和处理速度
(…)
1.3 定时器个数
3个(T0、T1、T2),T0和T1与传统的51单片机兼容,T2是此型号单片机增加的资源(注意:定时器的资源和单片机的型号是关联在一起的,不同的型号可能会有不同的定时器个数和操作方式,但一般来说,T0和T1的操作方式是所有51单片机所共有的)
1.4 定时器框图
定时器在单片机内部就像一个小闹钟一样,根据时钟的输出信号,每隔“一秒”,计数单元的数值就增加一,当计数单元数值增加到“设定的闹钟提醒时间”时,计数单元就会向中断系统发出中断申请,产生“响铃提醒”,使程序跳转到中断服务函数中执行
1.5 定时器工作模式
模式0:13位定时器/计数器
模式1:16位定时器/计数器(常用)
16位由TL0的8位和TH0的8位构成。TL0的8位溢出向TH0的进位,TH0计数溢出置位TCON中的溢出标志位TF0。
SYSclk为系统时钟,即晶振周期
模式2:8位自动重装模式
模式3:两个8位计数器
1.6 相关寄存器
1.6.1 TCON
1.6.2 TMOD
2 中断
2.1 中断源个数
8个(外部中断0、定时器0中断、外部中断1、定时器1中断、串口中断、定时器2中断、外部中断2、外部中断3)
2.2 中断查询
中断号
2.3 中断系统
2.4 相关寄存器
2.4.1 中断寄存器
2.4.2 定时器/计数器0和1的相关寄存器
定时器Timer0函数
void Timer0Init(void)
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x18; //设置定时初值
TH0 = 0xFC; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0=1;
EA=1;
PT0=0;
}
/*定时器中断函数模板
void Timer0_Routine() interrupt 1
{
static unsigned int T0Count;
TL0 = 0x18; //设置定时初值
TH0 = 0xFC; //设置定时初值
T0Count++;
if(T0Count>=1000)
{
T0Count=0;
}
}
*/