51单片机系列连载6—定时器初始化补充
首先,再说一下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;
51单片机定时器初始 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)