第7章 定时器/计数器的使用与编程

7.1 定时器/计数器的定时与计数功能

8051单片机内部有T0和T1两个定时器/计数器。它们既可用作定时器,也可用作计数器,可以通过编程来设置其使用方法。

7.1.1 定时功能

1.定时功能的用法

当定时器/计数器用作定时器时,可以用来计算时间。如果要求单片机在一定的时间后产生某种控制,可将定时器/计数器设为定时器。单片机定时器/计数器的定时功能用法如图7-1所示。

图7-1 单片机定时器/计数器的定时功能用法

要将定时器/计数器T0设为定时器,实际上就是将定时器/计数器与外部输入断开,而与内部信号接通,对内部信号计数来定时。单片机的时钟振荡器可产生12MHz的时钟脉冲信号,经12分频后得到1MHz的脉冲信号,1MHz信号每个脉冲的持续时间为1μs,如果定时器T0对1MHz的信号进行计数,若从0计到65536,将需要65536μs,即65.536ms。65.536ms后定时器计数达到最大值,会溢出而输出一个中断请求信号去中断系统,中断系统接收中断请求后,执行中断子程序,子程序的运行结果将P1.0端口置“0”,该端口外接的发光二极管点亮。

2.任意定时的方法

在图7-1中,定时器只有在65.536ms后计数达到最大值时才会溢出,如果需要不到65.536ms定时器就产生溢出,比如1ms后产生溢出,可以对定时器预先进行置数。将定时器初始值设为64536,这样定时器就会从64536开始计数,当计到65536时,定时器定时时间就为1ms而产生一个溢出信号。

7.1.2 计数功能

1.计数功能的用法

如果要求单片机计数达到一定值时产生某种控制,可将定时器/计数器设为计数器。单片机定时器/计数器的计数功能用法如图7-2所示。

图7-2 定时器/计数器的计数功能用法

用编程的方法将定时器/计数器T0设为一个16位计数器,它的最大计数值为216=65536。T0端(即P3.4引脚)用来输入脉冲信号。当脉冲信号输入时,计数器对脉冲进行计数,当计到最大值65536时,计数器溢出,从而输出一个中断请求信号到中断系统,中断系统接受中断请求后,执行中断子程序,子程序的运行结果将P1.0端口置“0”,该端口外接的发光二极管点亮。

2.任意计数的方法

在图7-2中,只有在T0端输入65536个脉冲时,计数器计数达到最大值才会溢出,如果希望输入100个脉冲时计数器就能溢出,可以在计数前对计数器预先进行置数,将计数器初始值设为65436,这样计数器就会从65436开始计数,当输入100个脉冲时,计数器的计数值就达到65536而产生一个溢出信号。