1、要学习定时器,首先要学会中断,不会中炝里谧艮断没法学定时器。比如这里有个任务:一边执行流水灯,一边检测按键,在数码管上输出按键值。要璜模惜割完成这个任务,就可以用到定时器(就是两项任务同时进行,对数码管动态扫描很有帮助)。首先,接上电路板,打开keil。把按键、数码管的部分自己做好(如果你做不好还是别学定时器了,先看看基础吧!)
2、没问题了以后,我们看一下定时器系统。猱蝰逾鸾51单片机内部共有两个16位可编程定时器,定时器T0和T1。52单片机内羿约妫鳏部多一个T2定时器。它们既有定时器功能又有计数功能,通过设置与它们相关的特殊功能寄存器可以选择启用定功能或计数功能,所以通常也把定时器称为计数器。当单片机内部的CPU设置开启定时器后,定时器就会在晶振的作用下自动开始计时,当定时器的计数器记满后,就会发生中断,所以我说不会中断是学不会定时器的。
3、我们先来说一下寄存器。定时器的实质是加1计数器,16位。由高8位和低8位两个寄存器组成。TMOD是定时器的工作方式寄存器,他用来确定工作方式和功能。TCON是控制寄存器,控制两个定时器的启动、停止和溢出后中断。
4、下面,再给大家看一下寄存器TMOD:
5、寄存器TCON:
6、下面介绍一下原理。
7、到这里介绍完了,我上一段代码,这是定时器中断控制流水灯的:#include<reg52.h>#include<intrins.h>#define uchar unsigned charuchar n,a=0xfe;void main(){ TMOD=1; TH0=76;//刚才那个式子算的 TL0=208; EA=1; ET0=1; TR0=1; while(1) { if(n==20)//1秒 不懂的仔细看看我写的原理 { n=0; P1=a; a=_crol_(a,1); } }}void time() interrupt 1{ TH0=76;//装初值 TL0=208; n++;}