本质上,定时器/计数器是加1计数器,就是来一个脉冲加一个数。我们可以将定时器/计数器比作一个水缸,每个水缸可以存储的水量是一定的,水缸越大,能存储越多的水;水缸越小,则存储的水量越小。同时,初始状态时水缸是空还是有一定水量,将会影响到接下来往水缸里注入的水量。我们还知道:当水缸满了,这时如果你还继续往水缸中注水,则水缸就会“溢出”。
单片机的定时器/计数器与水缸是类似的。我们的对象STC15F2K60S2单片机片内有3个定时器/计数器,分别是T0、T1和T2,都是16位二进制的。16位意味着能存储如表5-1所示的数据范围。
表5-1 16位定时器/计数器能存储的数据范围
由此可见,十六位的定时器最多可以累计65535+1=65536个脉冲。这种情况下,定时器一开始是“空的”(16个“0”,对应十六进制0x0000),然后每来一个脉冲执行一次加1操作,加到“满的”(16个“1”,对应十六进制0xffff),这时如果再加1,则定时器就“溢出”了。这个“溢出”是一个重要标志,它告诉CPU:时间到了。
对十六位的定时器而言,最大值是固定的,即16个“1”,对应十六进制形式0xffff,这时如果还来一个脉冲,则发生“溢出”,定时器重新从刚开始的值(称为“初值”)继续每来一个脉冲执行一次加1操作。但“初值”则是可以根据需要进行设定的,而不一定是最小的16个“0”。例如,定时器的“初值”设为65530,则要发生溢出,定时器需要计65535-65530+1=6个脉冲。这样,通过合理设定不同的“初值”,我们就可以实现从1~65536任意数进行计数。
想一想(www.xing528.com)
什么情况下,定时器只要计一个脉冲就会发生溢出?什么情况下,定时器必须计65536个脉冲才会溢出?什么情况下,定时器计10000个脉冲发生溢出?
定时器/计数器本质是加1计数器,即每来一个脉冲就加1。如果每个脉冲的周期是固定的,则可以实现定时功能。比如每个脉冲的周期为1μs,若定时器每计10000个脉冲发生溢出,则可实现1×10000μs=10000μs=10ms的定时。如果每个脉冲的周期是随机的,则可实现计数功能。
想一想
1.如果脉冲的周期是1μs,则对十六位的定时器而言,最多可以定时多长时间?
2.如果脉冲周期分别是1μs、2μs,要定时10ms,对十六位的定时器,分别要从哪个“初值”开始计数?
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。