好的,继续输出第5讲。这一讲是定时器/计数器,是单片机实现精确延时、定时控制、波特率生成的核心功能。
📚 第5讲:定时器/计数器(6学时)
【PPT 第1页】封面
- 课程名:单片机原理与应用 —— AI8051U 教学版
- 本讲:第5讲 定时器/计数器
- 主讲人:__________________
【PPT 第2页】本讲目标
课件要点:
- 理解定时器与计数器的区别
- 掌握定时器0/1的模式0(16位自动重装载)
- 掌握定时器0/1的模式1(16位不可重装载)
- 掌握定时器0/1的模式2(8位自动重装载)
- 掌握定时器0模式3(不可屏蔽中断)
- 掌握定时器计算公式
- 理解1T模式与12T模式的区别
【PPT 第3页】定时器/计数器概念
课件要点:
- 定时器:对内部系统时钟计数,用于产生精确的定时时间
- 计数器:对外部脉冲输入计数,用于统计外部事件次数
- Ai8051U 有 6个定时器(T0/T1/T2/T3/T4/T11)
- T0/T1 是基础定时器,与8051兼容
- 定时器0有两种计数速率:
- 12T模式:每12个时钟加1(与传统8051相同)
- 1T模式:每个时钟加1(速度是传统8051的12倍)
图示说明文字:
┌──────────────────────────┐
│ 定时器/计数器 │
│ │
系统时钟 ──→ │ 分频(12T/1T) │ ──→ │ 计数器 │
│ │
外部脉冲 ──→ │ │ ──→ │ 计数器 │
└──────────────────────────┘
定时器 = 对内部时钟计数(产生定时)
计数器 = 对外部脉冲计数(统计事件)
依据:AI8051U手册「定时器/计数器,16位自动重装载定时器 + 8位预分频 = 24位」
【PPT 第4页】定时器0的控制寄存器(TMOD)
课件要点:
TMOD(89H):
B7B6B5B4B3B2B1B0
T1_GATET1_C/TT1_M1T1_M0T0_GATET0_C/TT0_M0T0_M0
寄存器位说明:
- T0_GATE(TMOD.3):定时器0门控位。0=TR0直接控制,1=需INT0和TR0同时为1才计数
- T0_C/T(TMOD.2):定时器0计数/定时选择。0=定时模式(对系统时钟计数),1=计数模式(对外部脉冲P3.4/T0计数)
- T0_M1/T0_M0(TMOD.1/0):定时器0模式选择
定时器0模式选择:
| T0_M1 |
T0_M0 |
模式 |
| 0 |
0 |
模式0:16位自动重装载 |
| 0 |
1 |
模式1:16位不可重装载 |
| 1 |
0 |
模式2:8位自动重装载 |
| 1 |
1 |
模式3:不可屏蔽中断16位自动重装载 |
依据:AI8051U手册「定时器/计数器,16位自动重装载定时器 + 8位预分频 = 24位」
【PPT 第5页】定时器控制寄存器(TCON)
课件要点:
TCON(88H):
B7B6B5B4B3B2B1B0
TF1TR1TF0TR0IE1IT1IE0IT0
寄存器位说明(定时器相关部分):
- TF0(TCON.5):定时器0溢出标志。计数溢出时自动置1,需软件清0
- TR0(TCON.4):定时器0运行控制位。1=启动,0=停止
- TF1(TCON.7):定时器1溢出标志
- TR1(TCON.6):定时器1运行控制位
依据:AI8051U手册「定时器/计数器,16位自动重装载定时器 + 8位预分频 = 24位」
【PPT 第6页】辅助寄存器(AUXR)—— 1T/12T选择
课件要点:
AUXR(8EH):
B7B6B5B4B3B2B1B0
T0x12T1x12UART_M0x6T2RT2_C/TT2x12EXTRAMS1BRT
寄存器位说明:
- T0x12(AUXR.7):定时器0速度控制位
- 0:12T模式(FOSC/12,与传统8051相同)
- 1:1T模式(FOSC/1,速度快12倍)
- T1x12(AUXR.6):定时器1速度控制位
- 0:12T模式(FOSC/12)
- 1:1T模式(FOSC/1)
依据:AI8051U手册「定时器/计数器,16位自动重装载定时器 + 8位预分频 = 24位」
【PPT 第7页】定时器0模式0:16位自动重装载(重点)
课件要点:
- 模式0为16位自动重装载模式
- 如果启动8位预分频(TM0PS),则成为24位定时器
- 当GATE=0时,TR0=1则定时器计数
- GATE=1时,允许由外部输入INT0控制定时器0(可实现脉宽测量)
- 当C/T=0时,对内部系统时钟计数(定时方式)
- 当C/T=1时,对外部脉冲输入P3.4/T0计数(计数方式)
- 两个隐藏寄存器 RL_TH0 和 RL_TL0 实现自动重装载:
- 当TR0=0时,对TL0/TH0写入会写入RL_TL0/RL_TH0
- 当TR0=1时,对TL0/TH0写入实际上是写入RL_TL0/RL_TH0
- 溢出时自动将RL_TH0/RL_TL0内容装入TH0/TL0
图示说明文字:
定时器0模式0(16位自动重装载):
┌──────────────────────────────┐
系统时钟 ──→ │ TM0PS预分频 │ ──→ │ 16位计数器 │
│ │ │ TH0/TL0 │
└────────────┘ └─────┬────┘
│ 溢出
▼
置位TF0 → 产生中断
│
自动重装 ← ─┘
(RL_TH0,RL_TL0)
依据:AI8051U手册「定时器/计数器,16位自动重装载定时器 + 8位预分频 = 24位」
【PPT 第8页】定时器0模式0计算公式
课件要点:这是本讲重点,学生必须掌握
定时器0模式0(16位自动重装)计时公式:
1T模式:
\text{定时器周期}=\frac{65536-[\text{TH0,TL0}]}{\text{SYSclk}/(\text{TM0PS}+1)} \quad (\text{自动重载})
12T模式:
\text{定时器周期}=\frac{65536-[\text{TH0,TL0}]}{\text{SYSclk}/(\text{TM0PS}+1)}\times 12 \quad (\text{自动重载})
例题:系统时钟 SYSclk=11.0592MHz,TM0PS=0(不分频),1T模式,定时1ms
\text{定时器周期}=\frac{65536-[TH0,TL0]}{11059200/1}
→ $65536-[TH0,TL0] = 11059200 \times 0.001 = 11059.2 \approx 11059$
→ [TH0,TL0] = 65536 - 11059 = 54477 = 0xD4CD
→ TH0=0xD4, TL0=0xCD
依据:AI8051U手册「定时器/计数器,16位自动重装载定时器 + 8位预分频 = 24位」
【PPT 第9页】示例:定时器0定时1ms(模式0)
课件要点:
- 系统频率 11.0592MHz,1T模式
- 配置TMOD为模式0(M1M0=00)
- 计算TH0/TL0初值
示例代码:
// 定时器0定时1ms实验
// 测试工作频率为11.0592MHz
#include "Ai8051U.H"
#include "intrins.h"
void main()
{
// 配置P1口为准双向口(LED输出)
P1M0 = 0x00;
P1M1 = 0x00;
// 配置定时器0为模式0(16位自动重装载)
TMOD &= 0xF0; // 清除T0相关位
// T0_GATE=0, T0_C/T=0(定时), T0_M1=0, T0_M0=0(模式0)
// 设置1T模式(AUXR.7/T0x12=1)
AUXR |= 0x80; // T0x12 = 1,1T模式
// 设置定时器初值:1ms @ 11.0592MHz
// 65536 - 11059 = 54477 = 0xD4CD
TH0 = 0xD4;
TL0 = 0xCD;
// 启动定时器0
TR0 = 1;
while(1);
}
依据:AI8051U手册「定时器/计数器」章节
【PPT 第10页】定时器0中断实验:LED闪烁
课件要点:
- 使用定时器0中断来实现精确的LED闪烁
- 中断频率 = 1ms,每500次翻转LED(即500ms亮/500ms灭)
- 演示定时器中断在实时控制中的应用
示例代码:
// 定时器0中断控制LED闪烁
// 测试工作频率为11.0592MHz
#include "Ai8051U.H"
#include "intrins.h"
unsigned int tick_count; // 计数变量
void main()
{
// 配置P1口为准双向口(LED输出)
P1M0 = 0x00;
P1M1 = 0x00;
// 配置定时器0为模式0(16位自动重装载)
TMOD &= 0xF0;
// T0_GATE=0, T0_C/T=0, T0_M1=0, T0_M0=0
// 设置1T模式
AUXR |= 0x80; // T0x12 = 1,1T模式
// 设置定时器初值:1ms @ 11.0592MHz
TH0 = 0xD4;
TL0 = 0xCD;
// 使能定时器0中断
ET0 = 1; // 使能定时器0中断
EA = 1; // 开总中断
// 启动定时器0
TR0 = 1;
while(1); // 主循环空转,中断负责处理
}
// 定时器0中断服务程序(中断号1)
void timer0_isr() interrupt 1
{
tick_count++;
if (tick_count >= 500) // 500ms = 500次×1ms
{
tick_count = 0;
P1 = ~P1; // 翻转LED
}
}
图示说明文字:
时序图:
1ms ── 定时器中断 ──> tick_count++
... 重复500次 ...
tick_count == 500 → 翻转LED状态 → tick_count=0
LED亮500ms → 灭500ms → 亮500ms → ...
依据:AI8051U手册「定时器/计数器」章节
【PPT 第11页】定时器0模式1:16位不可重装载
课件要点:
- 模式1为16位不可重装载模式
- 由TL0的8位和TH0的8位构成
- TL0溢出向TH0进位,TH0计数溢出置位TF0
- 溢出后不会自动重装载,需软件重新设置初值
适用场景:需要测量脉冲宽度、单次定时等场合
依据:AI8051U手册「定时器/计数器」章节
【PPT 第12页】定时器0模式2:8位自动重装载
课件要点:
- 模式2为8位自动重装载模式
- TL0溢出不仅置位TF0,而且将TH0的内容重新装入TL0
- TH0内容由软件预置,重装时TH0内容不变
- 适合产生固定频率的定时(如波特率发生器)
计算:
\text{定时器周期}=\frac{256-\text{TH0}}{\text{SYSclk}/(\text{TM0PS}+1)} \quad (1T)
依据:AI8051U手册「定时器/计数器」章节
【PPT 第13页】定时器0模式3:不可屏蔽中断(高级)
课件要点:
- 模式3与模式0一样是16位自动重装载
- 特殊:只需允许 ET0(IE.1),不需要允许 EA(IE.7)就能打开定时器0中断
- 此中断是不可屏蔽的,优先级最高
- 不能被任何中断打断,且不受EA或ET0控制
- 适合实时操作系统节拍器应用
注意:
当定时器0工作在模式3时,不需要允许EA/IE.7,只需允许ET0/IE.1就能打开中断。一旦该中断被打开,优先级就是最高的,它不能被其他任何中断打断,而且不受EA或ET0控制,清零EA或ET0都不能关闭此中断。
依据:AI8051U手册「定时器/计数器」章节
【PPT 第14页】定时器1(介绍)
课件要点:
- 定时器1与定时器0类似,也有模式0/1/2
- 模式0:16位自动重装载
- 模式1:16位不可重装载
- 模式2:8位自动重装载
- 速度控制由 AUXR.6/T1x12 控制
- 常用于串口波特率发生器
计算公式:
模式0(16位自动重装)1T:
\text{定时器周期}=\frac{65536-[TH1,TL1]}{\text{SYSclk}/(\text{TM1PS}+1)}
依据:AI8051U手册「定时器/计数器」章节
【PPT 第15页】定时器预分频寄存器(TM0PS/TM1PS)
课件要点:
- TM0PS(地址7EFEA0H):定时器0的8位预分频寄存器
- TM1PS(地址7EFEA1H):定时器1的8位预分频寄存器
- 位于 XFR区域,访问前必须使能 EAXFR(P_SW2.7=1)
- 当启动预分频时,定时器扩展为24位定时器
访问方法:
EAXFR = 1; // 允许访问扩展的XFR
TM0PS = 0x00; // 设置定时器0预分频为0(不分频)
依据:AI8051U手册「定时器/计数器」章节
【PPT 第16页】定时器计算综合练习
课件要点:本讲的核心练习
练习1:SYSclk=24MHz,1T模式,TM0PS=0,定时0.5ms,求TH0/TL0
定时器周期 = (65536-[TH0,TL0]) / (24000000/1) = 0.0005s
→ 65536-[TH0,TL0] = 24000000 × 0.0005 = 12000
→ [TH0,TL0] = 65536 - 12000 = 53536 = 0xD120
→ TH0=0xD1, TL0=0x20
练习2:SYSclk=11.0592MHz,12T模式,TM0PS=0,定时5ms,求TH0/TL0
定时器周期 = (65536-[TH0,TL0]) / (11059200/1) × 12 = 0.005s
→ 65536-[TH0,TL0] = 11059200 × 0.005 / 12 = 4608
→ [TH0,TL0] = 65536 - 4608 = 60928 = 0xEE00
→ TH0=0xEE, TL0=0x00
依据:AI8051U手册「定时器/计数器」章节
【PPT 第17页】本讲小结与思考题
课件要点:
- 掌握定时器0/1的模式0/1/2/3
- 掌握1T/12T模式的配置
- 掌握定时器初值计算方法
- 掌握定时器中断的使用
思考题:
- 定时器和计数器有什么区别?
- 1T模式和12T模式有什么区别?哪种计时间隔更精确?
- 定时器0模式0和模式1有什么区别?模式0有什么优势?
- 如何计算定时器初值?给出SYSclk=24MHz、1T、定时2ms的TH0/TL0值。
- 定时器0模式3有什么特殊之处?适合什么应用?
信息来源:
第5讲内容已完整输出。
当前已完成:
- ✅ 第1讲:单片机基础与AI8051U认识(4学时)
- ✅ 第2讲:开发环境搭建与程序烧录(4学时)
- ✅ 第3讲:I/O口与最小系统(6学时)
- ✅ 第4讲:中断系统(6学时)
- ✅ 第5讲:定时器/计数器(6学时)
待输出:
- 🔜 第6讲:串口通信(6学时)
- 🔜 第7讲:存储器与特殊功能寄存器(4学时)
- 🔜 第8讲:综合实验(6学时)
- 🔜 第9讲:课程总结与扩展(6学时)
请问需要继续输出第6讲(串口通信)吗?
🔍 搜索 "继续输出第5讲"
📌 相关论坛讨论
- 能按教学规律,按知识点,生成 AI8051U的大学教学 PPT给老师用吗
- 视频教学:《32位8051单片机原理及应用》,一等奖2万, 送实验箱; 冲哥版
- ZXC-0168 STC8A8K64D4单片机 第13讲 继电器控制单路闪烁输出(延时方式)
⏱️ 查找用时 1.4s | 总回答用时 42.9s