微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机系列连载6—定时器初始化补充

51单片机系列连载6—定时器初始化补充

时间:11-27 来源:互联网 点击:
在上一节中提到定时器很重要,而对于定时器来说,就是简单的一个初始化,只要把这个弄明白了,后面的编程操作也就水到渠成了,今天再简单地对定时器初始化做个补充。

首先,再说一下T/C(定时器/计数器)的基本结构,它们基本部件是2个8位的计数器,其中TH1和TL1是T1的计数器,TH0和TL0是T0的计数器,记住这两个计数器,后面的操作都是围绕这两个展开的,要有这种意识。

在作为定时器使用时,是对单片机内部机器周期的计数,因其内部频率为晶振频率的1/12,如果晶振频率为12MHz,则定时器每接受一个输入脉冲的时间为1us,后面很多定时都用到这个基本常识。

当它用作对外部事件计数时,接相应的外部引脚T0(P3.4)或T1(P3.5)。在这种情况下,当检测到输入引脚上的电平由高跳变到低时,计数器就加1。

再强化一下初始化的步骤:

在使用T/C前,要对它进行初始化编程,主要是对TCON和TMOD编程,还需要计算很装载T/C的计数初值。包括以下几点:

1、确定T/C的工作方式——编程TMOD寄存器;

2、计算T/C的计数初值,并装载到TH和TL;

3、T/C在中断方式工作时,需要cpu中断和源中断——编程IE寄存器;

4、启动T/C——编程TCON中的TR1或TR0位。

接下来,重点讲一下计数初值的计算。

首先,计数器初值的计算。一般方式一与方式二是最常见的,在方式1中,16位计数器的最大计数值为216=65536,计数初值在寄存器中为TH=X/256,TL=X%6;在方式二中,8位计数器的最大计数值为28=256,计数初值在寄存器中为TH=TL=X。

其次,定时器初值的计算。这时,T/C是对机器周期脉冲计数的,前面提到,若晶振频率为12MHz,则机器周期是1us,后面的与计数器的一样,只是这里的最大计数值是最大定时间隔。

t=(2n-X)*T,其中,t为定时时间,X为计数初值,T为机器周期。

看一个实例,单片机外接晶振频率为12MHz,T/C0工作于定时方式,且允许中断,定时时间为20ms,令其工作在方式1.用C语言进行初始化编程。

T/C0工作于定时方式,从而C/T=0,GATE=0.定时器0工作于方式1,,所以M1M0=01.定时器1不用,TMOD=00000001=01H.计数寄存器初值分别为:TH0=(65536-20000)/256,TL0=(65536-20000)%6,因此初始化程序如下:

TMOD=0X01;//设置定时器工作方式

TH0=(65536-20000)/256;//加1计数器高8位TH0赋初值

TL0=(65536-20000)%6;//加1计数器低8位TL0赋初值

TR0=1;//启动计数器

ET0=1;//开计数器中断

EA=1;

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

网站地图

Top