51单片机的定时器

        本文围绕单片机定时/计数器展开,介绍了工作方式寄存器 TMOD 与控制寄存器 TCON。TMOD 用于设置定时/计数器工作方式,不可位寻址,通过不同位设置定时器的工作模式等;TCON 包含中断请求标志位与运行控制位等,可控制定时/计数器启动、停止及反映溢出等状态。阐述了中断服务程序中 main 函数与中断函数的特殊跳转机制,由单片机硬件自动操控两者切换。说明了定时器初始化步骤,包括设置 TMOD 寄存器、计算初值、开放中断及启动定时器,并介绍了定时器初值计算方法。同时详细介绍了定时/计数器的四种工作方式,即方式 0(13 位计数)、方式 1(16 位计数)、方式 2(自动重装初值的 8 位计数)、方式 3(仅适用于 T0,分成两个独立 8 位计数器),其中方式 1 和方式 2 应用较多。最后提及定时器 2 的妙用但未展开详述。

1、工作方式寄存器TMOD

工作方式寄存器TMOD用于设置定时/计数器的工作方式,低四位用于T0,高四位用于T1。不能进行位寻址,如果设置定时器0为工作方式1的话就是0x01,即0000 0001高四位(定时器1可以理解为没有设置,其实0000是定时器1的方式0)是0,低四位0001是GATE=0,C/T=0选择为定时模式,M1M0=01是16位定时器,其格式如下:

GATE:门控制位。GATE=0时,只要用软件使TCON中的TR0或TR1为1,就可以启动定时/计数器工作;GATA=1时,要用软件使TR0或TR1为1,同时外部中断引脚也为高电平时,才能启动定时/计数器工作,即此时定时器的启动多了一条件。

C/T:定时/计数模式选择位。C/T=0为定时模式;C/T=1为计数模式。

M1M0:工作方式选择位。定时/计数器有四种工作方式,由M1M0进行设置。

2、控制寄存器TCON

TF1(TCON.7):定时器1(T1)溢出中断请求标志位。T1计数溢出时由硬件自动置TF1为1。CPU响应中断后TF1由硬件自动清0。T1工作时,CPU可随时查询TF1的状态。所以,TF1可用作查询测试的标志。TF1也可以用软件置1或清0,同硬件置1或清0的效果一样。

TR1(TCON.6):T1运行控制位。TR1置1时,T1开始工作;TR1置0时,T1停止工作。TR1由软件置1或清0。所以,用软件可控制定时/计数器的启动与停止。

TF0(TCON.5):定时器0(T0)溢出中断请求标志位,其功能与TF1类同。

TR0(TCON.4):T0运行控制位,其功能与TR1类同。

IE1(TCON.3),外部中断1中断请求标志位。

IT1(TCON.2),外部中断1触发方式控制位。

IE0(TCON.1),外部中断0中断请求标志位。(在IT0下当INT0(外部中断0)为低电平或从高到低的负跳变时,IE0置1)

IT0(TCON.0),外部中断0触发方式控制位。当IT0=0时,为电平触发方式。当IT0=1时,为跳边沿触发方式(下降沿有效)。

中断服务程序

可以看出“main函数”与“中断函数”在软件上看不到任何关联,既不存在“main函数”调用“中断函数”,也不存在“中断函数”调用“main函数”的情况,在观感上,“main函数”与“中断函数”仿佛是隔离的毫无“物理连接”的,为什么单片机还能在“main函数”与“中断函数”两者中切换自如?没错,“main函数”与“中断函数”在书写上是隔离的毫无关联的,但是它们之间之所以能相互切换,是因为背后有一只无形的手在自动操控这一切,这只手就是单片机硬件自身,这是一种特殊机制,也可以理解成一种特殊的游戏规则,我们只要遵守就好了,除了普通函数,其它凡是中断函数的,都不用跟main函数发生软件上的关联调用,它们之间的切换都是硬件自动完成的,这就是main函数与中断函数的特殊跳转机制(或者称为游戏规则也可以)

定时器初始化步骤

①初始化TMOD寄存器,确定定时器1(T1)和定时器0(T0)的工作方式,如TMOD=0x01,就是设置定时器0为工作方式1;

②计算初值,THX=(65536-50000)/256;TLX=(65536-50000)%256;就是将定时器定时为50ms(12MHz的晶振);

③开放中断,EA=1;ET0=1;开总中断和定时器0中断;

④启动定时器,TR0=1;启动定时器0。

定时器初值计算:

1.机器周期的概念,它是 CPU 完成一个基本操作所需要的时间。 其计算公式是:机器周期 =1/单片机的时钟频率。

2.51 单片机内部时钟频率是外部 时钟的 12 分频,也就是说当外部晶振的频率输入到单片机 里面的时候要进行 12 分频。比如说你用的是 12MHZ 晶振,那么单片机内部的时钟频率 就12/12MHZ,

3.当你使用 12MHZ 的外部晶振的时候,机器周期=1/1M=1us。如果我们想定时 1ms 的初值是多少呢?1ms/1us=1000。也就是要计数 1000 个,初值=65535-1000+1(因为实际上计数器计数到 66636(2 的 16 次方)才溢出,所以后面要加 1) =64536=FC18H,

所以初值即 为 THx=0XFC,TLx=0X18。

定时/计数器的工作方式:

1.方式 0:

方式 0 为 13 位计数 ,由 TL0 的低 5 位 (高 3 位未用)和 TH0 的 8 位组成 。TL0 的低 5 位溢出时向 TH0 进位,TH0 溢出时,置位 TCON 中的 TF0 标志,向 CPU 发出中断请求。其结构图如下所示:

计数初值与计数个数的关 系为:X=2(13)-N。

2.方式 1:

方式 1 的 计数位数是 16 位 ,由 TL0 作为低 8 位 , TH0 作为高 8 位 ,组成了 16 位加 1 计数 器。其结构图如下所示:

计数初值与计数个数的关 系为:X=2(16)-N。

3.方式 2:

方式 2 为 自动重装初值的 8 位计数方式 。工作方式 2 特别适合于用作较 精确的脉冲信号发生器。其结构图如下所示:

计数初值与计数个数的关系为:X=2(8)-N。

4.方式 3:

方式 3 只适用于定时/计数器 T0 , 定时器 T1 处于方式 3 时相当于 TR1=0, 停止计数。工作方式 3 将 T0 分成为两个独立的 8 位计数器 TL0 和 TH0 。其 结构如下所示:

这几种工作方式中应用较多的是方式 1 和方式 2。定时器中通常使用定时器方式 1,串口通信中通常使用方式 2

定时器2的妙用

  • 用定时器2来定时刷新数码管,led等(不关中断),减少闪烁。

  • 定时扫描按键

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值