一、MCS-51单片机的守时器/计数器概念
单片机中,脉冲计数与时刻之间的联系十分亲近,每输入一个脉冲,计数器的值就会主动累加1,而花费的时刻刚好是1微秒;只需相邻两个计数脉冲之间的时刻距离持平,则计数值就代表了时刻的消逝;
因而,单片机中的守时器和计数器其实是同一个物理的电子元件,只不过计数器记载的是单片机外部产生的作业(承受的是外部脉冲),而守时器则是由单片机本身供给的一个十分安稳的计数器,这个安稳的计数器便是单片机上衔接的晶振部件;MCS-51单片机的晶振通过12分频之后供给给单片机的只要1MHZ的安稳脉冲;晶振的频率是十分精确的,所以单片机的计数脉冲之间的时刻距离也是十分精确的,这个精确的时刻距离是1微秒;
MCS-51单片机外接的是12MHZ的晶振(实际上是11.0592MHZ),所以,MCS-51单片机内部的作业频率(时钟脉冲频率)是12MHZ/12=1MHZ=1000000次/秒=1000000条指令/秒=1000000次/1000000微秒=1次/微秒=1条指令/微秒;也便是说,晶振振动一次,就会给单片机供给一个时钟脉冲,花费的时刻是1微秒,此刻,CPU会履行一条指令,阅历一个机器周期;即:1个时钟脉冲=1个机器周期=1微秒=1条指令;
注:个人PC机上的CPU主频是晶振通过倍频之后的频率,这一点刚好与MCS-51单片机的相反,MCS-51单片机的主频是晶振通过分频之后的频率;
总归:MCS-51单片机中的时刻概念便是通过计数脉冲的个数来丈量出来的;1个脉冲=1微秒=1条指令=1个机器周期;
MCS-51单片机守时器/计数器的简略结构图:
8051系列单片机有两个守时器:T0和T1,别离称为守时器和守时器T1,这两个守时器都是16位的守时器/计数器;8052系列单片机增加了第三个守时器/计数器T2;它们都有守时或作业计数功用,常用于时刻操控、延时、对外部时刻计数和检测等场合;
二、守时器/计数器的结构
8051单片机的两个守时器T0和T1别离都由两个特别功用寄存器组成;T0由特别功用寄存器TH0和TL0构成,而T1则是由TH1和TL1构成;
作为守时器运用时,守时器计数8051单片机片内振动器输出通过12分频后的脉冲个数,即:每个机器周期使守时器T0/T1的寄存器值主动累加1,直到溢出,溢出后持续从0开端循环计数;所以,守时器的分辨率是时钟振动频率的1/12;
作为计数器运用时,通过引脚T0(P3.4)或T1(P3.5)对外部脉冲信号进行计数,当输入的外部脉冲信号产生从1到0的负跳变时,计数器的值就主动加1;计数器的最高频率一般是时钟振动频率的1/24;
由此可知,不论是守时器仍是计数器作业方法,守时器T0和T1均不占用CPU的时刻,除非守时器/计数器T0和T1溢出,才或许引起CPU中止,转而去履行中止处理程序;所以说,守时器/计数器是单片机中效率高而作业灵敏的部件;
三、守时器/计数器的作业形式
除了可选择守时器和计数器的这两种作业方法外,每个守时器/计数器都有4种作业形式;
在形式0、1和2时,T0和T1的作业形式相同;在形式3时,两个守时器/计数器的作业形式不同;
作业形式0:
由TL0的低5位和TH0的悉数8位一起构成一个13位的守时器/计数器;守时器/计数器发动后,守时或计数脉冲个数加到TL0上,从预先设置的初值(时刻常数)开端累加,不断递加1;当 TL0计满后,向TH0进位,直到13位寄存器计满溢出;溢出时,守时器/计数器硬件会主动地把13位的寄存器值清0,中止符号TF0置1;假如需求进一步守时/计数,需求运用相关指令重置时刻常数,并把守时器/计数器的中止符号TF0置0;作业形式0的结构如下图:
作业形式1:
形式1与形式0简直完全相同,仅有的差异便是,形式1中的寄存器TH0和TL0一起构成的是一个16位守时器/计数器来参加操作,因而比形式0中的守时/计数规模更大;作业形式1的结构如下图:
作业形式2:
这种形式又称为主动再装入预置数模式;当守时器/计数器的寄存器TH0/TL0的值溢出时,守时器/计数器硬件设备会主动把寄存器TH0/TL0的值清0,以从头开端操作;可是有时候,咱们的守时/计数操作是需求屡次重复守时/计数的,假如溢出时不做任何处理,那么,在第二轮守时/计数时便是从0开端守时/计数了,而这并不是咱们想要的;所以,要确保每次溢出之后,在从头开端守时/计数的操作是咱们想要的,那就要把预置数(时刻常数)从头装入某个当地;而从头装入预置数的操作是硬件设备主动完结的,不需求人工干预所以,这种作业形式就叫主动再装入预置数方法;已然需求从头装入预置数,那么预置数就必须要存放在某个当地,才干确保重装操作成功;在作业形式2中,把主动重装入的预置数存放在守时器/计数器的寄存器的高8位中,也便是存放在TH0中,而只留下TL0参加守时/计数操作;明显,守时/计数的方位小了许多;
注:这个作业形式常用于波特率产生器(串口通讯),T1作业在串口形式2;用于这种方法时,守时器便是为了供给一个时刻基准;计数溢出之后,不需求做太多的作业,只做一件事就可以,便是从头装入预置数,再开端从头计数,并且中心不需求任何延时;作业形式2的结构如下图:
作业形式3:
因为守时器/计数器T1没有作业形式3,假如把守时器/计数器T0设置为作业形式3,那么TL0和TH0将被分割成两个彼此独立的8位守时器/计数器;作业形式3的结构如下图:
四、守时器/计数器的守时/计数规模
作业方法0:13位守时器/计数器作业形式,最多可计数2的13次方次,即:8192次,[0,8191];
作业方法1:16位守时器/计数器作业形式,最多可计数2的16次方次,即:65536次,[0,65535];
作业方法2:8位守时器/计数器作业形式,最多可计数2的8次方次,即:256次,[0,255];
作业方法3:8位守时器/计数器作业形式,最多可计数2的8次方次,即:256次,[0,255];
预置数的计算公式:预置数=最大值-需求计数的次数;
五、守时器/计数器的操控寄存器
8051单片机规划了两个8位的特别功用寄存器来操控守时器/计数器的作业状况;这两个特别功用寄存器别离是TMOD和TCON;它俩都在特别功用寄存器区;
1、作业形式操控寄存器TMOD(89h):
2、作业状况操控寄存器TCON(88H):
六、守时器/计数器的初始化
1、设置守时器/计数器的作业形式TMOD(常用的是形式1:TMOD=0x01);
2、装入预置数到THx和TLx中(THx=TLx=MAX(8192/65536/256)-计数次数);
3、假如作业在中止方法,则需求开守时器/计数器的中止TCON中的标志位:TF0/TF1=0/1;
4、发动守时器/计数器:TR0/TR1=1;
注:因为8051单片机的守时器/计数器运用的时钟脉冲是外部晶振(12MHZ)通过12分频(12MHZ/12=1MHZ)之后的频率,所以,一个时钟脉冲便是1微秒;所以,8192个脉冲=8192微秒=8.192毫秒; 65536个脉冲=65536微秒=65.536毫秒; 256个脉冲=256微秒=0.256毫秒;