热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

51单片机(十七)——定时器2寄存器介绍及功能描述

这篇文章,我们对51单片机的定时器2的寄存器和功能进行介绍。1定时器2控制寄存器T2CON定时器2是一个16位定时器计数器,通过设置特殊功能寄存器T2

        这篇文章,我们对51单片机的定时器2的寄存器和功能进行介绍。


1 定时器2控制寄存器T2CON

        定时器2是一个16位定时器/计数器,通过设置特殊功能寄存器T2CON中的C/T2位,可将其作为定时器或计数器。定时器2有3中模式:捕获、自动重新装载(递增或递减计数)和波特率发生器,这3种模式由T2CON进行设置。T2CON寄存器的字节地址为C8H,单片机复位时T2CON全部被清0,T2CON的定义如下表所示。

定时器2控制寄存器T2CON


位序号

D7

D6

D5

D4

D3

D2

D1

D0

位符号

TF2

EXF2

RCLK

TCLK

EXEN2

TR2

C/T2

CP/RL2

TF2—定时器2溢出标志位。

定时器2溢出时置位,必须由软件清0。当RCLK=1或TCLK=1时,TF2将不会置位。

EXF2—定时器2外部标志。

当EXEN2=1且T2EX(单片机的P1.1口)的负跳变产生捕捉或重装时,EXF2置位。定时器2中断使能时,EXF2=1将使CPU进入定时器2的中断服务程序。EXF2必须用软件清0。在递增/递减计数器模式(DCEN=1)中,EXF2不会引起中断。

RCLK—接收时钟标志。

RCLK=1时,定时器2的溢出脉冲作为串行口模式1或模式3的接收时钟;RCLK=0时,定时器1的溢出脉冲作为接收时钟。

TCLK—发送时钟标志。

TCLK=1时,定时器2的溢出脉冲作为串行口模式1或模式3的发送时钟;TCLK=0时,定时器1的溢出脉冲作为发送时钟。

EXEN2—定时器2外部使能标志。

当EXEN2=1且定时器2未用作串行口时钟时,允许T2EX引脚的负跳变产生捕获或重装;当EXEN2=0时,T2EX引脚的负跳变对定时器2无效。

        这里我们要对捕获进行一下解释,通俗地讲,捕获就是捕捉某一瞬间的值,通常它用来测量外部某个脉冲的宽度或周期,使用捕获功能可以准确地测量出脉冲的宽度或周期。捕获的工作原理是:单片机内部有两组寄存器,其中一组的内部数值是按固定机器周期递增或递减的,通常这组寄存器就是单片机内部定时器的计数器寄存器(TLn,THn),当与捕获功能相关的外部某引脚有一个负跳变时,捕获便会立即将此时第一组寄存器中的数值准确地捕获,并且存入另一组寄存器中,这组寄存器通常被称为“陷阱寄存器”(RCAPnL,RCAPnH),同时向CPU申请中断,软件记录两次捕获之间的数据后,便可以准确地计算出该脉冲的周期。

TR2—定时器2启动/停止控制位。

这一位置1时启动定时器2,清0则停止定时器2。

C/T2—T2的定时器/计数器选择位。

   C/T2 =1时,设置为外部事件计数器(下降沿触发);C/T2 =0时,设置为内部定时器。

CP/RL2—捕获/重装标志。

CP/RL2=1且EXEN2=1时,T2EX引脚的负跳变产生捕获。

CP/RL2=0且EXEN2=0时,定时器2的溢出或T2EX引脚的负跳变都可以使定时器自动重装。当RCLK=1或TCLK=1时,该位无效,且定时器强制为溢出时自动重装。

这个寄存器对定时器/计数器2的模式设置如下表所示。

定时器/计数器2的三种工作模式


RCLK+TCLK

CP/RL2

TR2

模式

0

0

1

16位自动重装

0

1

1

16位捕获

1

×

1

波特率发生器

×

×

0

关闭


2 定时器2模式控制寄存器T2MOD

        这个寄存器用来设定定时器2自动重装模式的递增或递减模式,字节地址为C9H,该寄存器不可位寻址。单片机复位时T2MOD全部被清0,这个寄存器的定义如下表所示。

定时器2模式控制寄存器T2MOD


位序号

D7

D6

D5

D4

D3

D2

D1

D0

位符号

--

--

--

--

--

--

T2OE

DCEN

T2OE—定时器2输出使能位。

DCEN—向下计数使能位。


3 定时器2的三种模式

1)捕获模式

        在捕获模式中,通过T2CON中的EXEN2设置2个选项。如果EXEN2=0时,定时器2作为一个16位定时器或计数器(由T2CON中的C/T2位选择),溢出时置位TF2(定时器2 溢出标志位)。该位可用于产生中断(通过使能IE寄存器中的定时器2中断使能位)。如果EXEN2=l,与以上描述相同,但增加了一个特性,即外部输入T2EX引脚由l变0时,将定时器2中TL2和TH2的当前值各自捕获到RCAP2L和RCAP2H中。另外,T2EX引脚的负跳变使得T2CON中的EXF2置位,EXF2也像TF2一样能够产生中断(其向量与定时器2溢出中断地址相同,定时器2中断服务程序通过TF2和EXF2来确定引起中断的事件)。捕获模式如下图所示。在该模式中,TL2和TH2无重新装载值,甚至当T2EX产生捕获事件时,计数器仍为以T2脚的负跳变或震荡频率的1/12(12时钟模式)或1/6(6时钟模式)计数。

2)自动重装模式(递增/递减计数器)

        16位自动重装模式中,定时器2可以通过C/T2位配置为定时器/计数器,编程控制递增/递减计数。计数方向有T2MOD寄存器中的DCEN位确定。当DCEN=0时,定时器2默认为向上计数。当DCEN=1时,定时器2可通过T2EX引脚确定递增或递减计数。下图为DCEN=0时,定时器2自动递增计数的原理图。在该模式下,通过设置EXEN2位进行选择。如果EXEN2=0,定时器2递增到0FFFFH,并在溢出后将TF2置位,然后将RCAP2L和RCAP2H中的16位值作为重新装载的值装入定时器2。RCAP2L和RCAP2H的值是通过软件预设的。如果EXEN2=1,16位重新装载可以通过溢出或T2EX引脚的负跳变实现。此负跳变同时将EXF2置位。如果定时器2的中断被使能,则当TF2或EXF2置1时产生中断。

        当DCEN=1时,定时器2可以递增或递减计数。这种模式的工作原理如下图所示。此模式下,允许T2EX引脚控制计数的方向。当T2EX引脚引脚置1时,定时器2递增计数,计数到0FFFFH后溢出并置位TF2,还将产生中断(如果中断被使能)。定时器2的溢出将使RCAP2L和RCAP2H中的16位值作为重新装载值放入TL2和TH2。当T2EX置0时,定时器2递减计数。当TL2和TH2计数到等于RCAP2L和RCAP2H时,定时器2将TF2置位并产生中断,同时将0FFFFH载入到TL2和TH2。

2)波特率发生器模式

          寄存器T2CON的TCLK和(或)RCLK位允许从定时器1或定时器2获得串行口发送和接收的波特率。当TCLK=0时,定时器1作为串行口发送波特率发生器;当TCLK=1时,定时器2作为串行口发送波特率发生器。RCLK对串行口接收波特率的设置有同样的作用。通过这两位,串行口能得到不同的接收和发送的波特率,一个通过定时器1产生,另一个通过定时器2产生。有关波特率生成的工作原理,我们将在以后的串行口实验中进行介绍,这里不做过多介绍。

 


推荐阅读
  • 使用Numpy实现无外部库依赖的双线性插值图像缩放
    本文介绍如何仅使用Numpy库,通过双线性插值方法实现图像的高效缩放,避免了对OpenCV等图像处理库的依赖。文中详细解释了算法原理,并提供了完整的代码示例。 ... [详细]
  • 非公版RTX 3080显卡的革新与亮点
    本文深入探讨了图形显卡的进化历程,重点介绍了非公版RTX 3080显卡的技术特点和创新设计。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文详细解析了Python中的os和sys模块,介绍了它们的功能、常用方法及其在实际编程中的应用。 ... [详细]
  • 本文详细介绍了如何在Ubuntu系统中下载适用于Intel处理器的64位版本,涵盖了不同Linux发行版对64位架构的不同命名方式,并提供了具体的下载链接和步骤。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 基于KVM的SRIOV直通配置及性能测试
    SRIOV介绍、VF直通配置,以及包转发率性能测试小慢哥的原创文章,欢迎转载目录?1.SRIOV介绍?2.环境说明?3.开启SRIOV?4.生成VF?5.VF ... [详细]
  • 本文将详细介绍如何在Linux操作系统中执行PHP脚本,包括环境配置、命令使用及验证方法。对于需要在Linux环境下开发或部署PHP应用的用户来说,这是一篇非常实用的文章。 ... [详细]
  • 探索电路与系统的起源与发展
    本文回顾了电路与系统的发展历程,从电的早期发现到现代电子器件的应用。文章不仅涵盖了基础理论和关键发明,还探讨了这一学科对计算机、人工智能及物联网等领域的深远影响。 ... [详细]
  • 在Java中,this是一个引用当前对象的关键字。如何通过this获取并显示其所指向的对象的属性和方法?本文详细解释了this的用法及其背后的原理。 ... [详细]
  • Python 异步编程:深入理解 asyncio 库(上)
    本文介绍了 Python 3.4 版本引入的标准库 asyncio,该库为异步 IO 提供了强大的支持。我们将探讨为什么需要 asyncio,以及它如何简化并发编程的复杂性,并详细介绍其核心概念和使用方法。 ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • c# – UWP:BrightnessOverride StartOverride逻辑 ... [详细]
author-avatar
成都迅捷代驾
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有