嵌入式学习七-了解单片机中的特殊功能寄存器(定时器/计数器)

姓名:黄楠琳       学号:19020100011        学院:电子工程学院

转自:https://blog.csdn.net/weixin_44985601/article/details/104742909

【嵌牛导读】本篇文章介绍了单片机中特殊功能寄存器实现定时器和计数器

【嵌牛鼻子】定时器、计数器、TH、TL、TMOD工作模式寄存器、TCON定时器控制寄存器

【嵌牛提问】单片机中怎样实现定时器/计数器功能?

【嵌牛正文】

定时器/计数器简介

在单片机中,存在两个定时器/计数器,他们分别为T0和T1

在单片机中,定时器/计数器是实现精准定时、用于测量脉冲等应用

基本的定时器/计数器原理如图所示

在了解定时器/计数器之前,我们需要了解几个基本概念:

1)时钟周期:时钟周期 T 是时序中最小的时间单位,具体计算的方法就是1/ 时钟源频率【也就是晶振电路的振动频率】(一般单片机采用的是11.0592MHz)

2)机器周期:单片机完成一个操作的最短时间,一个机器周期等于12个时钟周期

定时器/计数器的实质是加1计数器(16位),由高8位和低8位两个寄存器组成(TH和TL)。TMOD是定时器/计数器的工作方式寄存器,确定工作方式和功能;TCON是控制寄存器,控制T0、T1的启动和停止及设置溢出标志。

定时器:加1计数器是对内部机器周期计数(1个机器周期等于12个振荡周期,即计数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t ,通过设定TH和TL的初值,我们就可以合理设置定时器的定时时间

计数器:计数器主要用来计输入脉冲的值。每来一个脉冲计数器加1,当加到计数器为全1(即FFFFH)时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TF0或TF1置1,向CPU发出中断请求(定时器/计数器中断允许时),单片机对外部脉冲有基本要求:脉冲的高低电平持续时间都必须大于1个机器周期。所以T0或者T1 输入的可计数外部脉冲的最高频率为当前单片机工作频率/24。

在单片机中,存在两个定时器/计数器,他们分别为T0和T1

TH与TL

在单片机中,存在4个特殊功能寄存器,主要用来实现定时器/计数器,他们分别是

通过设置TH与TL的初值,我们可以实现我们想要的定时功能、延时功能和计数功能

例如:如果我们想要实现0.02s的定时,我们可以先计数实现0.02s所需要的机器周期,假设需要的机器周期为x

x*12/11059200=0.02

–> x=18432

由于单片机存在的是16位定时器/计数器,最大能表示65535,因此当初值y=65536-18432=47104时,定时器可实现0.02s的定时,对应的16进制为0xB800,因此当我们给TH0=0xB8,TL0=0x00时,我们可实现定时器0.02s的精确定时

TMOD工作模式寄存器

TMOD是定时器、计数器模式控制寄存器(TIMER/COUNTER MODE CONTROL REGISTER),它是一个逐位定义的8位寄存器,但只能使用字节寻址,其字节地址为89H

主要用来控制定时器/计数器的工作模式

1)GATE——门控制位

GATE=0,以运行控制位TRx启动定时器;GATE=1,以外中断请求信号(INT1或INT0)启动定时器,即仅当INT0(P3.2)【INT1(P3.3)】引脚为高且TR0控制位被置1时可使定时器开始计时,常用来测量外部信号脉冲宽度

2)C/T——功能选择位

定时器或计数器选择位,该位被清零时用作定时器功能(内部系统时钟),置1时用作计数器功能

3)M0、M1——方式选择功能

MCS-51的定时器T0有4种工作方式:方式0,方式1,方式2,方式3。

MCS-51的定时器T1有3种工作方式:方式0,方式1,方式2

目前我们常用的是方式1和方式2,方式0和方式3基本不用

TCON定时器控制寄存器

TCON(Timer Control Register)定时器/计数器控制寄存器,TCON在特殊功能寄存器中,字节地址为88H,位地址(由低位到高位)为88H一8FH,可进行位寻址

TCON的作用是控制定时器的启、停,标志定时器溢出和中断情况

目前我们只了解4567位的作用,其他的暂时不做了解

1)TF位

溢出中断请求标志位,T1计数/定时溢出时由硬件自动置TF1为1,CPU响应中断后TF1由硬件自动清0,也可软件清零,可用来判别定时器/计数器的状态

2)TR位

定时器/计数器运行控制位,TR置0时定时器/计数器停止工作,置1时开始工作

定时器操作实例

对于定时器的设置,我们只需要遵循以下几个步骤:

第一:设置特殊功能寄存器TMOD,配置好工作模式

第二:设置存储器TH0与TL0的初值

第三:设置TCON,通过TR0置1来让定时器开始计时

第四:判断TCON寄存器的TF0,监测定时器溢出情况

下面,我们基于C语言来进行程序编写:以实现LED灯闪烁(周期为2s)

你可能感兴趣的:(嵌入式学习七-了解单片机中的特殊功能寄存器(定时器/计数器))