1. STC89C52定时器与计数器基础解析
STC89C52作为经典的51单片机增强型号,其定时器系统是嵌入式开发中最核心的硬件资源之一。与标准8051架构相比,STC89C52额外增加了T2定时器,形成T0、T1、T2三定时器架构。这三个定时器本质上都是16位加法计数器,通过特殊功能寄存器(SFR)进行配置和控制。
1.1 定时器与计数器的工作原理
定时器和计数器实质上是同一硬件模块的两种工作模式:
- 定时器模式:对内部机器周期进行计数(时钟源为晶振频率的1/12)
- 计数器模式:对外部引脚(P3.4/T0、P3.5/T1)的脉冲信号进行计数
以12MHz晶振为例:
- 机器周期 = 12 / 12MHz = 1μs
- 定时器每1μs自动加1
- 16位最大计数值65536,对应65.536ms定时范围
1.2 关键寄存器详解
TMOD(89H) - 模式控制寄存器:
c复制| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|----T1----|----T0----|
|GATE|C/T|M1|M0|GATE|C/T|M1|M0|
- GATE:门控位(0=软件启动,1=硬件启动)
- C/T:模式选择(0=定时器,1=计数器)
- M1/M0:工作方式选择
- 00:13位定时器(TL低5位+TH8位)
- 01:16位定时器(常用)
- 10:8位自动重装
- 11:T0分为两个8位定时器
TCON(88H) - 控制寄存器:
c复制| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|TF1|TR1|TF0|TR0|IE1|IT1|IE0|IT0|
- TFx:溢出标志(硬件置1,需软件清零)
- TRx:运行控制(1=启动)
- IEx/ITx:外部中断相关
2. 定时器配置实战
2.1 16位定时器初始化流程
以T0为例的典型配置代码:
c复制void Timer0_Init(void) //@12MHz
{
TMOD &= 0xF0; //清除T0设置位
TMOD |= 0x01; //设置T0为16位定时器
TH0 = 0xFC; //初始值
