任务二 制作1位倒计时器(2)(课件)-《单片机技术及应用》(高教版第四版) 同步精品课堂
2025-08-20
|
25页
|
93人阅读
|
0人下载
精品
内容正文:
任务二 制作1位倒计时器(2)
单片机技术及应用
同步精品课堂
高等教育出版社第 4 版
1
了解定时器 / 计数器的工作方式及特点
掌握定时 / 计数程序的编写方法
学会使用软件和定时器两种方式实现 1 位倒计时器
能够完成 1 位倒计时器的程序流程图绘制、编程、仿真调试和程序下载验证功能
定时器/计数器的工作方式1、2的原理和应用
定时/计数程序的初始化和中断服务函数编写
理解不同工作方式下定时器初值的计算和设置
合理编写中断服务函数,确保倒计时功能的准确实现
在前面的学习中,我们了解了定时器 / 计数器的基本概念和方式 0 的工作原理。
今天我们将继续深入学习定时器 / 计数器的其他工作方式,并利用它们来实现 1 位倒计时器,让数码管每秒显示数字 “9~0” 循环往复。
任务二 制作1位倒计时器 - 知识准备
当 M1、M0 为 01 时,定时器 / 计数器工作于方式 1,这时定时器 / 计数器被设置为一个 16 位加 1 计数器,结构框图如图所示。
定时器 / 计数器的工作方式 - 工作方式 1
方式1--16位计数器
任务二 制作1位倒计时器 - 知识准备
以 T0 为例,该计数器由高 8 位 TH0 和低 8 位 TL0 组成,其定时时间为 (65536 - T0 初值)× 机器周期。
定时器 / 计数器在方式 1 下的工作情况与在方式 0 下时的基本相同,差别只是计数器的位数不同。
定时器 / 计数器的工作方式 - 工作方式1
注意:方式0与方式1中,计数溢出后,若要重新开始计数,需要使用软件编程的方法对TH与TL的初值进行重装操作。
任务二 制作1位倒计时器 - 知识准备
应用经验
TL0 = (65536 - t) MOD 256
TH0 = (65536 - t) / 256
在方式 1 下,若石英晶体频率为 12 MHz,则一个机器周期为 12÷12 MHz = 1 μs,其最长定时时间为 2¹⁶ μs = 65536μs,若要取得 tμs 的定时,需要对 TH0 和 TL0 做如下设置:
C51编程如下:
TL0 = - t % 256
TH0 = - t / 256
任务二 制作1位倒计时器 - 知识准备
工作方式 1 的 C51 编程示例
#include <reg51.h>
void main() {
TMOD = 0x01; // 设置T0为方式1
TH0 = (65536 - 10000) / 256; // 定时10000μs
TL0 = (65536 - 10000) % 256;
TR0 = 1; // 启动T0
while (1) {
if (TF0 == 1) {
TF0 = 0; // 清溢出标志
TH0 = (65536 - 10000) / 256; // 重装初值
TL0 = (65536 - 10000) % 256;
// 这里可以添加需要定时执行的代码
}
}}
任务二 制作1位倒计时器 - 知识准备
当 M1、M0 为 10 时,定时器 / 计数器处于工作方式 2,这时定时器 / 计数器的等效框图如图所示(以 T0 为例)。
定时器 / 计数器的工作方式 - 工作方式 2
方式2--8位自动重装时间常数计数器
任务二 制作1位倒计时器 - 知识准备
定时器 / 计数器方式 2 为自动恢复初值的 8 位定时器 / 计数器。TL0 与 TH0 同时存放时间常数初值,当 TL0 计数溢出时,首先将 TF0 置 1,然后自动将 TH0 中预存的初值送至 TL0,使 TL0 从初值开始重新计数。
定时器 / 计数器的工作方式 - 工作方式2
优势:这种工作方式省去了用户软件重装初值的程序,可以更加精确地确定定时时间。
任务二 制作1位倒计时器 - 知识准备
应用经验
TL0 = 256- t
TH0 = 256- t
在方式 2 下,若石英晶体频率为 12 MHz,则一个机器周期为 12÷12 MHz = 1 μs,其最长定时时间为 2⁸ μs = 256μs,若要取得 tμs 的定时,需要对 TH0 和 TL0 做如下设置:
C51编程如下:
TL0 = - t
TH0 = - t
任务二 制作1位倒计时器 - 知识准备
工作方式 2 的 C51 编程示例
#include <reg51.h>#define uint unsigned int
sbit LED = P1^0;
void delay1s();
void main() {
TMOD = 0x02; // 设置T0为定时器方式2
TH0 = 256 - 250; // 设置定时器初值,定时250μs
TL0 = 256 - 250;
while (1) {
LED = ~LED;
delay1s(); // LED每秒闪烁1次
}}
void delay1s() {
uint i;
for (i = 0; i < 4000; i++) {
TR0 = 1; // 启动定时器T0
while (!TF0); // 查询计数是否溢出,即定时250 μs时间到,TF0 = 1
TF0 = 0; // 250μs定时时间到,将定时器溢出标志位TF0清零
TR0 = 0; // 关闭定时器T0
}}
任务二 制作1位倒计时器 - 知识准备
定时 / 计数程序的编写方法-- 初始化程序
a. 设置工作方式(TMOD = ?)。
b. 设置时间常数(定时器工作方式)或计数值(计数器工作方式)TH0、TL0(或 TH1、TL1)。
c. 开总中断(EA = 1)。
d. 开定时 / 计数中断(ET0 = 1 或 ET1 = 1)。
e. 启动定时 / 计数器工作(TR0 = 1 或 TR1 = 1)。
① 初始化程序的编写方法
任务二 制作1位倒计时器 - 知识准备
定时 / 计数程序的编写方法-- 程序举例
用定时器 0(方式 1)定时 10ms(假设单片机晶振频率为 12 MHz)
void main(void) {
TMOD = 0x01; // 采用定时器0方式1
TH0 = -10000 / 256; // 定时器时间常数高8位
TL0 = -10000 % 256; // 定时器时间常数低8位
EA = 1; // 开总中断
ET0 = 1; // 开定时器0中断
TR0 = 1; // 启动定时器0开始定时
}
任务二 制作1位倒计时器 - 知识准备
定时 / 计数程序的编写方法 - 中断服务函数
② 中断服务函数的编写方法
程序举例:定时器 0 中断服务函数每 20ms 产生一次中断
/*---------------------定时器0中断服务函数---------------*/
void timer0(void) interrupt 1 using 0
// interrupt 1定时器0中断,using 0采用内部寄存器组R0
{
TH0 = -20000 / 256; // 重装定时器时间常数初值
TL0 = -20000 % 256;
.......
}
任务二 制作1位倒计时器 - 知识准备
定时 / 计数程序的编写方法 - 中断服务函数
“interrupt 1” 表示该中断服务函数为定时器 0 中断,因为定时器 0 的中断号为 1,
“using 0” 表示中断服务函数采用内部寄存器组 R0,单片机内部共有 R0~R3 四个寄存器组,不同的中断服务函数最好采用不同的寄存器组。
在定时器 0 方式 1 下,每中断一次需要重新装载定时器 0 的时间常数初值,为下一次中断做好准备。
任务二 制作1位倒计时器 - 任务实施
工具及材料准备:
工作准备:
在1位LED数码管上每秒倒计时,显示数字“9~0”,循环往复
任务需求
① 软件:Protel DXP2004、Proteus 7.4、Keil uVision2、EasyPRO Programmer、流程图绘制软件。
② 硬件:计算机 1 台、编程器 1 台、最小系统电路板 1 块、1 位数码管显示模块电路板 1 块、杜邦线 1 条、电池盒 1 个。
穿好工作服,戴好防静电手环,穿绝缘胶鞋。
清洁工作台面,清理工作区域,工具、仪器仪表摆放整齐有序。
任务二 制作1位倒计时器 - 任务实施
方案一
方案二
在任务一的基础上,本任务继续采用上一任务的硬件电路,完成倒计时功能。
任务分析
采用软件实现。
思路:每显示一个字符,然后用延时函数延时 1s,继续显示下一个字符。
采用定时器定时实现。
思路:用定时器完成精确定时,先初始化定时器,编写定时器中断函数,每 50 ms 产生一次中断,中断 20 次就是 1s。
任务二 制作1位倒计时器 - 拓展内容
介绍定时器在其他场景下的应用,如 PWM 信号生成、电机调速等。
定时器其他应用
倒计时显示优化
可以考虑在倒计时过程中添加闪烁效果、不同颜色显示等,提升显示的趣味性。
随堂检测1
在定时 / 计数程序的初始化程序中,设置工作方式的寄存器是什么?
答案:TMOD 寄存器。
在单片机定时器实现 1 位倒计时器的程序中,定时器 0 每中断多少次为 1s?
答案:20 次。
随堂检测2
定时器 / 计数器工作方式 1 下,若要定时 20000μs,石英晶体频率为12 MHz,
TH0 和 TL0 应如何设置?
答案:TL0 = (65536 - 20000) MOD 256,TH0 = (65536 - 20000) / 256。
定时器 / 计数器工作方式 2 的特点是什么?
答案:定时器 / 计数器方式 2 为自动恢复初值的 8 位定时器 / 计数器。TL0 与 TH0 同时存放时间常数初值,当 TL0 计数溢出时,首先将 TF0 置 1,然后自动将 TH0 中预存的初值送至 TL0,使 TL0 从初值开始重新计数。这种工作方式省去了用户软件重装初值的程序,可以更加精确地确定定时时间。
随堂检测3
简述定时器 / 计数器工作方式 1 和方式 2 的区别。
答案:
① 计数器位数:方式 1 是 16 位加 1 计数器,由高 8 位 TH0 和低 8 位 TL0 组成;方式 2 是自动恢复初值的 8 位定时器 / 计数器。
② 初值重装:方式 1 计数溢出后,若要重新开始计数,需要使用软件编程的方法对 TH 与 TL 的初值进行重装操作;方式 2 中 TL0 计数溢出时,自动将 TH0 中预存的初值送至 TL0,省去了用户软件重装初值的程序。
③ 定时时间计算:方式 1 的定时时间为 (65536 - T0 初值)× 机器周期;方式 2 若石英晶体频率为 12MHz,要取得 tμs 的定时,TL0 = 256 - t,TH0 = 256 - t 。
④ 最长定时时间:方式 1 若石英晶体频率为 12MHz,最长定时时间为 2¹⁶μs = 65536μs;方式 2 若石英晶体频率为 12MHz,最长定时时间为 2⁸μs = 256μs。
1
分组讨论,讨论软件实现和定时器实现 1 位倒计时器的优缺点。分析在定时器中断服务函数中,除了更新计时数值,还可以添加哪些功能。
3. 任务实施
1. 定时器 / 计数器的工作方式
任务二 制作1位倒计时器(2)
2. 定时 / 计数程序的编写方法
1. 初始化程序
2. 中断服务函数
1. 工作方式 1
2. 工作方式 2
任务需求
任务分析
感谢观看
25
$$
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。