一、定时器 / 计数器简介

设置等待时间,到达等待时间之后执行指定的硬件操作。

 

定时器最基本的功能就是定时,比如说定时发送串口数据,定时采集 AD 数据,如果将定时器和 IO 结合起来就可以实现非常丰富的功能,可以测量输入信号的脉冲宽度,可以产生 PWM 方波,定时器产生 PWM 控制电机状态是工业控制的普通。

 

二、定时器 / 计数器相关寄存器介绍

1、计数寄存器 TH 和 HL

 

T/C 是 16 位的,计数寄存器由 TH 高 8 位和 TL 低 8 位构成。

 

对应 T/C0 为 TH0 和 TL0, 对应 T/C1 为 TH1 和 TL1,定时器 / 计数器的初始值通过 TH0/TL0 和 TH1/TL1 设置。

 

2、定时器 / 计数器控制寄存器 TCON

 

 

3、T/C 的方式控制寄存器 TMOD

 

 


三、定时器的计数初始值计算

 

 

四、中断源及中断信号

 

 

五、参考代码

 

/****************************************************** 


功能描述:LED 会循环点亮 1 秒,熄灭 1 秒。


使用单片机内部定时器可实现准确延时    


******************************************************/


#include "reg52.h" 


// 此文件中定义了单片机的一些特殊功能寄存器


typedef unsigned int u16; // 对数据类型进行声明定义


typedef unsigned char u8;


sbit led=P2^0;      // 定义 P20 口是 led
 
void Timer0Init()


{


  TMOD|=0X01; // 选择为定时器 0 模式,工作方式 1(16 位),仅用 TR0 打开启动


  TH0=0XFC;   // 给定时器赋初值,定时 1ms  高 8 位


  TL0=0X18;   // 低 8 位(可用软件计算,公司参考上面)


  ET0=1;      // 允许定时器 0 中断


  EA=1;       // 打开总中断


  TR0=1;      // 打开定时器 0,启动 T/C0 运行


}
 


void main()


{


  Timer0Init();


  while(1);


}

 

void Timer0() interrupt 1    //1 是中断号


{


  static u16 i;


  TH0=0XFC;    // 计数器寄存高 8 位重新载入


  TL0=0X18;    // 计数器寄存低 8 位重新载入


  i++;


  if(i==1000)


  {


    i=0;


    led=~led;


  }


}