什么是定时器计数器

定时器/计数器实际就是加1计数器。

1.定时器和计数器的区别:

       区别很小,本质上都是计数器,但定时器只是计数固定周期的脉冲,所以根据频率可以计算出准确的时间。

      定时器模式:对内部机器周期计数,因为一个机器周期 = 12个时钟周期(晶振频率倒数),所以技术周期 = 晶振频率*1/12;定时时间 = 计数值*机器周期;

                              (关于周期的详解,前面有一篇文章http://blog.csdn.net/xiao_peng117/article/details/78588022)

      计数器模式:外部事件脉冲由T0,T1输入计数器,在某个机器周期采样到高电平后,下个机器周期采样到低电平,则计数器加1;

      计数值:计数值 = 溢出时计数器的值 - 计数初值;

2.定时器系统的使用:

使用定时计数器,就是对两个寄存器的操作。加1计数器就是由这个16位的寄存器TCON和TMOD组成。这两个寄存器来操作T0,T1两个定时计数器硬件。其中T0是由TH0,TL0两个寄存器来实现;T1是由TH1,TL1两个寄存器来实现。

TCON:用来控制定时器的启,停,标志定时器溢出和中断情况。

TMOD:用来设置定时器的工作方式和功能。

/*更正:下图低8位寄存器TMOD中的第3位和第7位为C/T,手误打错*/

TCON各位介绍:

    TF1:T1(定时器1)溢出位标志:,当记满溢出时便会向CPU发出中断申请,会由硬件自动置0,倘若用软件访问值得话,需要手动置0;

    TR1:T1的控制位,当GATE=1时,INT1为高电平时,将TR1置1就会启动定时器1;当GATE = 0时,TR1 = 1就会启动定时器1;

    TF0和TR0操作的是T0,方法一样。

    IE1   IT1   IE0   IT0:都是用于外部中断

TMOD各位介绍:

   高四位:

         GATE:当GATE=0时,T1的启动仅受TCON的TR1控制,TR1置1,则T1启动;当GATE=1时,要采样外部中断引脚INT0或INT1引脚的电平,若为高电平,则当TR1=1,则启动。

       CT:工作模式选择位;当CT=1,计数器模式;当CT=0,定时器模式。

       M1 M0:工作方式选择位;每个定时器/计数器都有四种工作方式

流程:

以方式1举例,即当M1= 0,M0 = 1时;此时定时计数器为16位,如下图

若GATE = 0;TR0 = 1;T0启动,TL0开始在机器周期的作用下加1;当TL0加满时,便向TH0进1;当TH0加满时,TF0置1;当TF0置1,便会向CPU发出中断申请。

若GATE = 1;TR0 = 1;此时要看外部引脚INT0是否为高电平;若为高电平,T0启动,开始加1;


初始值的设定:

1.当初始值不设定时,默认为0;

2.假设晶振周期为12MHZ,则机器周期=12*(1/12MHZ)=1us;当记满定时器时需要65536-1个数,每个机器周期会加1个数,所以如果初值为0的话,大概需要65.5ms后就可以产生中断,倘若我们要定时50ms的话,就用(65535-50000)/256的值赋给RH;将(65535-5000)%256的值赋给RL;因为RL是低八位,所以存余

猜你喜欢

转载自blog.csdn.net/Xiao_peng117/article/details/78650626