本文围绕单片机定时/计数器展开,介绍了工作方式寄存器 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等(不关中断),减少闪烁。
-
定时扫描按键
2932

被折叠的 条评论
为什么被折叠?



