STC89C52 定时器浅谈

news2024/11/23 3:47:10

文章目录

  • 1、定时器
    • 1.1 定时器简介
    • 1.2 定时器构成
      • 1.2.1 系统时钟
      • 1.2.2 计数单元
      • 1.2.3 中断系统
    • 1.2 定时器0/1的相关寄存器
      • 1.2.1 TMOD
      • 1.2.2 TCON
    • 1.3 初始化定时器0

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的中断函数模板:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2076921.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

16、CPU缓存架构

CPU缓存架构 CPU缓存架构详解CPU高速缓存概念CPU多核缓存架构CPU多核缓存架构缓存一致性问题分析 CPU缓存架构缓存一致性的解决方案缓存一致性协议实现原理总线窥探工作原理窥探协议类型 缓存一致性协议MESI协议 伪共享的问题linux下查看Cache Line大小避免伪共享方案 CPU缓存架…

netty编程之实现HTTP服务

写在前面 http是应用层协议,是我们日常开发中直接用到最多的协议了。本文来看下通过netty如何实现。 1:程序 netty不仅仅提供了String相关的编解码器,还贴心的提供了http相关的编码器和解码器,直接拿来用就行了,所以…

【3.3】贪心算法-解分发糖果

一、题目 老师想给孩子们分发糖果,有N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分。 你需要按照以下要求,帮助老师给这些孩子分发糖果: 1)每个孩子至少分配到1 个糖果。 2&#xff…

apache经典模型和nginx参数配置

Apache 几个经典的 Web 服务端 ①Apache prefork 模型 ● 预派生模式,有一个主控制进程,然后生成多个子进程,使用select模型,最大并发 1024 ● 每个子进程有一个独立的线程响应用户请求 ● 相对比较占用内存&#xf…

Cyberchef实用功能之-模拟沙箱的文件静态分析能力

本文将介绍如何使用cyberchef 提取文件的重要元数据的信息,根据自己的需求实现沙箱中的静态文件的分析能力。 在网络安全日常的运营,护网行动,重保活动的过程中,样本的分析是一个重要的过程,这些可疑或者恶意的样本的…

Beyond Compare忽略特定格式文本

1 问题背景: 文本对比时忽略某些文本。比如有些生成的文件需要做差异对比,除了内容有差异外,自动生成的ID也不同,想忽略这些ID。特别是文件内容比较多的时候。 如上图,其中UUID“*”的部分我想忽略。 方法&#xff1…

微信开放平台应用签名MD5

可以使用JS转换一下 一、在任一网页 右键 检查 打开调试 二、把字母转换成小写,去除(:) MD5 应用签名示例 "70:71:5F:CA:AE:E5:B1:01:30:11:8F".toLowerCase().replace(/:/g, "") 70715fcaaee5b10130118f 就是要填写…

我们为什么推出数据模型

调用接口之前,要写大量的字段校验代码? 需要关联读写多张表的数据,难以写出复杂的数据库语法? 不仅需要开发核心的业务逻辑,还需要加班搭建CMS和数据管理页面? 数据不止放在云开发,还需要查询…

ctfhub-web-基础认证

HTTP协议:什么是HTTP基本认证_网易订阅 https://zhuanlan.zhihu.com/p/64584734 弹框输入密码账号bp抓包,发现了Authorization:后面有一串BASE64的编码(输入的密码) 账号默认是admin,抓包后是basic 把抓到的包发送到爆破模块i…

MySql【约束】

约束 1.1 约束 是什么? 约束,即限制,就是通过设置约束,可以限制对数据表数据的插入,删除,更新 怎么做? 约束设置的语法,大部分是 create table 表名( 字段 数据类型(长度) 约束, 字段 数据类型(长度) 约束 ); 另外一种是建表后,使用alter语句修改表添加约束 1.1 数据类型 其实…

人社大赛算法赛题解题思路分享+第五名

关联比赛: [国家社保]全国社会保险大数据应用创新大赛 赛题背景分析及理解 本次比赛,“精准社保”的赛题为“基本医疗保险医疗服务智能监控”,由参赛队完成数据算法模型的开发设计,实现对各类医疗保险基金欺诈违规行为的准确识别。 在进行了…

AI工业ros机械臂

1、基本介绍 该产品是一款面向于人工智能、机器人工程等专业的实验平台,能够学习基于人工智能技术的智能机器臂相关知识。主要由工业六轴机械臂、机械臂控制器、边缘计算主机、安全防护工作台四部分构成。该产品可完成的课程:机器视觉、机器人操作系统RO…

Stable Diffusion 使用详解(10)--- 场景立体字

目录 背景 复刻立体雏形 Lora 模型 参数设置与controlnet 出图效果 融入图片 提取 合成 背景 虽然都是字,带场景的立体字和上一节讲的做法不太一样。一般来说,一般这种带字体的场景字现阶段都是Lora模型居多,Lora 属于轻量级模型&…

linux系统中USB模块基本原理分析

大家好,今天主要给大家分享一下,USB设备的发展历程。 第一:USB发展变化 随着时代的发展,USB模块也随之不断的升级。 USB1.1:规范了USB低全速传输; USB2.0:规范了USB高速传输,采用NRZI(反向不归零)编码(NRZI采用8bit编码方式),位填充(在数据进行NRZI编码前…

每日一练-threejs实现三维动态热力图

前言&#xff1a;学习自用Three.js搞个炫酷热力山丘图&#xff0c;作者讲解的十分详细&#xff0c;在这里不再过多赘述&#xff0c;直接上代码&#xff01; <template><div class"map" ref"map"></div> </template><script set…

亿发工单管理系统助力五金行业智造升级:高效生产新篇章

在五金制造行业&#xff0c;效率和质量决定了企业的竞争力。五金厂通过引入先进的工单管理系统&#xff0c;成功实现了从传统制造向智能制造的转型。今天&#xff0c;我们将带您深入了解这场变革背后的力量&#xff0c;揭示工单管理系统如何在五金工厂的各个环节中发挥重要作用…

Redis的哨兵(高可用)

实验环境&#xff1a;用一主两从来实现Redis的高可用架构。 一、Redis哨兵 Sentinel 进程是用于监控redis集群中Master主服务器工作的状态&#xff0c;在Master主服务器发生故障的时候&#xff0c; 可以实现Master和Slave服务器的切换&#xff0c;保证系统的高可用&#xff0c…

java一键生成数据库说明文档html格式

要验收项目了&#xff0c;要写数据库文档&#xff0c;一大堆表太费劲了&#xff0c;直接生成一个吧&#xff0c;本来想用个别人的轮子&#xff0c;网上看了几个&#xff0c;感觉效果不怎么好&#xff0c;自己动手写一个吧。抽空再把字典表补充进去就OK了 先看效果&#xff1a; …

找不到msvcp140.dll无法继续执行代码的基本解决策略,快速修复msvcp140.dll错误文件

在我们日常使用电脑的过程中&#xff0c;偶尔会遇到一些令人头疼的技术问题。其中&#xff0c;"找不到 msvcp140.dll 无法继续执行代码" 的错误提示便是许多 Windows 用户常见的难题之一。这条错误消息通常在尝试启动某些程序时出现&#xff0c;指出系统缺少一个关键…

SAP HR 逻辑数据库PNP简单说明

逻辑数据库是专门在逻辑数据库生成器中编辑的开发对象&#xff0c;其核心价值在于为其他ABAP程序提供来自分层树结构节点的数据访问能力。尽管在SAP的最新帮助文档中&#xff0c;逻辑数据库被标记为已过时的&#xff0c;但是在HR模块中仍然被广泛使用&#xff0c;提供读取和处理…