前面两种工作方式只能进行一次计数或定时,若要进行多次计数或定时,可让定时/计数器工作在方式2下。当M1=1、M0=0时,定时/计数器工作在方式2,它为8位自动重装计数器。定时/计数器工作在方式2时的电路结构如图5-7所示(以定时/计数器T0为例)。
图5-7 定时/计数器T0在方式2时的电路结构
在方式2时,16位定时/计数器T0分成TH0、TL0两个8位计数器,其中TL0用来对脉冲计数,TH0用来存放计数器初值。在计数时,当TL0计数溢出时会将寄存器TCON的TF0位置“1”,同时也控制TH0重装开始,将TH0中的初值重新装入TL0中,然后TL0又开始在初值的基础上对输入脉冲进行计数。
定时/计数器T0工作在方式2时的计数初值和定时初值的计算分别如下:
计数初值=28-计数值
定时初值=28-计数值=28-t·fosc/12
【例5-2】 如图5-6所示,利用定时/计数器使P2.7端口输出10kHz的脉冲信号。(www.xing528.com)
解答:10kHz方波脉冲信号的周期为100μs,它的高电平和低电平持续时间都是50μs。也就是说,只要让P2.7端口输出的高、低电平交替持续50μs,该端口就能输出10kHz的方波脉冲信号。
实现该功能可以应用定时/计数器,由于高、低电平持续时间短,并且反复循环,故可让定时/计数器工作在方式2(8位自动重装计数器)。为了让定时/计数器在50μs就能溢出,需要对定时/计数器设置定时初值。
定时初值=28-t·fosc/12=256-50×10-6×12×106/12=256-50=206=0CEH
定时器选择T0与T1均可,本例选择T1,实现该功能的主要程序如下:
程序说明:
前面4条指令用来设置定时/计数器(又称初始化定时/计数器),第5条指令的功能是等待定时/计数器产生溢出对TF1置位,等待时间为50μs,在这段时间里,P2.7端口一直为某电平(高电平或是低电平),50μs后定时/计数器溢出对TF1置“1”,系统马上开始执行第6条指令(将TF1清0),然后执行第7条指令,将P2.7端口的值取反,再执行第8条指令,执行完第8条指令后又跳转执行第5条指令,第5条指令又等待50μs,此时P2.7端口为取反后的值,该值会持续50μs。如此反复进行,在P2.7端口就输出了高、低电平均为50μs的10kHz方波脉冲信号。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。