1.定义
定时器介绍: 51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。
2.作用
定时器作用:
1.用于计数系统,可实现软件计时,或者使程序每隔一固定时间完成一项操作
2.替代长时间的Delay,提高CPU的运行效率和处理速度
3.定时器资源
1.定时器个数三个(T0,T1,T2),T0和T1与传统的51单片机兼容,T2是此型号单片机增加的资源
注意:定时器的资源和单片机的型号是关联在I起的,不同的型号可能会有不同的定时器个数和操作方式,但一般来说,T0和T1的操作方式是所有51单片机所共有的。
4.定时器工作模式
STC89C52的T0和T1均由四种工作模式
模式0:13位定时器/计数器
模式1:16位定时器/计数器(常用)
模式2:8位自动重装载模式
模式3:两个8位计数器
定时器1的工作模式框图:
sysclk—mcumode:系统时钟选择分频模式
C/T= 0定时器模式 =1计数器模式
5.工作过程原理

定时器在单片机内部就像一个小闹钟一样,根据时钟的输出信号每隔“一秒”,计数单元的数值就加以,当计数单元数值增加到“设定的闹钟提醒时候”时,计数单元就会向中断系统发出中断申请,产生“响铃提醒”,使得程序跳转到中断服务程序。
说明:中断系统

6.定时器相关寄存器

TCON位于特殊功能寄存器中(SFR),可进行位寻址
TF1/TF0--------定时器/计数器溢出标志位
当定时器计满溢出时,由硬件使其置1,并且向CPU申请中断,进入中断服务程序后,由硬件自动清0。
TR1/TR0-------定时器运行控制位
当GATE=1,当相应的外部中断引脚(INT1/INT0)为高电平时,TR1/TR0置1启动定时器,当GATE=0,TR1/TR0置1启动定时器
IE1/IE0--------外部中断请求标志位
IT1/IT0---------外部中断触发方式选择位
0为电平触发模式
1为跳变沿触发模式
GATE----门控制位
GATE=0,定时器计数器启动与停止仅受TCON寄存器中的TRX(X=0,1)控制
GATE=1,定时器计数器启动与停止由外部中断引脚(INT0或INT1)上的电平状态来共同控制
C/T----定时器或者计数器模式选择位
M1M0–工作方式选择位
每个定时器都有4中工作方式,它们由M1M0来设定

说明
1.寄存器是连接软硬件的媒介
2.在单片机中寄存器就是一段特殊的RAM存储器,一方面,寄存器可以存储和读取数据,另一方面,每一个寄存器背后都连接了一根导线,控制着电路的连接方式。
3.寄存器相当于一个复杂机器的”操作按钮”
7.定时器配置步骤
1.配置工作方式寄存器—TMOD
GATE=0,定时器仅受TCON寄存器中TRx(x=0,1)来控制
GATE=1,定时器TCON寄存器中TRx(x=0,1)和外部中断引(INT0或INT1)上的电平状态来共同控制。
C/T=1,为计数器模式;
C/T=0,为定时器模式。
M1M0一工作方式选择位;一共有4种工作方式,通常选择 方式1 和 方式2;即M1M0 = 0 1 或M1M0 = 1 0
2.选择定时器数值—— THx、TLx
(1) 51单片机定时器常常方式1或者方式2
(2)方式1可以装入的总数是65536
(3)方式2可以转入的总数是256
方式如:
TH0 = (65536 - 1000) / 256
TL0 = (65536 - 1000) % 256
TH0 = 0xfc
TL0 = 0x18
3.配置控制寄存器——TCON
TF1一定时器1溢出标志位。
当定时器1计满溢出时,由硬件使TF1置1,并且申请中断。进入中断服务程序后,由硬件自动清0。需要注意的是,如果使用定时器的中断,那么该位完全不用人为去操作,但是如果使用软件查询方式的话,当查询到该位置1后,就需要用软件清0。
TR1-定时器1运行控制位。
由软件清0关闭定时器1。当GATE=1,且INT1为高电平时,TR1置1启动定时器1;当GATE=0时,TR1置1启动定时器1。
TFO-定时器0溢出标志,其功能及操作方法同TF1。
TRO-定时器0运行控制位,其功能及操作方法同TR1.
IE1-外部中断1请求标志。
当IT1=0时,为电平触发方式,每个机器周期的S5P2采样lNT1引脚,若INT1脚为低电平,则置1,否则IE1清0。
当IT1=1时,INT1为跳变沿触发方式,当第一个机器周期采样到INT1为低电平时,则IE1置1。IE1=1,表示外部中断1正在向CPU申请中断。当CPU响应中断,转向中断服务程序时,该位由硬件清0。
IT1-外部中断1触发方式选择位。
IT1=0,为电平触发方式,引脚INT1.上低电平有效。
IT1=1,为跳变沿触发方式,引脚INT1.上的电平从高到低的负跳变有效。
IE0一外部中断0请求标志,其功能及操作方法同IE1。
IT0–外部中断0触发方式选择位,其功能及操作方法同IT1。
4.打开总中断——EA = 1
5.开启定时器中断ET0/1
6.配置中断优先级PT0/1
7.编写中断服务函数
附上代码
#include <REGX52.H>
sbit led=P1^0;
sbit shake=P1^1;
void Delay500ms() //@11.0592MHz
{
unsigned char i, j, k;
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Timer0Init(void) //100微秒@12.000MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x9C; //设置定时初值
TH0 = 0xFF; //设置定时初值
TF0 = 0; //清除TF0标志
TR0 = 1; //定时器0开始计时
ET0 = 1;//打开定时器0中断
EA = 1;//打开总中断
PT0 = 1;//中断优先级设置
}
//定时器中断函数模板
void Timer0_Routine() interrupt 1
{
static unsigned int T0Count;
TL0 = 0x9C; //设置定时初值
TH0 = 0xFF; //设置定时初值 上面是多少这里就重置多少
T0Count++;
if(T0Count>=1000)
{
led=0;
Delay500ms();
led=1;
Delay500ms();
}
}
void main()
{
Timer0Init();
while(1)
{
}
}