定时器(1)

上一节的模块化编程,我们已经引出了定时器的影子。那这一节我们将重点讲一讲定时器的使用。

一、定时器的作用

1、首先是定时器不等于计数器,同一时间内2,这2个功能只能实现一个。2、定时器主要起到的作用时延时。和我们的延时子程序一样。但定时器的优点在于,它比延时子程序更加精确。而且最重要的是,定时器的中断不会干扰其它功能。不同于延时子程序,一旦执行,那其他功能都会停止。

二、工作原理

上图是定时期的工作原理,标准的51单片机配备2个定时器,但我的板子是多加了一个。

一、定时器工作的第一步就是启动,定时器它是一个机器,是机器就得先启动。

二、机器周期

三、初值寄存器

四、自动加一

五、溢出

我们通过上图依次解读上面五步原理。当我们给单片机通电时,TH0(高八位)和TL0(低八位)均为初值0。每经过一个机器周期,TL0就加1。(TL0加满时就开始加TH0)只到加到65535。这时高八位与第八位均位1。那么接下来在过一个机器周期,定时器就会溢出,且高低八位均为0,这就是溢出的意思。一次溢出就带表一次定时周期结束。如果我们设置机器周期为1us,那么经过65536个us一次定时结束,那就代表我们的一次定时为65.536ms。但在我们实际使用时,没有人会把一次定时周期,设为65.536ms,那假如我们像设置成50ms,又该如何操作呢。那就涉及到我们定时器初值的计算。

初值的计算、

我们知道高八位和第八位属于单片机的硬件,我们肯定无法修改。那么只能从初值考虑。也就是那65536(注意:不是65535)减去你想设置的时长,然后转换成对应的16进制。详细见上图。

最终在代码我们统一写成上述形式。

报备、

启动这一步,我们就要用到TMOD这个寄存器。前面我们说过大部分板子都有2个定时器,一个是T1,一个是T0,其中每个定时器又包含4种工作方式。至于哪种工作方式,我们主要通过操控M1和M0来实现。

方式0 便是M1,M0均位0。

方式1 M1为0,M0为1

方式2 M1为1 ,M0为0

方式3 M1为1,M0为1

至于每种方式的不同,以及各个方式的作用我们下节再讲。

启动、

启动也是很简单,如果我们想使用定时期,只要将TR0置1即可。如果想停止,那就置0。

等待、

等待即为查询定时器是否溢出。如何查询主要是观察TF0。值得注意的是TF0起始状态为0,一旦溢出则系统自动置1。所以我们通常采取手动置1。即TF0=0。(这一步又称清溢出)

重置初值、

假如我们想让定时器循环20次(如果机器周期为50ms,那循环20次就是1s),所以这就是重置初值的意义。

三、代码设计

四、总结

本节为51单片机的重点。需要了解定时器相比于延时子函数的优点。以及结合上一节的模块化编程,自己写一个定时器的模板,方便自己下次使用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值