首页 > 其他分享 >STC89C52 定时器浅谈

STC89C52 定时器浅谈

时间:2024-08-26 22:21:49浏览次数:8  
标签:定时器 优先级 浅谈 1.2 中断 STC89C52 计数 中断请求

文章目录

1、定时器

1.1 定时器简介

定时器,又称为计数器,是51单片机的内部资源,即电路的连接和运转都在单片机内部完成。

定时器通常有两个作用:

  1. 用于系统计时
  2. 用于替代长时间Delay,使得程序每隔一段固定的时间进行相应操作

型号为STC89C52的单片机包含3个定时器:Timer0/Timer1/Timer2
其中Timer0/Timer1是兼容51单片机的,而Timer2则是STC89C52型号所特有的。
对于T0和T1而言,它们都包含4种工作模式(0、1、2、3),不过我们初学者使用最多的当属T0的模式1。

1.2 定时器构成

定时器由三部分构成:系统时钟、计数单元和中断系统。
以下基于定时器0的模式1进行相关解释
在这里插入图片描述

1.2.1 系统时钟

系统时钟,即上图所示的SYSclk,这个东西是用于计时的,即每隔一段时间便向计数单元(上图中的TL0和TH0)提供一个脉冲,如此计时单元便加1。SYSclk有两个模式12T和6T,STC89C52的型号默认是12T模式,要想更改为6T模式,需在烧录软件STC-ISP中进行更改。
这个模式具体是什么意思呢?普中科技的A2开发板晶振频率,即系统时钟输出脉冲频率为11.0592MHZ,12T模式就是将此频率除以12后,以此为新的脉冲输出,即计时频率;6T Mode同理。

当然,我们注意到图中有一个T0 Pin,这是T0的外部引脚,它也可以提供脉冲,如果采用这个外部引脚提供脉冲,定时器就相当于一个计数器,而计数单元就用于记录外部输入的脉冲次数。

而到底是通过哪个输出脉冲则取决于图中C/T的取值,取0则SYSClk输出脉冲,为定时器;取1,则由外部输入脉冲,为计数器

1.2.2 计数单元

计数单元是由图中的TL0与TH0组成的。在定时器0的模式1下,计数单元共有16位二进制,低八位存储在TL0中,高八位存储在TH0中。
由此可见,此计数单元的计数极限为65535(2的16次方减去1得到65535),一旦超过这个极限,便会由上图中的TF0中断源(用于发出中断请求的器件为中断源)发出中断请求,中止主程序的执行,而执行相应的中断函数。

1.2.3 中断系统

中断系统是为使CPU具有对外界紧急事件的处理能力而设置的。

中断的过程可以分为三步:

  1. 中断请求:由中断源发出中断请求
  2. 中断响应:相应中断请求后,主程序中止,执行相应的中断处理程序
  3. 中断返回:中断函数执行完毕后,返回原先的主程序

中断请求有优先级之分,对于STC89C52型号的单片机,共有4种优先级(高、较高、较低、低),中断系统总是会先执行高优先级的中断请求,因此就有可能会存在一个低优先级的中断被高优先级的中断打断,这时候便形成了中断嵌套,而含有中断嵌套的中断系统被称为多级中断系统,反之则为单级中断系统。

实际上,同一优先级的中断请求也会因中断源的不同而产生次序之分。
STC89C52型号的单片机提供了八个中断请求源,它们的次序如下:
在这里插入图片描述
在这里插入图片描述
简而言之,不同优先级的中断请求看优先级,相同优先级的中断请求看中断查询次序号。
低优先级中断可被高优先级中断打断,某一优先级的中断一旦响应便不可被同级中断打断。

下附STC89C52的中断结构图:
在这里插入图片描述

1.2 定时器0/1的相关寄存器

1.2.1 TMOD

在这里插入图片描述
TMOD寄存器是用来控制定时器1/0的模式的,高四位用于定时器1,低四位用于定时器0,二者的模式设置几乎是完全相同的。

  1. M1/M0用于定时器模式选择:

在这里插入图片描述
0 0代表模式0,0 1代表模式1,1 0代表模式2,1 1代表模式3,特别注意模式1,这几乎是使用最多的。

  1. C/T用于切换定时器/计数器:

在这里插入图片描述
C/T置为0时表示定时器,C/T置为1时表示计数器。

  1. GATE用于控制定时器的开闭条件:

在这里插入图片描述
以定时器0为例,如果GATE置为1,则定时器0想要打开,必须INT0和TR0均置为1;如果GATE置为0,定时器想要打开,则只需TR0置为1即可。
通常情况下,较为简单的定时器功能,我们将GATE置为0即可。

特别注意,由于TMOD寄存器是不可位寻址的,所以配置TMOD寄存器必须八位二进制一起配置,而不能各个二进制位分别配置。


1.2.2 TCON

在这里插入图片描述
TCON是定时器0/1的中断控制寄存器,以下介绍TCON寄存器B7~B4位所代表的含义:

  1. TR1和TF1:

在这里插入图片描述
TF1:可以理解成定时器1的中断源,置1时说明计数单元溢出了,就向CPU请求中断;置0则表示计数单元未溢出。(TF1中的F意指flag)
TR1:当GATE置为0时,TR1=1就允许T1开始计数,TR1=0时禁止T1计数。

  1. TR0和TF0:与定时器1相同,此处不再赘述

在这里插入图片描述

特别注意,TCON寄存器是可以位寻址的,即TCON可以一位一位分别进行设置,而不用对TCON整体进行赋值。


1.3 初始化定时器0

以下是初始化定时器0的代码示例:

在这里插入图片描述
上述对定时器0的配置,使得定时器0每间隔1ms(存在微小误差,因为晶振的频率不为12MHZ)便会进行一次中断。

基于这个定时器0的配置,我们可以写一个间隔为1s(1ms的一千倍)的定时器0的中断函数模板:
在这里插入图片描述

标签:定时器,优先级,浅谈,1.2,中断,STC89C52,计数,中断请求
From: https://blog.csdn.net/2402_86037826/article/details/141569671

相关文章

  • 浅谈【数据结构】树与二叉树一
    目录1、树与二叉树1.1树的概念2、二叉树2.1二叉树的五大形态2.2二叉树的性质2.3二叉树的存储结构2.4二叉树的遍历谢谢帅气美丽且优秀的你看完我的文章还要点赞、收藏加关注没错,说的就是你,不用再怀疑!!!希望我的文章内容能对你有帮助,一起努力吧!!!1、树与二叉树1.1树......
  • 浅谈【数据结构】树与二叉树二
    目录1、二叉排序树1.1二叉树排序树插入1.1.1两种插入方法1.1.2循环法1.1.3递归法1.2二叉树的打印1.3二叉树的结点删除1.4销毁二叉树1.5层次打印谢谢帅气美丽且优秀的你看完我的文章还要点赞、收藏加关注没错,说的就是你,不用再怀疑!!!希望我的文章内容能对你有帮助,一......
  • STC89C52单片机外部中断与定时器中断寄存器配置分析
    参考:STC89C52手册摘自手册:中断系统是为使CPU具有对外界紧急事件的实时处理能力而设置的。当中央处理器CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完以后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断。实现这种......
  • 浅谈二分图
    定义二分图,又称二部图,英文名叫Bipartitegraph。二分图是什么?节点由两个集合组成,且两个集合内部没有边的图。换言之,存在一种方案,将节点划分成满足以上性质的两个集合。性质如果两个集合中的点分别染成黑色和白色,可以发现二分图中的每一条边都一定是连接一个黑色点和一个白......
  • 浅谈一类第 k 大问题
    浅谈一类第k大问题IntroductiontoK-thLargestProblems本文介绍一类第k大问题的处理方法。LuoguP1631序列合并LuoguP2048[NOI2010]超级钢琴LuoguP5283[十二省联考2019]异或粽子CodeForces241BFriends基本思想:先找到部分答案,通过这部分答案更新可能的......
  • 浅谈红队攻防之道-CobaltStrike钓鱼攻击集锦
    打个比方,一片大地上,躺着一群沉睡的人,远处就是火山,马上就要爆发了,你就像个闹钟,面对这些沉睡的人,你想把他们叫醒。你持续不断地响着,有的睡得浅的人,被你叫醒了,跟你一块去叫醒众人,但是人数太多了,你们的声音太微弱了,叫醒的人毕竟有限,而且保不齐有的人嫌烦,时不时还踢坏两个。那......
  • 浅谈C#中的值类型和引用类型
    1.值类型常见的值类型:int/long/short/byte/float/double/bool/char/Struct(用户建立的结构体通常是值类型的)/NullableTypes(这是一个特殊的值类型,表示一个正常值或者空,比如int?)值类型的例子:inta=10;intb=a;Console.WriteLine($"a:{a}");//a:10Console.WriteLine($"b:......
  • 浅谈 pb_ds 库
    大部分是在wiki搬运的,只是方便我看简介pb_ds库封装了很多数据结构,比如哈希(Hash)表,平衡二叉树,字典树(Trie树),堆(优先队列)等。就像vector、set、map一样,其组件均符合STL的相关接口规范。部分(如优先队列)包含STL内对应组件的所有功能,但比STL功能更多。可以使用begin()和e......
  • 浅谈Java MyBatis
    一、MyBatis的基本介绍  MyBatis本是apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundation迁移到了googlecode,由谷歌托管,并且改名为MyBatis。2013年11月迁移到Github。    MyBatis是支持普通SQL查询,存储过程和高级映射的优秀持久层框架。......
  • 浅谈对Maven的理解
    一、基本介绍Maven——是Java社区事实标准的项目管理工具,能帮你从琐碎的手工劳动中解脱出来,帮你规范整个组织的构建系统。不仅如此,它还有依赖管理、自动生成项目站点等特性,已经有无数的开源项目使用它来构建项目并促进团队交流,每天都有数以万计的开发者在访问中央仓库以获取......