51单片机的定时器/计数器

2023-05-16

7.2.2 定时器/计数器的结构

51单片机的定时器/计数器结构如图7-7所示。
T0由特殊功能寄存器TH0、TL0构成。
T1由特殊功能寄存器TH1、TL1构成。
在这里插入图片描述
T0 和T1都具有定时器和计数器两种工作模式,4种工作方式(方式0~3)。属于增计数器。
特殊功能寄存器TMOD用于选择T0、T1的工作模式和工作方式。特殊功能寄存器TCON用于控制T0、T1的启动和停止计数,同时包含了T0、T1的状态。T0、 T1不论是工作在定时器模式还是计数器模式,实质是对脉冲信号进行计数,只不过计数信号的来源不同。
计数器模式是对加在T0(P3.4)和T1(P3.5)两个引脚上的外部脉冲进行计数。
定时器模式是对单片机的系统时钟信号经片内12分频后的内部脉冲信号(机器周期)计数。由于时钟频率是定值,所以可根据对内部脉冲信号的计数值可计算出定时时间。
计数器的起始计数是从初值开始。单片机复位时计数器初值为0,也可用指令给计数器装入一个新的初值。

7.2.3 定时器/计数器的控制寄存器与工作方式

1. 定时/计数器工作方式控制寄存器TMOD

TMOD是一个不可以位寻址的8位特殊功能寄存器,字节地址为89H,其高4位专供T1使用的,其低4位专供T0使用的,见表7-8。
在这里插入图片描述
8位分为两组,高4位控制T1,低4位控制T0。
下面对TMOD的各位给出说明。
(1)GATE—门控位
GATE=0时,仅由运行控制位TRx(x = 0,1)来控制定时器运行。
GATE=1时,用外中断引脚INT0*(或INT1* )上的电平与运行控制位TRx共同控制定时器运行。
(2)M1、M0—工作方式选择位
M1、M0的4种编码,对应于4种工作方式的选择,如表7-9所示。
在这里插入图片描述
(3)C/T* —计数器模式和定时器模式选择位
C/T*=0,为定时器工作模式,对单片机的晶体振荡器12分频后的脉冲进行计数。
C/T*=1,为计数器工作模式,计数器对外部输入引脚T0(P3.4)或T1(P3.5)的外部脉冲(负跳变)计数。

2. 定时器/计数器控制寄存器TCON

TCON字节地址为88H,可位寻址,位地址为88H~8FH,格式如表7-10所示。
在这里插入图片描述
7.1节介绍了与外部中断有关的低4位。这里仅介绍与定时器相关的高4位功能。
(1)TF1、TF0—计数溢出标志位
当计数器计数溢出时,该位置“1”。使用查询方式时,此位作为状态位供CPU查询,但应注意查询有效后,应使用软件及时将该位清“0”。使用中断方式时,此位作为中断请求标志位,进入中断服务程序后由硬件自动清“0”。
(2)TR1、TR0—计数运行控制位
TR1位(或TR0位)=1,启动定时器工作的必要条件。
TR1位(或TR0位)=0,停止定时器工作。
该位可由软件置“1”或清“0”。

3. 定时器/计数器的4种工作方式

(1) 方式0
当M1、M0为00时,定时器/计数器被设置为工作方式0,这时定时器/计数器的等效逻辑结构框图如图7-9所示(以定时器/计数器T1为例,TMOD.5、TMOD.4 = 00)。
在这里插入图片描述
方式0时,为13位计数器,由TLx(x = 0,1)的低5位和THx的高8位构成。TLx低5位溢出则向THx进位,THx计数溢出则把TCON中的溢出标志位TFx置“1”。计数值的范围为1~8192,当溢出时其计录脉冲的个数为:
S=8192-X ,式中X为T0(或T1) 计数初值。

TLx=(213一X) /32			//	取5位的余数
THx=(213一X)/32			//	取5位的商

图7-9中, C/T*位控制的电子开关决定了定时器/计数器的两种工作模式。
①C/T*=0,电子开关打在上面位置,T1(或T0)为定时器工作模式,把时钟振荡器12分频后的脉冲作为计数信号。
②C/T*=1,电子开关打在下面位置,T1(或T0)为计数器工作模式,计数脉冲为P3.4(或P3.5)引脚上的外部输入脉冲,当引脚上发生负跳变时,计数器加1。
GATE位状态决定定时器的运行控制取决于TRx一个条件,还是取决于TRx和INTX* (x = 0,1)引脚状态这两个条件
①GATE=0时,A点(见图6-4)电位恒为1,B点电位仅取决于TRx状态。TRx = 1,B点为高电平,控制端控制电子开关闭合,允许T1(或T0)对脉冲计数。TRx = 0,B点为低电平,电子开关断开,禁止T1(或T0)计数。
②GATE=1时,B点电位由INTX*(x = 0,1)的输入电平和TRx的状态两个条件来定。当TRx=1,且INTX*=1时,B点才为1,控制端控制电子开关闭合,允许T1(或T0)计数。故这种情况下计数器是否计数是由TRx和INTX*两个条件来共同控制。

(2) 方式1
当M1、M0为01时,工作于方式1,方式1的等效电路逻辑结构如下图所示。
在这里插入图片描述
方式1和方式0的差别仅仅在于计数器的位数不同,方式1为16位计数器,由THx高8位和TLx低8位构成(x = 0,1),方式0则为13位计数器,有关控制状态位的含义(GATE、C/T*、TFx、TRx)与方式0相同。
在方式1下当为定时工作方式时,定时时间的计算公式为:

T=(2^16-X)× Ts 

其中X为T0(或T1) 计数初值,Ts为机器周期。当为计数工作方式时, S=216一X ,式中X为T0(或T1) 计数初值, 计数值的范围为1~65536(216)。在方式1中TLx和THx计数寄存器各使用8位,而28=256,所以把计数起点的值除以256,其余数放入TLx计数寄存器,其商放入THx寄存器中。

TLx=(2^16-X) /256	//取8位的余数
THx=(2^16-X)/256	//取8位的商

(3) 方式2
方式0和方式1的最大特点是计数溢出后,计数器为全0。因此在循环定时或循环计数应用时就存在用指令反复装入计数初值的问题。这不仅影响定时精度,也给程序设计带来麻烦。方式2就是解决此问题而设置的。
当M1、M0为10时,定时器/计数器处于工作方式2,这时定时器/计数器的等效逻辑结构如图7-10所示(以定时器T1为例,x = 1)。
在这里插入图片描述
定时器/计数器的方式2为自动恢复初值(初值自动装入)的8位定时器/计数器,TLx(x = 0,1)作为常数缓冲器,当TLx计数溢出时,在溢出标志TFx置“1”的同时,还自动将THx中的初值送至TLx,使TLx从初值开始重新计数。定时器/计数器的方式2工作过程如右图所示。
此工作方式可省去用户软件中
重装初值的指令的执行时间,
简化定时初值的计算方法,
可相当精确地确定定时时间。
在这里插入图片描述
(4) 方式3
方式3是为了增加一个附加的8位定时器/计数器而设置的,从而使AT89S51单片机具有3个定时器/计数器。方式3只适用于定时器/计数器T0,定时器/计数器T1不能工作在方式3。T1处于方式3时相当于TR1 = 0,停止计数(此时T1可用来作为串行口波特率产生器)。
在这里插入图片描述
①工作方式3下的T0
当TMOD的低2位为11时,T0的工作方式被选为方式3,各引脚与T0的逻辑关系如图7-11所示。
T0分为两个独立的8位计数器TL0和TH0,TL0使用T0的状态控制位C/T*、GATE、TR0,而TH0被固定为一个8位定时器(不能作为外部计数模式),并使用T1的状态控制位TR1和TF1,同时占用T1的中断请求源TF1。
当T0设置在方式3时,再把T1也设置成方式3,此时T1停止计数。

4. 对外部输入的计数信号的要求

当定时器/计数器工作在计数器模式时,计数脉冲来自外部输入引脚T0或T1。当输入信号产生由1至0的跳变(即负跳变)时,计数器值增1。每个机器周期的S5P2期间,都对外部输入引脚T0或T1进行采样。如在第一个机器周期中采得的值为1,而在下一个机器周期中采得的值为0,则在紧跟着的再下一个机器周期S3P1期间,计数器加1。
由于确认一次负跳变花2个机器周期,即24个振荡周期,因此外部输入的计数脉冲的最高频率为系统振荡器频率的1/24

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

51单片机的定时器/计数器 的相关文章

随机推荐

  • angularjs设置请求头信息

    本文部分转自 xff1a http blog csdn net magiclr article details 49643277 最近开发中遇到一个问题 xff0c 需要在模块A发出的请求头信息中添加token属性 如图所示 xff1a 简
  • angularjs 正则判断用户输入的内容只能是数字或者字母

    lt input span class hljs keyword class span 61 span class hljs string 34 form control 34 span placeholder 61 span class
  • echarts 力导向图

    首先放上大佬文章链接 xff1a http blog csdn net u010430471 article details 52955131 https www cnblogs com koala2016 archive 2016 12
  • echarts力导向图区分鼠标点击事件与拖拽事件(angularjs)

    使用echarts的力导向图做了一个知识图谱 xff0c 要求点击节点的时候 xff0c 把节点的数据作为关键词搜索 知识图谱 xff0c 以前没做过 xff0c 也不知道用什么好 xff0c 百度了一下看到有人说用echarts可以做 x
  • 2018前端笔试面试题整理

    最近好几个前端的朋友都在换工作 xff0c 根据她们的面试经验整理了一些前端笔试面试题 毕竟人少 xff0c 面的公司也少 xff0c 所以并不全面 开放性题目 xff1a 1 你在现在的团队处于什么样的角色 xff0c 起到了什么明显的作
  • docker容器网络

    在安装docker时 xff0c 会自动在host主机上创建三个网络 xff0c 用docker network ls可以进行查看 xff1a docker network ls NETWORK ID NAME DRIVER SCOPE b
  • IOS开发入门(11)-导航控制器(1)

    IOS开发入门 xff08 11 xff09 导航控制器I xff1a 层级结构和标签 前言 xff1a xff08 直接从书上抄的 xff09 大多数应用程序是由主视图导出多个屏幕 xff0c 并且通常情况下实现屏幕切换的方法还不止一种
  • IOS开发入门(12)-表视图I:基础知识

    IOS开发入门 xff08 12 xff09 表视图I xff1a 基础知识 在前面几部分中 xff0c 主屏幕只能展示一个汽车对象的信息 而在实际iOS中 xff0c 一次显示多条数据并实现滚动查看是十分常见的 xff0c 例如通讯录 音
  • C语言基础专题 - 头文件引用

    C语言基础专题 头文件引用 jcLee的个人博客 xff1a https blog csdn net qq 28550263 spm 61 1001 2101 3001 5343 邮箱 xff1a 291148484 64 163 com
  • Vue3 配置代理和使用全局axios请求数据

    更详细请参考 xff1a https blog csdn net qq 28550263 article details 120633610 vue3中配置全局代理和使用axios向服务器请求数据 main ts span class to
  • ros(13):ros找不到包报错及解决办法--Config.cmake

    目录 一 基础包 1 1 rospy包 1 2 tf包 1 3 grid map包 1 4 serial 二 专有包 2 1 dynamic reconfigure包 2 2 rosparam handler包 2 3 qt build包
  • 使用Java实现高效的字符串匹配算法

    摘要 xff1a 字符串匹配是计算机领域中的一个重要问题 xff0c 有着广泛的应用场景 在本篇博客文章中 xff0c 我们将介绍几种高效的字符串匹配算法 xff0c 并给出使用Java语言实现的代码示例 xff0c 希望能对读者理解和应用
  • WebDAV是什么

    WebDAV学习及使用 WebDAV是什么WebDEV怎么用各个设备连接1 Window2 MAC WebDAV是什么 基于Web的分布式编写和版本控制 xff08 WebDAV xff09 是超文本传输协议 xff08 HTTP xff0
  • 【计算机基础】整数的补码表示及负整数的左右移

    作者 xff1a LogM 本文原载于 https segmentfault com u logm articles xff0c 不允许转载 文章难免有错误之处 xff0c 请在原文评论处指出 1 补码的表示形式 计算机中整数用补码表示 举
  • Linux 获取内存页大小

    如何查看Linux系统的内存页大小 xff1a 1 getconf PAGESIZE PAGE SIZE 返回值单位为Bytes 点击 此处 折叠或打开 root 64 localhost nginx 1 8 0 getconf PAGES
  • Linux C++服务端开发教程(四) 内存泄露检查

    如何知道内存泄漏 我们如果不去特意查内存泄漏 xff0c 实际上是很难发现的 xff0c 因为这个程序即使发生内存泄漏 xff0c 他也不会有任何特征 泄漏速度不是很快 xff0c 知道某一天 xff0c 我们发现系统运行变慢了 xff0c
  • ubuntu18.04 docker开启2375远程端口

    docker开启2375端口 查询docker服务 查询docker服务 systemctl status docker service 可以看到 docker service 在 etc systemd system 目录下 xff0c
  • 【银河麒麟V10】【服务器】最小化系统安装桌面环境

    1 先制作本地镜像源 本地镜像源搭建方法可参考 xff1a 麒麟V10服务器搭建本地镜像源 https mp csdn net mp blog creation editor 120703047 2 安装桌面环境 yum grouplist
  • 第三方登录之数据库设计

    第三登录之数据库设计 现在很多网站和应用都会接入第三方登录来减少用户注册 xff0c 即方便又快捷 比如说qq登录 xff0c 微信 xff0c 新浪微博等方式 关于第三方登录数据库设计 xff0c 涉及到2张表的设计 xff0c 一张用户
  • 51单片机的定时器/计数器

    7 2 2 定时器 计数器的结构 51单片机的定时器 计数器结构如图7 7所示 T0由特殊功能寄存器TH0 TL0构成 T1由特殊功能寄存器TH1 TL1构成 T0 和T1都具有定时器和计数器两种工作模式 xff0c 4种工作方式 xff0