08应电2-付凤焕-200805103

发布时间 : 星期三 文章08应电2-付凤焕-200805103更新完毕开始阅读

基于单片机的数字秒表的设计

现在方案中采用了三个中断,外部中断INT0,INT1和定时中断T0。CPU在响应

中断时,先处理高级中断,在处理低级中断,若有多个同级中断时,则按自然优先顺序处理。例如当CPU正在处理一个中断申请时,有出现了另一个优先级比它高的中断请求,这是,CPU就暂停终止对当前优先级较低的中断源的服务,转去响应优先级比它高的中断请求,并为其服务。待服务结束,再继续执行原来较低级的中断服务程序。而当CPU为级别高的终端服务程序服务时,如果级别低的中断发出中断请求,此时CPU是不会响应的,所以为了避免开始和暂停两个按键中的一个出现没有响应的情况,在进行程序编辑时要注意对中断的使用,避免出现中断的嵌套。,合理分配中断

对本设计的实现是至关重要的。

另外由于数字式电子秒表的最小精度位1s,属于高精度电子秒表。定时器T0的定时周期也为1ms,为了使电子秒表暂停键按下后CPU能马上去响应中断程序,必须将暂停的外部中断级别高于定时计数器的中断级别。避免出现CPU执行完定时溢出中断程序后再响应外部中断程序,影响计时精度。

AT89C52的自然优先级顺序排列如下:

中断源 最高 外部中断0

定时/计数器0溢出中断 外部中断1

定时/计数器1溢出中断

串行口中断 最低

数字式秒表中的两个按键采用了中断实现功能。开始采用外部中断INT0,暂停采用外部中断INT1。另外程序中还用到了定时/计数器0溢出中断进行计时。依据设计要求,暂停的外部中断INT1中断级别最高,计时的定时/计数器0溢出中断次之,开始的外部中断INT0级别最低。 (1)外部中断0服务程序:

外部中断0服务程序结合外部P3.2停止键实现数字电子秒表的保存功能,具体流程图如图3-2。

当按下P3.2停止键按下向CPU发出外部中断请求,CPU转向外部中断0服务程

21

基于单片机的数字秒表的设计

序执行,CPU转向外部中断0服务程序执行,保存当前的时间,最后中断返回

图3-2 外部中断0服务程序流程图

中断返回 保存显示 外部中断0 (2)外部中断1服务程序

外部中断1服务程序结合外部P3.3停止键实现数字电子秒表的启动功能,具体流程图如图3-3。

当按下P3.3启动键按下向CPU发出外部中断请求,CPU转向外部中断1服务程序执行,调用保存中断所保存的数据,并显示以前所保存的时间,最后中断返回。

图3-3 外部中断1服务程序流程图

22

外部中断1 显示中断 中断返回 基于单片机的数字秒表的设计

(3)定时中断服务程序

当定时/计数器T0器溢出后,向CPU发出中断请求信号。CPU跳转到定时中断程序执行,具体流程如图2.4。定时中断程序是一个进位程序,主要负责对1s的加一。1s位没有满十就继续执行加一。当1s位满十后就对1s位清零,向10s位加一,同时检测10s位是否满十,没有满十就继续执行加一。如果满十就向1分钟位加一,依次类推,最终达到9.59秒后归零,从零开始再次计时。

定时/计数器T0工作在方式1下,TH0和TL0组成一个16位的二进制数计数器。单片机开机或复位时,它的值为00H,当T0启动后,从第一个输入脉冲开始计时,每来一个脉冲计数加一,即从0000000000000000开始计数到1111111111111111,再计数一个脉冲时TH0和TL0组成的16位计数器将会从16个1变成16个0,并产生溢出,溢出位将被送到TF0标志位,通过溢出标志产生溢出中断请求。显然,T0定时器在方式1下引起一次中断所允许计数的最多脉冲个数为216个。

但如果定时计数器如果每次都固定从0开始计数,到计满后,再向CPU发出溢出中断请求信号那是毫无意义的。为了使定时计数器在规定的计数脉冲个数字之后(此时应小于216 个脉冲),向CPU发出溢出中断请求,可采取预先向TH0和TL0中放入一个初值X的方法,使计数器以X值为起始值开始计数,即X+1,X+2,??直至计数器计满,从1全变为0。设需要计数的脉冲个数为Y,则有:

X+Y=216

在定时方式下:定时时间间隔位t=(216—X)*振荡周期*12

现在本设计要求1s实现一次中断,选择定时器T0工作在方式0。所以需要根据以上条件计算出T0的初值。

设T0的初值为X,则

(216—X)*12/12*106 =1*10-3 转换位十六进制数X=7192=1110000011000B 即TH0=3CH,TL0=0B0H

由于定时1s只是一个理想化的时间,其中并没有考虑到中断后单片机执行语句所花的时间。虽然执行语句所花的时间很短只有即微秒,但积少成多,数字秒表一秒中要溢出中断1000次,积累起来误差就能达到毫秒级,这对于精度到达毫秒级的数

23

基于单片机的数字秒表的设计

字电子秒表来说是很大的误差。所以要在后期编程时还要将单片机读程序的时间考虑进去,

在对定时器赋初值时将单片机需要执行的语句所花的时间加上,这样就能使数字电子秒表的误差达到最小。

判断10S位是否满10 10S位加一,1S清零 判断1S是否满10 定时计数器0

1min清零

图3-4 定时中断服务程序

中断返回 判断1min是否满10 1min位加一,10S清零 24

联系合同范文客服:xxxxx#qq.com(#替换为@)