延时子程序法需要独占较多CPU机时,而定时/计数器法属于软硬件相结合的方法,在定时/计数器初始化设置后便无需CPU的干预,从而可节约大量CPU机时。
其主要原因是,定时器中用于计数累加的脉冲来自系统的时钟分频脉冲,由于其脉冲的周期是固定的,故计数结果也可用作定时;而计数器中用于计数累加的脉冲是来自引脚上的外部脉冲,因脉冲周期不确定故不能用于定时。
定时器的定时时间与定时器字长、计数初值和时钟频率3个因素有关,而计数器的定数次数仅与计数器字长和计数初值有关,与时钟频率无关。
51单片机有2个16位的定时/计数器T0和T1,其中T0由2个8位的寄存器TH0和TL0组成,字节地址是8CH和8AH;T1由2个8位的寄存器TH1和TL1组成,字节地址是8DH和8BH。
有限制。这是因为单片机检测一个负跳变脉冲需要2个机器周期的时间,如果被测脉冲频率过高(即周期过短),在单片机时钟频率一定时就会无法满足上述要求。
可参考本章实例6的做法,利用在中断函数中统计定时器溢出次数的办法进行长时间定时,其定时长度在理论上是没有限制的。
采用定时方式2,初始化时将计数初值分别存入两个8位的定时寄存器,如TH0和TL0。当TL0计满溢出时TH0会自动将其初值重新装入TL0中。重新装入的过程不改变TH0中的值,故可多次循环重装入,直到命令停止计数为止。
可以采取两种检测方法,其中查询法是用软件方式检查溢出标志位的状态,但也必须用软件方式使溢出标志清0;中断法则是由系统自动检查溢出标志位的状态,并由硬件清0溢出标志位。前者编程简单但程序执行效率不高,而后者编程有些难度但程序执行效率高。
根据定时/计数器工作原理,当GATE=TR0=1时允许/INT0脉冲控制定时器的启停。为此,可以将被测脉冲接在/INT0引脚上,当/INT0出现下降沿脉冲时会启动T0进行时钟脉冲统计。当/INT0出现上升沿脉冲时会中止T0定时。此时T0中的计数值可以换算成被测脉冲的宽度。
将按计数器最大字长确定的计数初值装入T0或T1并启动计数器后,一个外部脉冲的到来就能使T0或T1溢出并发出中断请求,其作用就相当于扩展了/INT0或/INT1中断源。
定时/计数器的中断请求被响应后,系统可自动使TF0和TF1硬件清0,从而撤销定时/计数器的中断请求。