51 单片机定时器是芯片内部自带的定时计数外设,核心原理是对内部机器周期脉冲进行累加计数,当计数值溢出之后就会置位溢出标志,还可以触发定时器中断,定时器既可以做精准定时,也可以切换成计数模式对外部脉冲进行计数,常用的经典 8051 内核单片机一般拥有定时器 0 和定时器 1,部分扩展型号还带有定时器 2,每个定时器都由 TH 高八位寄存器和 TL 低八位寄存器组成,工作模式由 TMOD 寄存器配置,启动停止由 TCON 寄存器里面的 TR 位控制,使用的时候需要提前给 TH 和 TL 装载初值,设定工作方式,开启中断之后就可以实现精准延时 定时触发任务,是单片机项目里做毫秒级定时 周期扫描 PWM 输出 波特率生成最基础的外设,掌握它的原理与使用是单片机入门必备知识点。
定时器基础寄存器说明
表格
| 寄存器名称 | 主要作用 | 关键位说明 |
|---|---|---|
| TMOD | 定时器工作模式配置 | 低四位管 T0 高四位管 T1 包含 GATE C T M1 M0 位 |
| TCON | 定时器控制与标志位 | TR0 TR1 是启动位 TF0 TF1 是溢出标志位 |
| TH0 TL0 | 定时器 0 计数寄存器 | TH0 存高八位 TL0 存低八位 |
| TH1 TL1 | 定时器 1 计数寄存器 | TH1 存高八位 TL1 存低八位 |
| IE | 中断允许寄存器 | EA 总中断 ET0 ET1 定时器中断使能位 |
四种工作模式介绍
模式 0 13 位计数模式,由 TL 低五位加上 TH 高八位组成 13 位计数器,现在项目很少使用。
模式 1 16 位计数模式,TL 八位加 TH 八位组成完整 16 位计数器,是最常用的定时模式,定时范围最大。
模式 2 8 位自动重装模式,TL 做计数 TH 保存重装初值,溢出之后自动把 TH 数值载入 TL,适合连续精准定时,串口波特率经常使用这个模式。
模式 3 拆分模式,定时器 0 拆成两个独立 8 位定时器,定时器 1 此时只能作为波特率发生器,使用场景比较特殊。
定时器初值计算方法
经典 51 单片机晶振常用 11.0592MHz 或者 12MHz,机器周期等于 12 除以晶振频率,以 12MHz 晶振举例,一个机器周期就是 1 微秒,16 位模式最大计数值是 65536,如果需要定时 1 毫秒,需要计数 1000 个机器周期,初值等于 65536 减去定时需要的计数值,算出初值之后拆成高八位和低八位,分别赋值给 TH 和 TL 寄存器。
使用操作步骤
第一步 确定晶振频率,选定定时器编号 T0 或者 T1,确定需要的定时时长。
第二步 计算定时初值,把初值拆分高八位低八位。
第三步 配置 TMOD 寄存器,设置定时器对应的工作模式,选择定时模式也就是 C T 位设置为 0。
第四步 给 TH TL 寄存器装载计算好的初值。
第五步 如果需要中断方式,打开 EA 总中断,打开对应的 ET 中断使能位。
第六步 置位 TR 启动定时器,等待计数溢出,溢出之后进入中断服务函数,在中断函数里面重新装载初值,编写需要周期执行的业务代码。
两种使用方式区别
查询方式 程序循环查询 TF 溢出标志位,标志置 1 之后处理任务,这种方式会占用 CPU,适合简单小项目。
中断方式 溢出自动进入中断服务程序,主程序可以同时运行其他任务,是工程项目最推荐的使用方式。
综合来看 51 单片机定时器的原理核心就是脉冲累加溢出,使用流程就是计算初值配置寄存器装载初值启动定时器,配合中断或者查询实现周期定时任务,写代码的时候重点注意初值计算 中断开启 模式选择这几个要点,就可以稳定实现定时功能。
【相关 FAQ】
问题 1 51 单片机定时器的原理与使用里面为什么模式 1 最常用
回答 1 51 单片机定时器的原理与使用当中模式 1 是 16 位计数结构,定时范围大,配置简单,大部分普通定时项目都会优先选用模式 1。
问题 2 51 单片机定时器的原理与使用中自动重装是哪个模式
回答 2 51 单片机定时器的原理与使用里模式 2 是 8 位自动重装模式,溢出之后自动载入初值,不需要在中断里面手动重装初值。
问题 3 51 单片机定时器的原理与使用初值计算和晶振有关系吗
回答 3 51 单片机定时器的原理与使用初值计算和晶振直接相关,晶振决定机器周期,晶振不同同样定时时长对应的初值也不一样。
【免责申明】
本文仅为 51 单片机定时器的原理与使用科普教学内容,不同厂商增强型 51 内核单片机寄存器定义可能存在差异,实际开发请对照对应芯片官方数据手册,本文不替代原厂技术文档,不构成硬件设计决策依据。


