2.定时器工作模式

发布日期:2020-12-26 09:10:09 来源:网络转载

1.两种“试管”

这种“试管”有65535个刻度的型号,也有255个刻度的型号,不过我们的导管水流流速是永远不变的。

如果我们用的是大试管(65535个刻度),那么溢出时间我们可以控制的长一些,也就是定时时间可以多一点。我们要是想定时36个单位刻度的时间,那就先往试管装好65500个刻度的水量先,这样等到水位到达65535那个刻度时,再加一个刻度就溢出了,这时溢出的就是36个单位刻度的时间。

“试管”每次水溢出,试管里的水就会消失不见(归0),如果我们还想定时36个单位刻度的时间,还需要重新把65500个刻度的水量再次装好给“试管”。

如果我们用的是小试管(255个刻度),虽然它的定时时间远远没有大试管的定时时间长,但是只要我们第一次装好水量,每次它溢出之后,不会马上归0,而是试管里的水重新归为我们第一次那个时候装好的水量,所以只要在第一次确定了水量,也就确定了以后的所有定时时长。

这种叫做“试管”的东西就是我们单片机内部的另一个寄存器,51单片机有两个定时器,分别叫做定时器0和定时器1,跟外部中断有 0和1的两个硬件资源一样。这里我们先拿定时器0来讲解,定时器1大体原理都一样。

 

2.“试管”的选择

而我们想选用哪个“试管”作为定时时长,首先需要初始化寄存器TMOD相对应的位的值。先看到下面这张图

8.1.png

可以看到圈出来的左右两个紫色框,4~7位是管定时器1的,0~3位是管定时器0的。

第2和第3位我们还没学到,此时不需要理会,主要看第0和第1位,这两个位决定的是我们该选用哪个“试管”。

如果M1=0,M0=1,选用的是“大试管定时模式”。

如果M1=1,M0=0,选用的是“小试管定时模式”。

因为我们暂时没有使用到定时器1,所以4~7位(俗称高4位)可以全置为0,2~3位用不到,也是置为0,我们先选择大试管作为定时时间先,所以TMOD这个寄存器初始化就是“TMOD=0x01;”

这里要注意,因为“M1”和“M0”在“#include<reg52.h>”头文件中并没有“sbit M0=TMOD^0;”的内容,所以我们初始化只能是“TMOD=0x01;”一次操作8个位,而在程序里书写“M1=0;”和“M0=1;”是错误的。

我们把使用“大试管”称为定时器的工作模式1,使用“小试管”称为定时器的工作模式2。

关键词 :
网站违法和不良信息举报邮箱:23139485@qq.com
CopyRight@2020-2030 www.haoapp8.cn All Rights Reserved.C语言学习网版权所有 粤ICP备15061369号
免责声明:本站内容来源于用户自行提供或网络收集,其真实性、准确性和合法性,www.haoapp8.cn不提供任何保证,亦不承担任何法律责任.而产生的法律关系及法律纠纷,由您自行协商解决。