任务引入
在我们的手机、计算机里都有数字时钟,它计时精确、容易识别。那么数字时钟是如何工作的呢?本次任务我们来一起制作数字时钟吧?
任务目标
知识目标:1.进一步理解中断的概念。
2.理解定时中断的产生原理和硬件关系。
3.掌握定时中断设置方式和过程。
技能目标:1.能独立编写数字时钟的流程图和程序。
2.会对数字时钟程序进行调试。
情感目标:1.在制作任务过程中养成严谨的工作态度。
2.在任务实施过程中加强沟通,团队合作。
3.逐步培养学生建立工作的质量意识、安全意识。
任务描述
1.利用开发板,用4位数码管设计数字时钟:
1)数码管左2位为分钟显示,右2位为秒钟显示,使时钟进行1s计时工作。
2)计时从00.00开始,当秒钟为59s加1s时,分钟加一,秒钟清0;当分钟为59min加1min时,分钟和秒钟同时清0,从00.00重新计时。
2.绘制按键4位数码管计时的工作流程图和编写相关程序。
3.下载hex文件烧入单片机,完成联机调试。如图5-9所示为数字时钟显示效果。
图5-9 数字时钟显示效果
任务实施
一、任务分析
本次任务我们制作分秒时钟。其中显示数码管共4个,分别显示:分(十位)、分(个位)、秒(十位)、秒(个位),本任务利用定时中断控制进行设计制作。
设计思路:系统采用定时中断控制,中断定时50ms,首先对系统进行中断初始化:定时器初始化、显示初始化。中断程序:一秒中断进入中断程序对分秒进行检查加一,设计控制秒个位最大显示为9,秒的十位最大显示5,分的个位最大显示9,分的十位最大显示5。因此整个程序分成:程序中断初始化、显示子程序、中断子程序。
二、画程序流程图
根据任务要求画出程序流程图,如图5-10所示。
图5-10 程序流程图
三、编写程序
根据流程图和相关指令编写程序。
四、联机调试1)打开Keil软件,输入调试程序并编译生成hex文件。2)将hex文件通过双龙下载器烧入单片机并联机调试。
知识链接
一、相关知识学习
1.定时器/计数器概述
定时器/计数器是单片机硬件结构中一个重要组成部分,在单片机构成的测控系统中,常要用定时器/计数器,例如定时检测某个物理参数;按一定的时间间隔进行某种控制,对某个事件发生的次数加以计数等。硬件构成的定时器/计数器在使用上有不占用CPU时间的优点,提高了CPU的效率。
MCS—51系列单片机内部的定时器/计数器有2个(AT89S52有3个),分别称为T0、T1。它们都是十六位加1计数结构,分别由TH0和TL0及TH1和TL1两个8位计数器构成,每个定时器/计数器都具有定时和计数两种功能。定时器/计数器通过编程的方法由定时器/计数器方式寄存器TMOD设定定时器的工作方式,由定时器/计数器控制寄存器TCON启动和停止定时器/计数器,并控制其状态。
(1)定时原理
定时原理如图5-11所示。
图5-11 定时原理
定时器/计数器用作定时时,计数脉冲来自单片机的内部,每过—个机器周期产生一个计数脉冲,计数器加1,直到计数器计满溢出。由于一个机器周期由12个时钟周期组成,且时钟振荡频率是固定的,则在已知振荡频率和计数器初值时,可以计算出定时时间。计数器的频率是时钟振荡频率的1/12。
(2)计数原理
计数原理如图5-12所示。
图5-12 计数原理
定时器/计数器用作计数时,计数脉冲来自单片机的外部。外部输入脉冲每来一个负跳变(1→0),计数器加1,因此计数功能实质就是对外来脉冲进行计数。
2.定时器/计数器的控制
(1)方式寄存器TMOD
定时器/计数器的方式寄存器TMOD是8位的专用寄存器见表5-8,字节地址为89H,复位数据为00H,高4位控制T1、低4位控制T0。TMOD只能进行字节操作,不能进行位操作。
表5-8 方式寄存器TMOD
C/T:计数器或定时器选择位。1—计数器;0—定时器。GATE:门控信号。
1——定时器/计数器的启动受到双重控制,即要求TR0/TRl和
同时为高;
0——定时器/计数器的启动仅受TR0或TR1控制。
M1和M0:工作方式选择位,见表5-9。
表5-9 定时器/计数器的工作方式
(2)定时器/计数器控制寄存器TCON
TCON中与中断有关的各位已介绍,其他位的含义如下。
TR0——定时器/计数器0启动控制位。1——启动计数;0——停止计数。
TR1——定时器/计数器1启动控制位。1——启动计数;0——停止计数。
TCON复位后清0,定时器/计数器需受到软件控制才能启动计数,当计数寄存器计满时置位TF=1,即溢出中断请求标志。
3.定时器/计数器的工作方式
(1)方式0
当TMOD中M1M0=00时,定时器/计数器工作在方式0,如图5-13所示为T0方式0逻辑结构。
图5-13 T0方式0逻辑结构
方式0为13位的定时器/计数器,由TH提供高8位,TL提供低5位的计数值,满计数值213,但启动前可以预置计数初值。当时,定时器/计数器为定时器,以振荡源12分频的信号作为计数脉冲;当时,则定时器/计数器为计数器,对外部脉冲输入端TO或T1输入的脉冲计数。
定时器/计数器启动后立即加1计数,当13位计数满时,TH向高位进位,此进位将中断溢出标志TF置1,产生中断请求,表示定时时间到或计数次数到。若定时器/计数器开中断(ET=1)且CPU开中断(EA=1),则当CPU转向中断子程序时,TF自动清0。
计数个数与计数初值的关系为:X=213-N(X——计数初值;N——计数个数,下同)
(2)方式1
当TMOD中M1M0=01时,定时器/计数器工作在方式1,如图5-14所示为T0方式1逻辑结构。
方式1与方式0基本相同。唯一区别在于计数寄存器的位数是16位,由TH和TL存储器各提供8位。
图5-14 T0方式1逻辑结构
计数个数与计数初值的关系为:X=216-N。
(3)方式2
当TMOD中M1M0=10时,定时器/计数器工作在方式2。方式2是8位的可自动重装载的定时器/计数器,如图5-15所示为T0方式2逻辑结构。
图5-15 T0方式2逻辑结构
在方式0和方式1中,当计数满后,若要进行下一次定时/计数,须用软件向TH和TL重装预置计数初值。方式2中TH和TL被当作两个8位计数器,计数过程中,TH寄存8位初值并保持不变,由TL进行8位计数。计数溢出时,除产生溢出中断请求外,还自动将TH中初值重装到TL,即重装载。工作方式2特别适合于用作较精确的脉冲信号发生器。
计数个数与计数初值的关系为:X=28-N。
(4)方式3
方式3只适合于定时器/计数器O,如图5-16所示为T0方式3逻辑结构。
图5-16 T0方式3逻辑结构
当定时器/计数器O工作在方式3时,THO和TLO成为两个独立的计数器。这时TL0可作定时器/计数器,占用定时器/计数器0在TCON和TMOD寄存器中的控制位和标志位;而THO只能作定时器用,占用定时器/计数器1的资源TRl和TFl。在这种情况下,定时器/计数器1仍可用于方式0、1、2,但不能使用中断方式。
只有将定时器/计数器1用作串行口的波特率发生器时,定时器/计数器O才工作在方式3,以便增加一个定时器。
4.定时器/计数器的初始化
(1)初始化步骤
在使用定时器/计数器前,应对它进行编程初始化,主要是对TCON和TMOD编程,计算和装载定时器/计数器的计数初值。一般完成以下几个步骤:
1)确定定时器/计数器的工作方式——编程TMOD寄存器;
2)计算定时器/计数器中的计数初值,并装载到TH和TL;
3)定时器/计数器在中断方式工作时,须开CPU中断和源中断——编程IE寄存器;
4)启动定时器/计数器——编程TCON中TRl或TR0位。
(2)计数初值的计算
1)定时器的计数初值。定时方式时,定时时间t=(M-X)×Tosc;(M——最大计数值;Tosc——机器周期),初值X=M-t/Tosc。
在定时器方式下,定时器/计数器是对机器周期脉冲计数的,若fosc=12MHz,一个机器周期为12/fosc=1μs,所以
方式0:13位定时器最大定时间隔=213×1μs=8.192ms;
方式1:16位定时器最大定时间隔=213×1μs=65.536ms;
方式2:8位定时器最大定时间隔=28×1μs=256μs。
若使定时器/计数器工作在定时器方式1,要求定时1ms,求计数初值。设计数初值为X,则有
(216-X)×1μs=1000μs或X=216-1000。
2)计数器的计数初值。计数方式时,计数模值=M-X;初值X=M-计数模值。
在计数器方式下:(www.daowen.com)
方式0:13位计数器的满计数值:213=8192;
方式1:16位计数器的满计数值:216=65536;
方式2:8位计数器的满计数值:28=256。
若使定时器/计数器工作在计数器方式2,要求计数10个脉冲的计数初值。如设计初值为X,则有
28-X=10,
即 X=28-10。
二、应用举例
1.定时器实例
单片机晶振频率为6MHz,要求使用定时器1以方式1产生周期为100ms的等宽方波连续脉冲,并由P1.0输出。
计算计数初值:(216-X)×2μs=50000μs。
求解得:X=40536,表示为二进制为9E58H。
高8位放入TH1,即TH1=9EH;
低8位放入TL1,即TL1=58H。
TMOD寄存器初始化:M1M0=01,C/T=0,GATE=0,则TMOD寄存器初始化为10H。
(1)查询方式
利用CPU不断查询溢出标志位TF1,判断定时是否到,这种方式占用了大量CPU时间,与定时器提高CPU效率相违背。
(2)中断方式
中断服务子程序:
2.定时器的扩展
在所有定时器中,最大的定时时间为方式1,它的定时时间最大为65.536ms(晶振为12MHz),那么我们定时100ms以上怎么办呢?
例如:假设系统时钟为12MHz,编写定时器T0产生1s脉冲经P1.0输出程序。
分析:定时器T0的最大定时约为65ms,1s脉冲需要在500ms时P1.0改变一次输出电平。定时需要500ms中断,这时我们可以将T0定时器设置时间为50ms,当定时到时进入中断但不改变P1.0的状态,当进入10次时即500ms再改变,就达到设计要求。控制进入次数选择指令DJNZ。
(1)主程序任务
1)T0工作方式的设定:选择方式1(16位方式),最大定时131ms,本题拟定时时长
2)定时常数的设定:X=216-50ms/1μs=15536=3CB0H
即TH0应装3CH,TL0应装0B0H。
3)中断管理:允许T0中断,开放总中断。即IE应装82H。
4)启动定时器T0:SETBTR0。
5)设置软件计数器初值(如使用R7)。即R7应装0AH。
6)动态停机:SJMP$。
主程序如下:
(2)中断子程序任务
1)恢复T0计数初值;
2)软件计数器R7减1,并判断是否为0。若为0时,则改变P1.0状态,并恢复R7初值,中断返回;若不为0,则直接中断返回。
中断子程序如下:
完整程序如下:
注意:在定时器中对初值装入可以不计算具体的值,而采用求模和求余方式计算初值,例如以上定时器的初值可采用:
任务拓展
根据已学知识完成下列任务并调试:
1)如何设计24h倒计时时钟,试编写流程图和程序。
2)如何在编写24h倒计时时钟基础上,通过矩阵式按键改变时分秒的初值,并启动定时工作,试编写流程图和程序。
评一评
项目5 《报警器与数字时钟安装与调试》评价表
(续)
思考与练习
一、填空题
1.在查询和中断两种数据输入/输出方式中,效率较高的是。
2.外部中断1INT1的中断入口地址为。
3.MCS-51系列单片机定时器/计数器作定时和计数用时,其计数脉冲分别由和提供。
5.所谓中断源即是引起中断的原因。
6.中断类似于程序中调用子程序,区别在于中断的发生是的,而调用子程序是编程员在时间上事先安排好的。
7.基本的通信方式有两种:串行方式和方式。
8.的各位对应相应的中断源,如果允许该中断源中断则该位置1,禁止中断则该位置0。
9.5个中断源的优先级别由管理,相应位置1,则该中断源优先级别高,置0则优先级别低。
10.中断处理过程分为4个阶段:中断请求、、中断处理和中断返回。
11.两个定时器/计数器都有定时或事件计数的功能,可用于定时控制、延时、对外部事件和检测等场合。
二、选择题
1.每个中断源发出的中断请求信号,都会标记在( )寄存器。
A.TMOD/SCON B.TCON/PCON C.IE/TCON D.TCON/SCON
2.中断查询,查询的是( )。
A.中断请求信号B.中断标志
C.外中断方式控制位D.中断允许控制位
3.中断是一种( )。
A.资源共享技术B.数据转换技术
C.数据共享技术D.并行处理技术
4.执行“MOV IE,#81H”指令的意义是( )。
A.屏蔽中断源B.开放外部中断源0
C.开放外部中断源1D.开放外部中断源0或1
5.启动T1运行的指令是( )。
A.SETB ET0B.SETB ET1
C.SETB TR0D.SETB TR1
6.AT89S52单片机在响应中断后,需要用软件来清理的中断标志是( )。
A.TF0,TFlB.RI,TIC.IE0,IE1
7.(TMOD)=05H,则T0I作方式为( )。
A.13位计数器B.16位计数器C.13位定时器D.1位定时器
8.AT89S52单片机用来开放或禁止中断的控制寄存器是( )。
A.IPB.TCONC.IED.SCON
9.用MCS-51系列单片机的定时器T1作定时方式,用工作方式2,则工作方式控制字为( )。
A.60HB.02HC.06HD.20H
10.用MCS-51系列单片机的定时器TI作定时方式,用工作方式1,则初始化编程为( )。
A.MOVTOMD,#06HB.MOVTOMD,#20H
C.MOVTOMD,#10HD.MOVTOMD,#60H
11.用MCS-51系列单片机的定时器,若用软启动,应使TOMD中的( )。
A.GATE位置1B.C/T位置1C.GATE位置0D.C/T位置0
12.使MCS-51系列单片机的定时器T0停止计数的指令是( )。
A.CLRTR0B.CLRTR1C.SETBTR0D.SETBTR1
三、问答题
1.什么是中断?中断的作用是什么?
2.什么是外部中断?MCS-51系列单片机有几个外部中断源?请求信号由什么引脚引入?
3.中断优先级的顺序是什么?5个中断源的入口地址分别为什么?
四、编程题
1.用定时器T1,工作方式0,在P1.0产生周期为500μs的连续方波,时钟振荡频率为6MHz,用查询方式试编写程序。
2.单片机AT89S52的P1口接8个LED,用INT1产生中断。当主程序正常执行时,P1口接8个LED单灯左移。当进入中断状态时,P1口接8个LED将变成单灯右移,3个循环后,恢复中断前的状态,即继续执行8个LED单灯左移,延时为1s,试编写程序。
3.用I产生中断,主程序正常执行时,数码管循环显示“0~9”,每0.5s增加1。当进入中断状态时,数码管循环显示“9~0”,每0.5s减少1,1个循环之后恢复中断前的状态,试编写程序。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。