您当前的位置:五五电子网电子知识单元电路时钟-定时电路简易数字钟设计 正文
简易数字钟设计

简易数字钟设计

点击数:7128 次   录入时间:03-04 12:01:37   整理:http://www.55dianzi.com   时钟-定时电路

  数字钟是人们生活中最常见的用品之一。本文的讨论目是借用这个大家熟悉的日常用品功能,学习8051单片机断系统、定时/计数器的使用、键盘的扩展以及对字符型的综合应用。定时器是数字钟的核心,定时器的使用通常与中断相结合,所以文章先介绍8051的中断结构与编再介绍8051的定时/计数器的原理与应用。数字钟离不钟调节按钮,以此引入8051的键盘扩展设计。在具备这本知识的基础上,最后结合LCD显示器,完成数字钟的整机程序设计。

  一、C51的中断程序设计

  1.8051的中断系统结构

  在CPU和外设交换信息时,存在着快速CPU和慢速外设间的矛盾,机器内部有时也可能出现突发事件,为此,计算机中通常采用中断技术。这样CPU和外设并行工作,当外设数据准备好(或有某种突发事件发生)时向CPU提出请求,CPU暂停正在执行的程序转而为该外设服务《或处理紧急事件),处理完毕再回到原断点继续执行原程序。个过程称为中断;引起中断的原因和发中断申请的来源,称为中断源。当有多中断源同时向CPU申请中断时,CPU先响应最需紧急处理的中断请求,处理毕再响应优先级别较低的中断请求,这预先安排的响应次序,称为中断优先匆在中断系统中,高优先级的中断请求能断正在进行的较低级的中断源处理,这称为中断的嵌套。能实现中断功能并能中断进行管理的硬件和软件称为中断统。

  8051单片机有5个中断源,其后各增强和改进的机型有更多的中断源,但文只限于介绍基本的5个中断源,对新中断源不做讨论。在8051中断系统中,一个中断源都分配一个固定的中断服程序入口地址,通常称为中断向量,CPU响应中断时,硬件自动形成各自的入口地址,由此进入中断服务程序,从而实现了正确的转移。这些中断源的符号、名称、产生条件及中断服务程序的入口地址1如下表所示。

8051单片机的中断源

56

  在中断系统中,用户对中断的管理体现在中断的控制与优先级的安排两个方面。8051单片机一般使用到3个特殊功能寄存器来完成对中断的管理,下面简要介绍之。

  (1)中断的允许和禁止——中断允许控制寄存器IE(地址8AH)8051单片机的一个中断源对应IE寄存器的一位,如果允许该中断源中断则该位置“1”,禁止该中断源中断则该位置“0”。此外还有一个中断总控位,其格式如下表所示。

中断允许控制寄存器IE(地址A8H)的位格式

54

  8051单片机是否可以响应中断,需要中断总控位和相应的中断源中断允许位同时有效才行,一处禁止,该中断即不能被系统所响应。

  (2)中断请求标志及外部中断方式选择寄存器TCON(地址88H)特殊功能寄存器TCON的格式如下表所示。

45

  上表中的TR1和TR0是与定时/计数器工作相关的控制位,我们将在下一节用到。此外串行口的中断标志Rl和Tl在串口控制寄存器SCON的第O位和第1位,我们将在后续的文章中介绍。

  (3)中断优先级管理寄存器IP(地址B8H)8051单片机的中断源的优先级别有高低两级,由中断优先级管理寄存器lP来设置。一个中断源对应于lP寄存器的一位,如对应位置“1”,该中断源优先级别高,如对应位置“O”则优先级别低。FP寄存器各位与中断源的对应关系如下表所示。

45

  当某几个中断源在IP寄存器的相应位同为“1”或同为“O”时,其中断优先级则由内部查询确定,优先响应先查询的中断请求。系统查询的顺序是:INTO-TO—INT1一T1一T1/R1。

  CPU响应中断后,应撤除该中断请求,否则会引起再次中断。对定时计数器T0、T1的溢出中断,CPU响应中断后,硬件清除中断请求标志TFO和TF1,即自动撤除中断请求,除非T0、T1再次溢出,才产生中断。对边沿触发的外部中断INTO和INT1,也是CPU响应中断后硬件自动清除IEO和IE1。对于串行口中断,CPU响应中断后,没有用硬件清除中断请求标志位TI或RI,即串行口中断标志不会自动清除,必须用软件清除,编写串口中断服务应该注意这一点。对电平触发的外部中断,CPU在响应中断时也不会自动清除中断标志,因此,在CPU响应中断后应立即撤除INTO或INT1的低电平信号。

  2.8051中断服务程序的C语言设计

  C51使用户能编写高效的中断服务程序,编译器在规定的中断向量处放入无条件转移指令,使CPU响应中断后自动地从固定的中断向量跳转到中断服务程序的实际地址,而无需用户去安排。

  C51中断服务程序定义为函数,最常见的使用形式如下:void函数名(void)interruptn[usingm]

  其中必选项interruptn表示将函数声明为中断服务数,n为中断源编号,可以是0~31间的整数,但不允许为运算符的表达式,n通常取以下值:

  0-外部中断O;1一定时器/计数器0溢出中断;2-外部中断1;3-定时器/计数器1溢出中断:4-串行口发送与接收中断。

  可选项usingm用来定义函数使用的工作寄存器组,m的取值范围为0~3,可缺省。它对目标代码的影响是:函数入口处将当前寄存器保存,使用m指定的寄存器组,函数退出时原寄存器组恢复。选不同的工作寄存器组,可方便快速地实现寄存器组的现场保护。

45

  中断服务函数不允许用于外部函数,它对目标代码影响如下:①当调用函数时,SFR中的ACC、B、DPH、DPL和PSW当需要时入栈。②如果不使用寄存器组切换,中断函数所需的所有工作寄存器Rn都入栈。③函数退出前,所有工作寄存器都出栈。④函数由“RETI”指令返回。在C51中,现场保护与恢复的过程均由编译器自动完成,读者只要了解这一情况即可。下面举例说明C51中断服务程序的编写方法。在Proteus下,给出一个简单的中断仿真电路如上图所示,电路中一个按键,用来模拟中断,由外部中断0输入脚P3.2输入,P1.7脚接了一个电平高低的探针,用以显示引脚的输出电平。假设要求中断下降沿有效,每按一次键中断一次,将P1.7脚的输出电平翻转一次。程序如下:

54

编译程序并加载到Proteus仿真运行后,每按动一次键,输出电平就翻转一次,如下图(a)和下图(b)所示。

67

  二、8051定时/计数器的C语言编程

  1.8051定时/计数器的工作原理8051单片机的定时/计数器T1由寄存器TH1、TL1组成,定时/计数器TO由寄存器THO、TLO组成,它们均为8位寄存器,映射在特殊功能寄存器中,用于存放计数初始值,地址为8AH一8DH。此外,内部还有一个8位的方式寄存器TMOD,用于选择定时/计数器的工作方式。定时/计数器的控制寄存器TCON是与中断请求标志及外部中断方式选择寄存器所共用。定时/计数器TO的内部结构和控制信号如下图所示,定时/计数器T1亦然。8051的定时/计数器是一个加1计数器,它可以工作于定时方式也可以工作于计数方式,两种工作方式的实质都是对脉冲计数,只不过所计脉冲的来源不同而已。

34

  在上图中,当C/T=O时,计数器工作在定时方式。计数器THO、丁LO(或TH1、TL1)的计数脉冲来自振荡器的12分频后的脉冲(fosc/12),即对系统的机器周期计数。当开关K受控合上时,每过一个机器周期,计数器THO、TLO(或TH1、TL1)加1,直至计满预设的个数,THO、TLO(或TH1、TL1)回零,定时/计数器溢出中断标志位TFO(或TF1)被置位,产生溢出中断。

  当C/T=1时,计数器工作在计数方式。计数器TO、T1的计数脉冲分别来自于引脚TO(P3.4)或引脚T1(P3.5)上的外部脉冲。当开关K受控合上时,计数器对此外脉冲的下降沿进行加1计数,直至计满预定值回零,置位定时/计数器中断标志TFO(或TFl)产生溢出中断。由于检测一个由“1”到“O”的跳变需二个机器周期,前一个机器周期测出“1”,后一个周期测出“O”,故计数脉冲的最高频率不得超过fosc/24。对外部脉冲的占空比无特殊要求。

[1] [2] [3]  下一页


本文关键字:暂无联系方式时钟-定时电路单元电路 - 时钟-定时电路