在上一节中说到守时器很重要,而关于守时器来说,便是简略的一个初始化,只要把这个弄理解了,后边的编程操作也就瓜熟蒂落了,今日再简略地对守时器初始化做个弥补。
首要,再说一下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;