【STC89C51单片机】定时器/计数器的理解

目录

  • 定时器/计数器
    • 1. 定时器怎么定时
      • 简单理解(加1经过了多少时间)
      • 什么是时钟周期
      • 什么是机器周期
    • 2.如何设置定时
      • 基本结构
      • 相关寄存器
        • 1. TMOD寄存器
        • 2. TCON寄存器
    • 代码示例

定时器/计数器

STC89C51单片机的定时器和计数器(Timers and Counters)是其重要的外围设备,用于测量时间间隔、产生时间延迟、计数事件等。STC89C51有两个定时器/计数器:Timer 0和Timer 1
理解:定时器与计数器的区别在于触发计数增加的信号源。作为定时器,每经过一个机器周期计数加1;作为计数器,则是外部引脚(P3.4或P3.5)每检测到一次负跳变即加1。通过寄存器设置,单片机可灵活转换这两种功能。
标准C51有2个定时器/计数器:T0和T1。他们的使用方法一致。C52相比C51多了一个T2

1. 定时器怎么定时

定时器的本质原理: 每经过一个机器周期,就加1 :寄存器(存储数据的高速小容量存储单元)

简单理解(加1经过了多少时间)

假设系统时钟频率为12 MHz,时钟周期为:
T c l o c k = 1 f c l o c k = 1 12 MHz ≈ 83.33 ns T_{clock}=\frac1{f_{clock}}=\frac1{12\text{ MHz}}\approx83.33\text{ ns} Tclock=fclock1=12 MHz183.33 ns

一个机器周期包含12个时钟周期:
T m a c h i n e = 12 × T c l o c k = 12 × 83.33 n s ≈ 1 μ s T_{machine}=12\times T_{clock}=12\times83.33\mathrm{~ns}\approx1\mathrm{~μs} Tmachine=12×Tclock=12×83.33 ns1 μs

这样,每秒钟可以执行约1,000,000个机器周期,这对于大多数嵌入式应用来说是一个足够高的速度。
为什么是1us,我粗俗的理解为方便后期的计算
为什么是12个时钟周期,
这是由该单片机内部的硬件设计和工作原理决定的。80C51单片机在执行指令和进行数据处理时,其基本操作被划分为若干个状态周期(State),每个状态周期又进一步细分为两个相位(Phase),即P1和P2,这两个相位各对应一个时钟脉冲。因此,每个状态周期需要2个时钟周期。
一个机器周期由6个这样的状态周期组成,即S1至S6,所以计算下来就是 6×2=12 个时钟周期

什么是时钟周期

时钟周期也称为振荡周期,它的频率由晶振产生,定义为时钟频率的倒数。时钟周期是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。时钟周期是一个时间的量。更小的时钟周期就意味着更高的工作频率

什么是机器周期

机器周期也称为CPU周期。在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段(如取指、译码、执行等),每一阶段完成一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个时钟周期组成

2.如何设置定时

基本结构

计数寄存器(THx和TLx):每个定时器/计数器有两个8位的寄存器,分别是高(THx)和低位(TLx),用于存储计数值。
控制寄存器(TCON和TMOD):用于配置和控制定时器/计数器的工作模式和启动停止等操作。
时钟源选择:可以选择内部时钟源或外部时钟源。

相关寄存器

在这里插入图片描述
控制寄存器
在这里插入图片描述

1. TMOD寄存器

用于设置定时器/计数器的工作模式和计数器的运行方式。它是一个8位寄存器,其中每个定时器/计数器占4位:

GATE:当设置为1时,定时器/计数器的运行受外部引脚INTx控制。
C/T:选择定时器或计数器模式。当为0时,工作在定时器模式;当为1时,工作在计数器模式。
M1和M0:设置定时器/计数器的工作模式

工作模式设置(M1和M0)

模式0(M1=0, M0=0):13位定时器/计数器(TLx的5位和THx的8位组成)。
模式1(M1=0, M0=1):16位定时器/计数器(TLx和THx组成)。
模式2(M1=1, M0=0):8位自动重装载定时器/计数器(THx加载到TLx)。
模式3(M1=1, M0=1):分为两部分,Timer 0的TL0和TH0分别作为两个独立的8位定时器/计数器,Timer 1停止工作。

2. TCON寄存器

TCON寄存器用于控制定时器/计数器的启动和停止,以及外部中断的标志和控制。TCON寄存器的格式如下

在这里插入图片描述
TF1:定时器1溢出标志(当溢出的时候,硬件会修改bit6(TF1)位上面的数据,改成1(置1),如果不用中断,我们代码清零)。
TR1:定时器1运行控制位(开始计时,相当于按下了闹钟)。
TF0:定时器0溢出标志。
TR0:定时器0运行控制位。
IE1:外部中断1标志。
IT1:外部中断1触发类型控制。
IE0:外部中断0标志。
IT0:外部中断0触发类型控制

配置寄存器(用按位操作)
清0与0,置1或1
清零时,对应的需要清零的位与上0,不需要清零的位与上1
置1的时,需要置1的位置或1,不需要置一的位置或0

代码示例

/*通过定时器0,控制LED亮一秒,灭一秒,晶振11059200Hz*/
#include "reg52.h"
sbit led = P3^6;void Timer0Init(void)		//10毫秒@11.0592MHz
{//AUXR &= 0x7F;		//定时器时钟12T模式TMOD &= 0xF0;		//设置定时器模式 清零时需要清零的位与上0(清0与0)TMOD |= 0x01;		//设置定时器模式 置1或1 TL0 = 0x00;		//设置定时初值TH0 = 0xDC;		//设置定时初值TF0 = 0;		//清除TF0标志TR0 = 1;		//定时器0开始计时
}void main()
{int cnt = 0;led = 1;Timer0Init();while(1){if(TF0 == 1)//当爆表的时候,硬件会修改bit5(TF0)位上面的数据,改成1{TF0 = 0;//不用中断,必须软件清零cnt++;  //统计爆表的次数//重新给初值TL0=0x00;TH0=0xDC;if(cnt == 100){//爆表100次,经过了1scnt = 0;  //当100次表示1s,重新让cnt从0开始,计算下一次的1sled = !led;//每经过1s,翻转led的状态}}}
}

本人菜鸟,请大神多多指教

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

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

相关文章

基于STM32老人摔倒报警设计

1.简介 随着我国老年人人口不断上升,我国已经进入人口老龄化,老龄人的人数加剧随着而来的就是基本的健康安全问题成为了如今社会主要解决的问题。随着已经步入信息时代,为了解决老年人的健康问题,相关技术的使用已经成为一个热门话…

JVM高频面试点

文章目录 JVM内存模型程序计数器Java虚拟机栈本地方法栈Java堆方法区运行时常量池 Java对象对象的创建如何为对象分配内存 对象的内存布局对象头实例数据对齐填充 对象的访问定位 垃圾收集器找到垃圾引用计数法可达性分析(根搜索法) 引用概念的扩充回收方…

COD论文学习 ZoomNext

现有方法的不足之处 高内在相似性:伪装物体与背景之间的高内在相似性使得检测变得困难,现有方法难以准确区分二者。多样化的规模和模糊的外观:伪装物体在规模和外观上多样化,且可能严重遮挡,导致现有方法难以处理。不…

【青书学堂】2024年第一学期 保险理论与实务(高起专) 作业

【青书学堂】2024年第一学期 保险理论与实务(高起专) 作业 为了方便日后复习,青书学堂成人大专试题整理。 若有未整理的课程,请私信我补充,欢迎爱学习的同学们收藏点赞关注!文章内容仅限学习使用!!&#xf…

「C++」类和对象(1)

欢迎来到海盗猫鸥的博客~~ 本篇我们将学习部分C中的类和对象相关知识沃~ (• ω •)ノ算我一个~ 目录 类的定义 类的定义及使用 访问限定符 类域 实例化 实例化概念: 对象大小: 内存对齐规则: 注意点&#xff…

十二.核心动画 - 动画缓冲①(框架提供的缓存函数)

引言 上一篇博客我们已经讨论了Core Animation中时间的处理,以及CAMediaTiming协议。本篇博客我们就来看一下另外一个和时间有关的机制--缓冲。 缓冲会让动画看起来更平滑更自然,我们在本篇博客将会体验一下CAAnimation提供的缓存函数,UIVi…

TCP vs UDP:网络编程的双刃剑艺术

在浩瀚的网络编程世界里,TCP(传输控制协议)与UDP(用户数据报协议)如同两位性格迥异的剑客,各自以其独特的剑法与风格,在网络通信的舞台上独领风骚。今天,就让我们深入探索这两位网络…

【DevOps系列】DevOps简介及基础环境安装

作者:后端小肥肠 目录 1. 前言 2. DevOps(详细介绍) 3. Code阶段工具 3.1 Git安装 3.2 GitLab安装 4. Build阶段工具 5. Operate阶段工具 5.1 Docker安装 5.2 Docker-Compose安装 6. Integrate工具 6.1 Jenkins介绍 6.2 Jenkins安…

Axure中继器入门:打造你的动态原型

前言 中继器 是 Axure 中的一个高级功能,它能够在静态页面上模拟后台数据交互的操作,如增加、删除、修改和查询数据,尽管它不具备真实数据存储能力。 中继器就像是一个临时的数据库,为我们在设计原型时提供动态数据管理的体验&a…

Java二十三种设计模式-抽象工厂模式(3/23)

抽象工厂模式:复杂系统的灵活构建者 引言 在软件开发中,抽象工厂模式是一种提供接口以创建相关或依赖对象族的创建型设计模式。这种模式允许客户端使用一个共同的接口来创建不同的产品族,而无需指定具体类。 基础知识,java设计模…

Redis Cluster集群搭建只能正常启动一个怎么解决

Redis Cluster集群搭建只能正常启动一个怎么解决 建立redis集群时不小心就遇到了这问题 上图看 这两个都没有问题 接下来这个就出现问题啦 6380没有cluster集群 这个就是连不上 配置文件没错 看了几遍了 那该怎么办? 明明都一样的配置文件,为啥这…

成都亚恒丰创教育科技有限公司 【插画猴子:笔尖下的灵动世界】

在浩瀚的艺术海洋中,每一种创作形式都是人类情感与想象力的独特表达。而插画,作为这一广阔领域中的璀璨明珠,以其独特的视觉语言和丰富的叙事能力,构建了一个又一个令人遐想连篇的梦幻空间。成都亚恒丰创教育科技有限公司 在众多插…

解析DDD中的聚合对象

对象这个词对我们而言并不陌生。以最常见的面向对象为例,软件系统中的任何事物都被认为是一种对象。而针对如何设计和实现这些对象,也存在一批开发模式。例如,一种传统的做法是从数据的角度来规划对象的组织形式,先设计数据库模型…

甲骨文面试题【动态规划】力扣377.组合总和IV

给你一个由 不同 整数组成的数组 nums ,和一个目标整数 target 。请你从 nums 中找出并返回总和为 target 的元素组合的个数。 题目数据保证答案符合 32 位整数范围。 示例 1: 输入:nums [1,2,3], target 4 输出:7 解释&#x…

QTableView仿Excel表头排序和筛选

一.效果 Excel的排序和筛选弹窗如下所示 功能非常强大。不仅支持内容排序和筛选,还支持颜色的排序和筛选,而且还支持设置多种过滤条件。本文只仿最常用的内容排序和内容单过滤条件的筛选,效果如下所示。 从效果图中可以看出,表头Section中的按钮有下列六种状态 enum Butt…

Redis 教程:从入门到入坑

目录 1. Redis 安装与启动1.1. 安装 Redis1.1.1. 在Linux上安装1.1.2. 在Windows上安装 1.2. 启动 Redis1.2.1. 在Linux上启动1.2.2. 在Windows上启动 1.3. 连接Redis1.3.1. 连接本地Redis1.3.2. 连接远程Redis1.3.2.1. 服务器开放端口1.3.2.2. 关闭防火墙1.3.2.3. 修改配置文件…

GESP CCF C++ 三级认证真题 2024年6月

第 1 题 小杨父母带他到某培训机构给他报名参加CCF组织的GESP认证考试的第1级,那他可以选择的认证语言有()种。 A. 1 B. 2 C. 3 D. 4 第 2 题 下面流程图在yr输入2024时,可以判定yr代表闰年,并输出 2月是29天 &#x…

【整体介绍】HTML和JS编写多用户VR应用程序的框架

一、Networked-Aframe是什么? 简称NAF,底层基于Mozilla的AFrame框架,用HTML和JS编写多用户VR应用程序的框架。 二、特性 支持 WebRTC 和/或 WebSocket 连接。 语音聊天。音频流让您的用户在应用程序内交谈(仅限 WebRTC&#xff…

AV1技术学习: Compound Prediction

一、双向 Compound Prediction AV1支持两个参考帧的预测通过多种复合模式线性组合。复合预测公式为 其中,权重m(x, y) is scaled by 64 以进行整数计算,R1(x, y)和R2(x, y)表示两个参考块中位于(x, y)的像素。P(x, y)将按比例缩小 1/64 以形成最终的预测…

Android安卓使用MQTT(JAVA)

一、app目录下添加 implementation org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0 1) 点击Sync Now更新依赖 2) AndroidManifest.xml文件添加网络权限 <uses-permission android:name"android.permission.INTERNET"/> 二、 使用 1) 创建MqttConn…