微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 单片机学习之十四:定时器应用(模式1)

单片机学习之十四:定时器应用(模式1)

时间:11-18 来源:互联网 点击:
一、实验现象:

开机后程序作如下的灯光变换:第一次led0、led2亮;第二次led1、led3亮;第三次led4、led6亮;第四次led5、led7亮;第五次led0、led2、led4、led6亮;第六次led1、led3、led5、led7亮;第七次8个二极管全亮;第八次8个二极管全灭。然后重头开始循环。每次状态转换间隔时间是50ms。

二、实验目的

掌握内部定时/计数器的作定时功能(模式1)的应用

三、实验任务分析:

看到这个实验题目,大家可能会说,这个试验难度不大,我们只要把这几种灯光对应的输出存到一个表里面,然后查表就可以啦,灯光转换之间调用50ms的延时程序即可。 这样的思路当然可以,但是,如果这样作,我们就没有必要写这个试验啦。今天,我们要老瓶装新酒,看看这个50ms的定时时间除了用延时程序完成,还有没有别的方法。以前的定时,我们常常采用延时程序来完成。其实这种方法不是很完美,由于程序的指令中还包含其他的判断指令,所以延时程序作定时不是非常精确。由于日常的电子系统常常需要定时和计数的功能,所以MCS-51单片机内部就自带了两个16位的寄存器,用来作定时/计数器,我们给它们起了名字,T0、T1。(我们的AT89S52里面有3个定时器,一般的程序两个就够啦,我们先介绍这两个吧。)
现在就来学习这两个定时/计数器的用法。这个试验的实质,就是利用自带的定时/计数器来产生50ms的定时。
先来看看这两个定时/计数器的结构吧,如下图所示。

1、定时器的结构:

从图上可以看出,定时/计数器的核心是一个加1计数器(注:16位,计数范围从0000h~ffffh),根据K0开关的不同方向,这个计数器可以对两个脉冲来源计数,一个是系统的时钟振荡器,另外一个是外部的脉冲源。

2、定时器的工作方式

当计数器对系统时钟脉冲计数的时候,由于系统时钟是一个时间基准,所以脉冲数×脉冲周期就是一段固定时间,因此工作于定时方式;当计数器对外部的脉冲进行计数的时候(也就是对TX端计数,TX端我们用到的时候再解释吧),就可用于对外部事件计数,工作于计数方式。我们这个试验要产生50ms的定时,用的是定时功能,在后面的试验里我们还要作计数功能的试验。

我们发现,当k0向上打的时候,工作于定时方式,向下打的时候工作于计数方式。那么k0又是由什么控制的呢?
K0是一位模拟开关,方向受 这一位的控制,当 =0时,K0向上,工作于定时方式;当 =1时,K0向下,工作于计数方式。(注:数电教材的《AD转换》一章有模拟开关的原理,大家可以查阅),
那么, 又是什么呢,它是特殊功能寄存器tmod中的一位。tmod是用来控制定时/计数器的工作方式的,是一个8位的寄存器,它的各位情况如下图所示:


(注:tmod是我们又新接触的一个特殊功能寄存器,和别的特殊功能寄存器一样,在内部RAM的特殊功能寄存器区。)
看到了吧, 是tmod寄存器的D2和D6位,所以,如果我们想让T0工作于定时方式,就应该把D2置0;如果要让T0工作于计数方式,就应该把D2置1。对T1的控制也是一样的。
注意,在这里我要特别说明一点,我们不能用setb指令给tmod的某一位置1,也不能用clr指令给某一位置0。为什么呢?记得我们以前对ie寄存器可以这样作:setb ea(开中断),clr ea(关中断),那么tmod寄存器为什么不行呢?
这是因为tmod寄存器是不能够“位寻址”的,也就是说,我们不能单独的对其中一位进行操作,而必须对整个寄存器进行赋值。而以前我们学过的ie、psw、tcon、acc这几个特殊功能寄存器却是可以“位寻址”的。具体的哪些寄存器可以位寻址,而哪些寄存器不行,大家可以参照相关教材,有很详细的说明。
再看一下k1,它也是一个模拟开关,当与门输出是1的时候,开关闭合,启动计数器;当与门输出是0的时候,开关打开,计数器停止。至于它如何控制我们稍后介绍。

3、定时时间的计算

好啦,知道了怎样选择定时还是计数方式,我们就要考虑一下定时时间的计算了。要计算定时时间,我们就要知道计数器的输入脉冲周期是多少。实际上,计数器是对机器周期计数的,而我们也知道,1个机器周期=12×振荡周期,所以,计数器的输入脉冲周期是:12×(1/12MHZ)=1us。

可见,要产生50ms的定时,只要计数器记50000个脉冲就可以啦。那么,怎样让计数器在记入了50000个脉冲后,向单片机发出一个消息,表示定时时间到呢?这就要用到我们以前学习过的概念-中断啦。我们以前说过,单片机有5个中断源,两个是外部中断 和 ,两个是T0和T1的溢出中断,还有一个是串行口中断。我们以前用过外部中断 ,这个试验我

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top