本课题所涉及的问题在国内(外)的研究现状综述
“定时器”总的来说有两种类型。其一是基于模拟技术的传统产品,这种定时器功能简单,尽管曾被广泛应用过,但已进入淘汰之列。另一种就是基于数字技术的新一代产品,这种产品功能强,是前者的换代之物。然而,此类产品大多是较大型的设备,真正实用、携带方便、功能齐全的“大路”商品则就不多见了。随着单片机性能价格比的不断提高,新一代产品的应用越来越广泛,大可构成复杂的工业过程控制系统,完成复杂的控制功能,小则可以用于家电控制,甚至能够用来做儿童电子玩具。它功能强大,体积小,重量轻,灵活好用,配以适当的接口芯片,可以构造各种各样、功能各异的微电子产品。比如方圆电子所生产的遥控数码闹钟等上市销售的产品都部分应用了这项技术。
1.本课题所涉及的问题在国内(外)的研究现状综述
“定时器”总的来说有两种类型。其一是基于模拟技术的传统产品,这种定时器功能简单,尽管曾被广泛应用过,但已进入淘汰之列。另一种就是基于数字技术的新一代产品,这种产品功能强,是前者的换代之物。然而,此类产品大多是较大型的设备,真正实用、携带方便、功能齐全的“大路”商品则就不多见了。随着单片机性能价格比的不断提高,新一代产品的应用越来越广泛,大可构成复杂的工业过程控制系统,完成复杂的控制功能,小则可以用于家电控制,甚至能够用来做儿童电子玩具。它功能强大,体积小,重量轻,灵活好用,配以适当的接口芯片,可以构造各种各样、功能各异的微电子产品。比如方圆电子所生产的遥控数码闹钟等上市销售的产品都部分应用了这项技术。
电路原理:
单片机使用AT89C2051,对4个数码管采用动态驱动,使用两个口独立驱动两个发光二极管,两个发光二极管用做秒点指示灯,独立控制的目的是通过秒点指示灯来指示工作状态,例如:闹铃开启、整点报时等等。电源使用电容降压电路,由于闹铃时钟的有功消耗很小,所以该电路能够保证正常地、稳定地供电。
2.设计(论文)要解决的问题和拟采用的研究方法
需要解决的问题:
硬件系统总体框图、LED显示器、系统电源及相关的硬件电路的设计;
软件系统总体框图、软件流程图及相关的软件程序设计;
系统声光报警功能及相关的软件程序的设计,设计出多功能转速表的外形结构
拟采用的解决方法:
通过实践结合理论知识初步草拟硬件系统总体框图并在以后不断完善。
通过找资料、电气手册完成对硬件的设计。
通过对其他单片机类似程序的解读、完善。编写出软件部分。
通过对上市的成品的观摩,完成产品外型的设计。
本课题需要重点研究的、关键的问题及解决的思路
问题1:单片机定时中断的精确定时编程方法种种
MCS-51单片机的中断响应延迟时间,取决于其它中断服务程序是否在进行,或取决于正在执行的是什么样的指令。单中断系统中的中断响应时间为3~8个机器周期[1]。无论是哪一种原因引起的误差,在精确定时的应用场合,必须考虑它们的影响,以确保精确的定时控制。根据定时中断的不同应用情况,应选择不同的精确定时编程方法。
文中以定时器T1工作在定时方式1为例,晶振频率为12MHz 。
1 方法1
在定时器溢出中断得到响应时,停止定时器计数,读出计数值(反映了中断响应的延迟时间),根据此计数值算出到下一次中断时,需多长时间,由此来重装载和启动定时器。例如定时周期为1ms,则通常定时器重装载值为-1000(0FC18H)。下面的程序在计算每个定时周期的精确重装载值时,考虑了由停止计数(CLR TR1)到重新启动计数(SETB TR1)之间的7个机器周期时间。程序中#LOW(-1000+7)和#HIGH(-1000+7)是汇编符号,分别表示-1000+7=0FC1FH这个立即数的低位字节(1FH)和高位字节(0FCH)。
……
CLR EA ;禁止所有中断
CLR TR1 ;停止定时器T1
MOV A,#LOW(-1000+7) ;期望数的低位字节
ADD A,TL1 ;进行修正
MOV TL1,A ;重装载低位字节
MOV A,#HIGH(-1000+7) ;对高位字节处理
ADDC A,TH1
MOV TH1,A
SETB TR1 ;重启动定时器
SETB EA ;重开中断
……
此方法适用于各种原因造成的定时误差的情况,为通用方法。
2 方法2
假如定时周期为10ms,通常定时器重装载值为0D8F0H,中断子程序如下[2]:
ORL TL1,#0F0H
MOV TH1,#0D8H
……
这里用ORL TL1,#0F0H代替MOV TL1,#0F0H 可提高定时精度。此方法只适用于重装载值低位字节的低4位为零,且中断响应的延迟时间小于16个机器周期的情况。类似的定时器重装载值有0FFF0H,0FFE0H等。
3 方法3
假如定时周期为1ms,通常定时器重装载值为0FC18H,中断子程序如下:
MOV A,#LOW(-1000+4) ;期望数的低位字节
ADD A,TL1
MOV TL1,A
MOV A,#HIGH(-1000+4) ;对高位字节处理
ADDC A,TH1
MOV TH1,A
DEC TL1 ;恢复提前了的2个机器周期
……
这种方法中不停止定时器计数过程,若在执行指令ADDC A,TH1 或MOV TH1,A时,恰好产生TL1溢出向TH1进位的情况,则TH1的值就不对了,会产生更大的误差。为此,程序段开头为重装载值加4,若有溢出进位,则可提前发生,其中2个机器周期是考虑到为TL1重装载占用的时间。
此方法适用于系统中无其它更高优先级中断源的情况。若类似方法1,在程序段开头和结尾分别加上禁止所有中断(CLR EA)和开中断(SETB EA)指令,则将适用于所有情况。
4 方法4
假如定时周期不确定,只知道定时器重装载值存放在寄存器R3、R2中,中断子程序如下:
MOV A,#05H ;3个机器周期装载TL1,2个周期提前
ADD A,TL1
ADD A,R2
MOV TL1,A
MOV A,R3 ;处理高位字节
ADDC A,TH1
MOV TH1,A
DEC TL1 ;恢复提前了的2个机器周期
……
此法适用于定时周期不确定的情况,其它同方法3。
5 方法5
当定时中断发生的位置可预知时,通常出现在主程序的AJMP $ (或SJMP $)等待指令处,中断延迟时间为3个或4个机器周期。取固定值4可简化补偿程序。以定时周期1ms为例,中断子程序如下:
ORG 001BH
MOV TL1,#LOW(-1000+4)
MOV TH1,#HIGH(-1000+4)
……
此方法适用于定时中断总发生在同一条指令位置,且无其它中断源的情况。
结 语
上述5种方法误差均不超过1个机器周期,其中方法1、3、4较为通用,适用于任何情况,但程序较长;方法2、5简单,但必须注意满足对应条件,才能使用。当然,也还有其它方法,但比较烦琐,并不理想。