logo

新手必学经典项目之51单片机定时器计数器

新手必学经典项目之51单片机定时/计数器

定时/计数器是一种计数装置,若对内部时钟脉冲计数,可视为定时器;若对外部时钟脉冲计数,可视为计数器

///插播:我自己在今年年初录制了一套还比较系统的入门单片机教程,想要的同学找我拿就行了免費的,私信我就可以~点我头像黑色字体加蚣重呺也能领取哦///

定时/计数器的应用可以采用中断的方式当定时或计数达到时产生中断,另外也可以采用询问的方式,不断询问计数状态,以控制程序流程。

8051计数寄存器THxTLx8位的寄存器x=1x=0

8051的定时/计数器

8051单片机216位定时/计数器:定时0Timer0)和定时1Timer1)简T0T18052在包含T0T1还有一Timer 2T2)。这三个定时/计数器都可作为内部定时器或外部计数器

若是作为内部定时器时,是计数内部的脉冲。12MHz的计数时钟脉冲系统为例,12MHz/12送入定时器,此时定时器所计数的脉冲周期1us。若采16位的定时模式,则最多可计65536个脉冲(2^16),0.0655s

若作为外部计数器时,则是计数T0T1引脚送入的脉冲。同样的,若采16位的定时模式,最多可计655362^16)个计数量。

定时/计数器模式寄存TMOD

定时/计数器模式寄存TMOD主要设定定时/计数器的工作模式、计数信号来源及启动方式等。

TMOD模式寄存器的低四T00-3)配置定时/计数0Timer0)的工作模式,高四T14-7)配置定时/计数1Timer1)的工作模式,这两部分的结构类似,只是控制的对象不同。

我们以高四位为例来了TMOD模式寄存器的使用,即使T 1T0一样的用法):

GATETimer的门控开关,用来决Timer 1T 1)的启动方式。

GATE = 0,则只 TR1 = 1,即可启Timer 1,称为内部启动或软件启动;

GATE = 1,则需 TR1 = 1,还要等待外部中断引INT1为高电平Timer 1才能启动工作,称为外部启动或硬件启动。

C/TCount/Timer)定时/计数器切换开关C/T=0为内部定时器,用来计OSC/12的脉冲C/T=1为外部计数模式,用来计数T 1P3.5)引脚输入的脉冲;

M0,M1/计数模式选择开关

Mode0M1 = 0,M0 = 0):

提供两13位定时/计数器Timer 0/Timer 1),如前所述,计数量分别存放TH1TL18位计数寄存器里。其TH18TL15

如前所述,若要执行定时功能,C/T设定0,计数内部脉冲;若要执行计数功能,设C/T1,计数外部脉冲信号。

启动方式为外部启动时:设GATE = 1TR1=1,再等待外部中断引INT1输入高电平,即可启 Timer 1

启动方式为内部启动时:设GATE = 0TR1=1,即可启 Timer 1

Mode1M1 = 0,M0 = 1):

提供两16位定/计数器,计数量分别存放THxTLx8位计数寄存器里。

Mode 1下的定时/计数器的工作模式切换、启动方式等Mode 0完全一样Mode 1计数量更大,所以完全可以替Mode 0

Mode 2M1 = 1,M0 = 0):

提供两8位可自动加载的定时/计数器Timer 0 Timer 1),其计数寄存器里的计数量放置TLx里,当改定时/计数器中断时,会自动THx计数寄存器里的计数量载入TLx里。由于计数只用8位,所以其最大计数256

Mode 2下的定时/计数器的工作模式切换、启动方式等Mode 0完全一样。

Mode 3M1 = 1M0 = 1):

此工作模式是一种特殊的模式,提供一8位的定时/计数 Timer 0和一8位的定时Timer 1

Timer 0除了不具有自动加载功能外,Mode 2Timer0几乎完全一样。

Timer 1定时器也几乎可以Mode 2Timer 1所取代。

定时/计数器控制寄存TCON

寄存TCON的高四位一共定时/计数器的启动开关和中断时的标志位,低四位为外部中断触发控制位和外部中断请求标志位,如下图:

TF1:定时Timer 1中断(溢出)标志位。Timer 1时,由硬件自动设TF1= 1,并CPU申请中断Timer 1中断结束时CPU自动TF1清零TF1也可以用软件清零。

TR1:定时Timer 1启动开关TR=1Timer 1启动TR1=0Timer 1

TF0:定时T0溢出标志位。其功能TF1相同。

TR0:定时T0运行控制位。其功能TR1相同。

IE1:外部中1INT1)标志位。

IT1:外部中1INT1)触发方式控制位。

IE0:外部中0INT0)标志位。

IT0:外部中0INT0)触发方式控制位。

计数寄存器:

8051的计数寄存器THxTLx8位寄存器,除Mode 3之外TH0TL0Timer 0所使用的计数寄存器TH1TL1Timer 1所使用的的计数寄存器。若8052Timer 2所使用TH2TL2

8051定时/计数器是一种正数计数器。当计数到满(溢出)时,即产生中断。我们计数时用该模式下的最大计数量减去所需计数,即从终点往前推,比如最大计数量100,需要计40,则60处开始计数。

不同模式下的最大计数量不同,设定方式也有差异。

下面对各个模式下计数寄存器分别做说明:

Mode 0

Mode 0 TLx计数寄存器只使52^5 = 32,我们要把计数起点的值除32,其余数放TLx计数寄存器;其商放THx计数寄存器。例如要使Timer 06000,则:

TL0 =8192 - 6000% 32//5

TH0 =8192 - 6000/ 32//8

Mode 1

在此模式下TLxTHx计数寄存器都8位,2^8=256,同样使Timer 06000

TL0 =65536 - 6000% 256

TH0 =65536 - 6000/ 256

Mode 3

在此模式下,使TL0计数寄存器作为第一个定时/计数器的计数量,TH0计数寄存器作为第二个定时器的计数量,用到哪个就填入哪个。两个都用到就TL0TH0分别填入对应的值。填入方法Mode 2一样。

定时/计数器的使用

定时/计数器有两种使用方式:中断和查询

中断:包括定时/计数器中断的设定、计数量的设定、启动设定及中断子程序的编写

查询:只要设定计数量及启动,然后判断定时/计数器的标志位TFx)是否动作,接着程序流程的跳转。

中断设定(关8051的中断就不展开了):

中断的设定包括开启开关IE寄存器的设定)、中断优先级的设定(IP寄存器的设定)、中断信号的设定TCON寄存器的设定)等。例如要开启中断总开关T0开关IE为中断启用寄存器IP为中断优先级寄存器):

IE=0x82//打开中断总开关及启T0中断

T0中断设定高优先级,并设定为内部定时器,软件启动方式,采Mode 1

IP=0x02;//T0中断高优先级

TMOD = 0x01;//设定为内部定时器、软件启动Mode 1

计数量设定(略,见上文)

定时/计数器启动

TRx=1//Timer x

中断子程序

中断程序格式void +函数+interrupt +05

0外部中INT0

1定时/计数TF0

2外部中INT1

3定时/计数TF1

4串行TI/RI

5定时/计数TF2/EXF2(8052)

注意区分定时/计数器的中断编号与外部中断编号,定时0的中断编号1,定时1的中断编号3,定时2的中断编号5

如:

void my_INT (void) interrupt 3 //Timer 1溢出中断子程序

{

.//中断子程序逻辑代码

}

上一篇:制冷剂的选用标准有哪些?CRR广州中冷制冷剂选择分享 下一篇:浮标液位计的原理和选型
最新资讯