52单片机定时器2实战:从捕获到波特率生成的三种模式解析

发布时间:2026/7/16 1:53:03
52单片机定时器2实战:从捕获到波特率生成的三种模式解析 1. 定时器2基础与工作模式概述52单片机的定时器2是一个16位定时器/计数器相比51单片机新增的功能模块。通过T2CON寄存器的C/T2位可将其配置为定时器内部时钟驱动或计数器外部引脚P1.0触发。实际应用中定时器2有三种核心工作模式捕获模式用于精确测量外部脉冲宽度或周期自动重装模式支持递增/递减计数的周期性定时波特率发生器模式为串口通信提供时钟源这三种模式通过T2CON寄存器的CP/RL2、RCLK/TCLK等控制位进行切换。我在实际项目中发现模式选择需要根据具体应用场景决定测量脉冲宽度用捕获模式周期性任务用自动重装串口通信则必须使用波特率发生器模式。2. 捕获模式实战脉冲宽度测量2.1 捕获原理详解捕获模式的本质是抓拍时间戳。当检测到P1.1T2EX引脚出现下降沿时当前定时器计数值TH2TL2会被瞬间保存到RCAP2HRCAP2L寄存器组。通过记录两次捕获的时间差可计算出脉冲宽度。举个例子假设系统时钟12MHz定时器每1μs计数一次。第一次捕获值为0x1000第二次为0x1200则脉冲宽度为(0x1200-0x1000)*1μs512μs。2.2 寄存器配置步骤T2CON 0x09; // 定时器模式捕获功能使能 T2MOD 0x00; // 默认递增计数 RCAP2H 0; // 清零捕获寄存器 RCAP2L 0; TR2 1; // 启动定时器2关键点说明EXEN21时T2EX引脚下降沿触发捕获捕获事件会置位EXF2标志并产生中断实测发现输入信号需保持2个机器周期才能稳定捕获2.3 典型应用场景我在电机测速项目中就用到捕获模式通过霍尔传感器输出的方波计算转速。代码片段如下void Timer2_ISR() interrupt 5 { static uint16_t last_capture; uint16_t current (RCAP2H 8) | RCAP2L; rpm 60000000 / (current - last_capture); // 计算RPM last_capture current; }3. 自动重装模式精准定时器3.1 工作原理剖析自动重装模式下定时器溢出时会自动将RCAP2H/L的值重新装载到TH2/TL2。通过DCEN位可选择递增/递减计数方向这在PWM生成时特别有用。我做过一个对比实验使用传统定时器中断手动重装误差约±5μs而自动重装模式误差1μs因为省去了中断响应时间。3.2 配置实例生成100Hz方波的配置T2CON 0x00; // 自动重装模式 T2MOD 0x00; // 递增计数 TH2 0xD8; // 重装值55536 TL2 0xF0; // (65536-10000) RCAP2H 0xD8; // 10ms定时12MHz RCAP2L 0xF0; ET2 1; // 使能中断 TR2 1;3.3 进阶技巧通过T2EX引脚可以实现双缓冲更新。我在LED调光项目中这样使用主程序计算新的PWM占空比写入临时寄存器T2EX下降沿时自动同步到RCAP2寄存器 这种方式避免了重装过程中的数值冲突。4. 波特率发生器模式4.1 波特率计算奥秘波特率发生器模式下定时器2的时钟源变为系统时钟的1/2不同于其他模式的1/12。计算公式为波特率 Fosc / (32 * (65536 - (RCAP2H,RCAP2L)))例如11.0592MHz晶振要生成9600波特率uint16_t reload 65536 - (11059200/32/9600); RCAP2H reload 8; RCAP2L reload 0xFF;4.2 双波特率配置技巧定时器2的独特优势是可以为串口的发送和接收分别提供波特率T2CON 0x34; // TCLK1,RCLK1这在需要不同收发速率的特殊场合非常有用。不过实际测试发现当收发波特率差异3%时通信会不稳定。4.3 注意事项此模式下不要读写TH2/TL2寄存器波特率误差应控制在2%以内建议配合示波器校准实际输出5. 寄存器深度解析5.1 T2CON控制寄存器位名称功能说明7TF2溢出标志波特率模式下无效6EXF2外部触发标志5RCLK接收时钟选择4TCLK发送时钟选择3EXEN2外部使能2TR2启动控制1C/T2定时/计数选择0CP/RL2捕获/重装选择5.2 T2MOD模式寄存器位名称功能1T2OE输出使能0DCEN递减计数使能在调试中发现一个易错点T2MOD地址是0xC9但reg52.h头文件中未定义需要手动声明sfr T2MOD 0xC9;6. 项目实战经验6.1 多任务定时器方案在综合项目中我这样分配定时器资源定时器0系统心跳1ms定时器1PWM生成定时器2串口波特率捕获功能通过合理设置优先级三个定时器可以协同工作。关键是要注意波特率发生器模式下TF2不会置位此时不能用查询方式。6.2 抗干扰设计工业环境中T2EX引脚容易受干扰导致误捕获。我的解决方案硬件增加RC滤波10kΩ100nF软件设置最小脉冲宽度阈值启用数字滤波部分型号支持6.3 调试技巧用逻辑分析仪同时抓取T2引脚和中断信号在中断服务程序中设置调试引脚电平使用STC-ISP软件的定时器计算工具验证参数定时器2虽然功能强大但寄存器配置较为复杂。建议新手从自动重装模式开始熟悉逐步过渡到更复杂的应用场景。在实际开发中我通常会先画出时序图明确需求再编写初始化代码最后用示波器验证波形。这种系统化的调试方法能有效避免很多潜在问题。