定时器中断应用 · 12 大经典实训
本项目围绕 8051 单片机 Timer0/Timer1 与外部中断 INT0/INT1 展开,从基础定时闪烁、PWM 调光,到秒表、计数器、交通灯与数码管动态扫描,培养中断驱动的实时系统设计能力。
12 大经典玩法一览
由简到难,循序渐进掌握定时器中断 · 点击任意卡片开始学习
1只LED航标灯
定时20ms方波 · Timer0
8路LED定时循环
100ms移位 · Timer0
定时器PWM呼吸灯
占空比渐变 · Timer0
外部INT0控制LED开关
下降沿触发 · 电平翻转
INT1触发蜂鸣器报警
中断报警 · 定时停止
多中断协同灯光效果
Timer0+INT0+INT1
秒表计时数码管显示
00~59秒 · 动态显示
1秒精确定时
50ms×20 · 系统时钟
计数器模式外部脉冲计数
T0脚输入 · 计数显示
交通灯定时控制系统
状态机 · 红黄绿切换
定时器驱动数码管扫描
2ms动态扫描 · 显示1-8
定时触发串口数据发送
Timer1波特率 · Timer0定时
1只LED航标灯
基础实训1 项目简介
本项目是定时器中断入门的第一个实验。通过配置 STC89C52RC 的 Timer0 工作于 16 位定时器模式,每 10 毫秒产生一次中断,在中断服务程序中翻转 P1.0 连接的 LED,从而得到周期为 20 毫秒的方波信号,模拟航标灯闪烁效果。
掌握本项目后,学生将理解定时器初值计算、中断向量、中断服务程序编写以及主程序低功耗等待等核心概念,为后续复杂定时控制项目打下基础。
2 电路图
电路说明
- • LED 阳极通过限流电阻接 VCC,阴极接单片机 P1.0 引脚
- • 采用低电平点亮方式,P1.0=0 时 LED 亮,P1.0=1 时 LED 灭
- • Timer0 工作于 16 位定时器模式,每 10ms 中断一次
- • 限流电阻取 220Ω~1kΩ,保护 LED 不被过流损坏
3 程序内容(汇编语言)
;==================================================
; 项目名称:1只LED航标灯(定时20ms方波)
; 芯片型号:STC89C52RC 时钟频率:12MHz
; LED连接:P1.0(低电平点亮)
; 功能说明:定时器0每10ms中断,翻转P1.0
;==================================================
ORG 0000H ; 复位向量
LJMP MAIN ; 跳转到主程序
ORG 000BH ; 定时器0中断向量
LJMP T0_ISR ; 跳转到中断服务程序
LED BIT P1.0 ; LED控制位定义
MAIN: MOV TMOD, #01H ; 定时器0模式1:16位定时器
MOV TL0, #0F0H ; 定时器低字节初值
MOV TH0, #0D8H ; 定时器高字节初值
; 12MHz晶振,机器周期1μs,10ms = 10000个机器周期
; 初值 = 65536 - 10000 = 55536 = 0D8F0H
SETB TR0 ; 启动定时器0
SETB ET0 ; 允许定时器0中断
SETB EA ; 开放总中断
SETB LED ; LED初始熄灭
SJMP $ ; 主循环等待中断
T0_ISR: PUSH ACC ; 保护累加器
PUSH PSW ; 保护程序状态字
MOV TL0, #0F0H ; 重装定时器低字节初值
MOV TH0, #0D8H ; 重装定时器高字节初值
CPL LED ; 翻转P1.0,产生方波
POP PSW ; 恢复程序状态字
POP ACC ; 恢复累加器
RETI ; 中断返回
END ; 程序结束
4 评分标准
| 评分项目 | 分值 | 评分标准 |
|---|---|---|
| 定时器配置 | 30分 | TMOD、TH0、TL0、TR0设置正确 |
| 中断配置 | 20分 | ET0、EA开放,中断向量正确 |
| 程序编写 | 30分 | 初值重装、LED翻转、现场保护正确 |
| 功能实现 | 20分 | LED输出20ms方波,频率50Hz |
5 注意事项与安全规范
中断初值
进入中断服务程序后必须重新装入 TH0/TL0 初值,否则定时周期会偏离
现场保护
中断中使用的 ACC、PSW 等寄存器必须 PUSH/POP,防止主程序运行异常
中断返回
中断服务程序末尾必须使用 RETI 返回,不能用普通 RET