任务二 制作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 $$

资源预览图

任务二 制作1位倒计时器(2)(课件)-《单片机技术及应用》(高教版第四版) 同步精品课堂
1
任务二 制作1位倒计时器(2)(课件)-《单片机技术及应用》(高教版第四版) 同步精品课堂
2
任务二 制作1位倒计时器(2)(课件)-《单片机技术及应用》(高教版第四版) 同步精品课堂
3
任务二 制作1位倒计时器(2)(课件)-《单片机技术及应用》(高教版第四版) 同步精品课堂
4
任务二 制作1位倒计时器(2)(课件)-《单片机技术及应用》(高教版第四版) 同步精品课堂
5
任务二 制作1位倒计时器(2)(课件)-《单片机技术及应用》(高教版第四版) 同步精品课堂
6
所属专辑
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。