一,什么是定时器
1.1 时钟周期:时钟周期T是时序中最小的时间单位,具体的计算方法就是1/时钟源频率,我们通常用的晶振为11.0592M,那么对应的时钟周期就为 = 1/11059200秒。
1.2 机械周期:我们单片机完成一个操作的最短时间就是一个机械周期,机械周期主要是针对汇编语言而言的,在汇编语言下程序的每一条语句都是机械周期的整数倍,而且语句执行所用的时间都是可以计算出来的,而c语言一条语句的时间是不确定的,受到诸多因素的影响。51单片机系列,在其标准架构下一个机械周期,是12个时钟周期,也就是12/11059200秒。当然还有很多列外,随着科技的发展,现在也不缺乏很多增强型的51单片机,其速度都比较块,有的1个机械周期等于4个时钟周期。
二,定时器的寄存器
2.1 标准的51单片机内部都有T0和T1这俩个定时器,T就是Timer的缩写,现在也有很多51系列的单片机还会增加额外的定时器,在这里,我们先讨论一下T0 和T1俩个定时器。
2.2大家可能大都了解过,对于单片机的每一个功能模块,都是由它的SFR(特殊功能寄存器)来控制的,与定时器有关的特殊功能寄存器有一下几个,我们用的时候直接来参考就可以了(具体的,还是参考相关资料更全面):
在这里,我们只需要注意注意到表中,TF0和TF1(溢出标志位)还有TR0 和TR1(使能标志位)
2.3溢出
所谓的溢出,就像我们用杯子装水一样,水装满了肯定就溢出来了的道理是一样的。定时器中的溢出,就是定时器计数位(5-1)达到了最大值后的一种表现。在这里,定时器每隔一个机器周期时间(12/110592)加1.
在51单片机中,定时器一般有俩个计数位,TL和TH,分别是低位和高位。当我们把定时器配置为一个16位定时器时,就是TL和TH一起组合成一个16位定时器(65536)。当TL溢出时(加到255最大值时溢出),硬件自动清理TL,TH自动加1.当TH加到255,TL加到255时,此时产生一个中断溢出,即产生一次中断,TF置1,由图5-3可知有软件和硬件俩种清零方式。
三,定时器的使用
3.1 ,我们在对定时器的相关寄存器进行简单的了解后,在使用定时器时,就只需要根据自己想要实现的功能来配置相关的寄存器就可以啦。
3.2,在这里我们需要注意的是,在配置寄存器时,得弄清楚哪些寄存器是可位寻址,哪些是不可位寻址。比如比我们的TCON寄存器就是一个可位寻址(可以把它里面的位单独拿出来操作),不可位寻址:比如我们的TOMD寄存器就是一个不可位寻址(只能操作整个寄存器,不可以单独操作里面的某一位)。
3.3 ,接下来就是定时器的使用啦,我们都知道定时器有一个定时功能,那么怎么去使用呢?在这里,我们可以利用定时器来计数,即使用它的TL或TH来帮助我们进行计数(因为TL是每1个机械周期自加1的)。我们也可以利用定时器中断来执行某些操作,比如你想每隔1ms刷新一次数码管,每2s闪烁一次led等。
3.4,定时器的配置:
TMOD = 0x01;
TH0 = 0xfc;
TL0 = 0x67;
ET0 = 1;//使能T0中断
TR0 = 1;
这里需要注意的是,我们使用哪一个定时器,就配置哪一个定时器,上面是是用脑定时器TO,你也可以使用T1;要根据自己的需求,使用相关 的配置。
3.5定时器中断函数,我们在需要使用定时器中断时,需要编写定时器中断函数;函数名可以按照自己的规范来,但函数小括号后面必须加intrrupt 0;这里,单词后面的数字代表的是你使用的是哪一个中断。中断函数所对应的数值,在单片机的详细资料里面有写。
您给出的意见,是大家成长的粮食。谢谢!!
生前何图享受?死后必定长安!
网友评论