定时器配置
在使用定时器时,应该如何配置使其工作?其步骤如下(各步骤顺序可任意):
对 TMOD 赋值,以确定 T0 和 T1 的工作方式,如果使用定时器 0 即对 T0 配置,如果使用定时器 1 即对 T1 配置。 由于实际应用较多的是方式1和2,且定时器通常用方式1,串口通信常用方式2,所以下面只介绍方式1的详细信息 方式 1 的计数位数是 16 位,由 TL0 作为低 8 位,TH0 作为高 8 位,组成了 16 位加 1 计数器。其结构图如下所示: 计数初值与计数个数的关系为:X=2∧(16)-N。
根据所要定时的时间计算初值,并将其写入 TH0、TL0 或 TH1、TL1。 这里要用到辅助开发软件 例如方式一定时一毫秒计算得到fc18,则 另外也可以用2的十六次方65536减去1000(一毫秒)得到二进制fc18
如果使用中断,则对 EA 赋值,开放定时器中断。 EA相当于总开关
使 TR0 或 TR1 置位,启动定时/计数器定时或计数。 先介绍一下控制寄存器TCON TCON 的高 4 位用于控制定时/计数器的启动和中断申请。其格式如下: 由于低四位用于控制外部中断,这里不详述。
TF1(TCON.7):T1 溢出中断请求标志位。T1 计数溢出时由硬件自动置 TF1 为 1。CPU 响应中断后 TF1 由硬件自动清 0。T1 工作时,CPU 可随时查询 TF1 的状态。所以,TF1 可用作查询测试的标志。TF1 也可以用软件置 1 或清 0,同硬件置 1 或清 0 的效果一样。
TR1(TCON.6):T1 运行控制位。TR1 置 1 时,T1 开始工作;TR1 置 0 时, T1 停止工作。TR1 由软件置 1 或清 0。所以,用软件可控制定时/计数器的启动与停止。
TF0(TCON.5):T0 溢出中断请求标志位,其功能与 TF1 类同。
TR0(TCON.4):T0 运行控制位,其功能与 TR1 类同 最后附上代码用于实现定时器功能(灯以一秒的时间间隔闪烁)
#include "reg51.h"
#include "intrins.h"
typedef unsigned int u16;
typedef unsigned char u8;
sbit led=P2^0;
void Timer0Init()
{
TMOD|=0X01;
TH0=0XFC;
TL0=0X18;
ET0=1;
EA=1;
TR0=1;
}
void main()
{
Timer0Init();
}
void Timer0() interrupt 1
{
static u16 i;
TH0=0XFC;
TL0=0X18;
i++;
if(i==1000)
{
i=0;
led=~led;
}
}
|