当前位置: 首页 > news >正文

单片机学习6——定时器/计数功能的概念

在8051单片机中有两个定时器/计数器,分别是定时器/计数器0和定时器/计数器1。

T/C0:  定时器/计数器0

T/C1: 定时器/计数器1

T0: 定时器0

T1: 定时器1

C0: 计数器0

C1: 计数器1

如果是对内部振荡源12分频的脉冲信号进行计数,对每个机器周期计数,它是定时器(T0和T1)。

如果是对单片机引脚T0(P3.4)或者T1(P3.5)输入的外部脉冲信号进行计数,则它是计数器(C0、C1)。

定时/计数器(T/C)的结构图:

定时/计数器的结构:

1、由两个加1计数寄存器(由高8位和低8位两个寄存器组成,共计16位,每个寄存器是16位),分别对应T/C0和T/C1。

2、TMOD是定时器/计数器的工作方式寄存器,确定工作方式和功能。

3、TCON是控制寄存器,控制T0和T1的启动和停止及设置溢出标志。

加1计数寄存器输入的计数脉冲有两个来源:

1、一个是由系统的时钟振荡器输出脉冲经12分频后送来;

2、一个是由单片机引脚T0(P3.4)或T1(P3.5)输入的外部脉冲源。

每来一个脉冲,计数器加1, 当加到全1的时候,再输入一个脉冲使得计数器回零。

计数器的溢出使TCON中的TF0或者TF1置1, 向CPU发出中断请求(定时器/计数器中断允许时)。

如果定时器/计数器工作于定时模式,则表示定时已到。

如果工作于计数模式,则表示计数值已满。

可见,由溢出时计数器的值减去计数初值是加1计数器的计数值。

控制寄存器TCON:

TCON的低4位用于控制外部中断。TCON的高4位用于控制定时器/计数器的启动和中断请求,其格式如下:

 reg51.h文件:

CPU响应中断,这个时候会去执行某个中断服务函数程序。

工作方式寄存器:

工作方式寄存器TMOD用于设置定时/计数器的工作方式,低4位用于T/C0, 高4位用于T/C1。

格式如下:

GATE的工程应用是用来测量脉冲的宽度。

从高电平的时候开始计数,看高电平花了多少时间,从而计算出脉冲的宽度。

正常情况下GATE置0即可。

M1M0:工作方式设置位,定时/计数器有四种工作方式,有M1和M0进行设置。

方式1: 常用的16位定时/计数器。

方式2: 主要用在串口波特率发生器。

方式0和方式3:几乎不用。

方式1:(定时器0模式)

方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器。

是对每个机器周期进行计数,计数器满了之后,会溢出,然后TF0置1,产生中断请求,CPU响应中断请求。

16位定时器0装初值的计算公式:

假设要计算的个数是n:

TH0=(65536-n)/256        商

TL0=(65536 - n)%256    求余

8051的基本时序周期:

振荡周期:为单片机提供振荡源的周期(是指振荡源的两个相邻同方向峰值之间的时间。)

机器周期:1个机器周期等于12个振荡周期。

若:fosc=12M,则8051的各周期参数如下:

振荡周期=1/12 us

机器周期=1us

单片机使用的晶振是12M,那么每个机器周期是1us。

加1计数寄存器是每1个机器周期加1,也就是相当于每间隔1us加1个数。

65536-50000=15536

也就是从15536开始计数,计数50000次,也就是50000*1us,得到50ms。

相关文章:

单片机学习6——定时器/计数功能的概念

在8051单片机中有两个定时器/计数器,分别是定时器/计数器0和定时器/计数器1。 T/C0: 定时器/计数器0 T/C1: 定时器/计数器1 T0: 定时器0 T1: 定时器1 C0: 计数器0 C1: 计数器1 如果是对内部振荡源12分频的脉冲信号进行计数,对每个机器周期计数&am…...

a-table:表格组件常用功能记录——基础积累2

antdvue是我目前项目的主流,在工作过程中,经常用到table组件。下面就记录一下工作中经常用到的部分知识点。 a-table:表格组件常用功能记录——基础积累2 效果图1.table 点击行触发点击事件1.1 实现单选 点击事件1.2 实现多选 点击事件1.3 实…...

leetCode 131.分割回文串 + 回溯算法 + 图解 + 笔记

131. 分割回文串 - 力扣(LeetCode) 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 。返回 s 所有可能的分割方案。回文串 是正着读和反着读都一样的字符串 示例 1: 输入:s "aa…...

浅谈对于Android CMakeLists文件的理解

文章目录 文件结构 文件结构 cmake_minimum_required(VERSION 3.10.2) //设置cmake版本set(CMAKE_LIBRARY_OUTPUT_DIRECTORY${CMAKE_CURRENT_LIST_DIR}/../jniLibs/${ANDROID_ABI}) //设置.so文件输出路径 project("add") //编译目录add_library( common //生成.so文…...

虚函数可不可以重载为内联 —— 在开启最大优化时gcc、clang和msvc的表现

下面是对该问题的一种常见回答: 首先,内联是程序员对编译器的一种建议,因此可以在在重载虚函数时在声明处加上inline关键字来修饰, 但是因为虚函数在运行时通过查找虚函数表调用的,而内联函数在编译时进行代码嵌入&…...

【开源】基于Vue+SpringBoot的智能教学资源库系统

项目编号: S 050 ,文末获取源码。 \color{red}{项目编号:S050,文末获取源码。} 项目编号:S050,文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课…...

Sass基础知识之【变量】

文章目录 前言变量声明变量引用变量名用中划线还是下划线分隔后言 前言 hello world欢迎来到前端的新世界 😜当前文章系列专栏:Sass和Less 🐱‍👓博主在前端领域还有很多知识和技术需要掌握,正在不断努力填补技术短板。…...

云原生系列Go语言篇-泛型Part 1

“Don’t Repeat Yourself”是常见的软件工程建议。与其重新创建一个数据结构或函数,不如重用它,因为对重复的代码保持更改同步非常困难。在像 Go 这样的强类型语言中,每个函数参数及每个结构体字段的类型必须在编译时确定。这种严格性使编译…...

力扣1089题 复写零 双指针解法

2. 复写零 给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。 注意:请不要在超过该数组长度的位置写入元素。请对输入的数组 就地 进行上述修改,不要从函数返回任何东西。 示例 1&…...

Redis基础与运用

一、redis介绍 简介 Redis 是完全开源的,遵守 BSD 协议,是一个高性能的 key-value 数据库。 Redis 与其他 key - value 缓存产品有以下三个特点: Redis支持数据的持久化,可以将内存中的数据保存在磁盘中,重启的时候可…...

PTA:猜帽子游戏 ,C语言

题目 宝宝们在一起玩一个猜帽子游戏。每人头上被扣了一顶帽子,有的是黑色的,有的是黄色的。每个人可以看到别人头上的帽子,但是看不到自己的。游戏开始后,每个人可以猜自己头上的帽子是什么颜色,或者可以弃权不猜。如…...

ESP32基于IDF框架OTA学习记录

ESP32基于IDF框架OTA学习记录 参考: 空中升级 (OTA) - ESP32 - — ESP-IDF 编程指南 v5.1.1 文档 (espressif.com) 目录 ESP32基于IDF框架OTA学习记录1.分区表2.native_ota_example上手2.1配置分区表2.2配置OTA的bin文件2.3修改esp32的https证书验证方法2.4修改当…...

分布式技术(一)分布式的架构的演进

💌 所属专栏:【微服务】😀 作 者:长安不及十里💻 工作:目前从事电力行业开发🌈 目标:全栈开发🚀 个人简介:一个正在努力学技术的Java工程师,专注基…...

webpack 打包优化

在vue.config.js中配置 下载 uglifyjs-webpack-plugin 包 const { defineConfig } require("vue/cli-service"); var path require("path");module.exports defineConfig({transpileDependencies: true,filenameHashing: false, // 去除Vue打包后.cs…...

electron windows robotjs 安装教程

Robotjs 安装 前言第一步 : 安装python第二步 : 安装Visual Studio 2022第三步 : 安装robotjs 前言 robotjs可以控制鼠标键盘,获取屏幕内容,配合electron可做很多自动化操作。windows下配置环境有很多坑,很多文章都太旧了。试了很多次发现了…...

IDEA解决Git冲突详解

目录 前言: 何为冲突 冲突演示 IDEA冲突解决 小结: 前言: 相信大家多多少少都有了解和使用过Git,作为Java程序员idea可谓是无敌的存在了,那么如何使用idea解决Git冲突呢?不瞒大家前段时间在公司把同事…...

Vue3使用kkFileView预览文件pdf

kkFileView - 在线文件预览kkFileView官网 - kkFileView使用Spring Boot搭建,易上手和部署,基本支持主流办公文档的在线预览,如doc,docx,Excel,pdf,txt,zip,rar,图片等等https://kkfileview.keking.cn/zh-cn/docs/usage.html业务场景&#xf…...

建造者模式-C语言实现

UML类图&#xff1a; 代码实现&#xff1a; #include <stdio.h> #include <stdlib.h>// 产品类 typedef struct {char* part1;char* part2;char* part3; } Product;// 抽象建造者类 typedef struct {void (*buildPart1)(void*, const char*);void (*buildPart2)(v…...

Jmeter+influxdb+grafana监控平台在windows环境的搭建

原理&#xff1a;Jmeter采集的数据存储在infuxdb数据库中&#xff0c;grafana将数据库中的数据在界面上进行展示 一、grafana下载安装 Download Grafana | Grafana Labs 直接选择zip包下载&#xff0c;下载后解压即可&#xff0c;我之前下载过比较老的版本&#xff0c;这里就…...

关注这两点 或能避开一些现货黄金交易的陷阱

在现货黄金投资中&#xff0c;交易机会是处处都有&#xff0c;但是亏损的情况也可能出现。投资者要在陷阱处处的市场中获得稳定盈利&#xff0c;就需要懂得如何规避现货黄金投资的陷阱。下面我们就来介绍两个很常用的避开陷阱的方法。 看交易的活跃度。交易越活跃&#xff0c;市…...

STM32 OLED三级菜单框架设计与实现

1. STM32 OLED菜单界面框架设计概述在嵌入式设备开发中&#xff0c;人机交互界面是连接用户与硬件的重要桥梁。基于STM32微控制器和OLED显示屏构建的菜单系统&#xff0c;因其低成本、低功耗和高对比度显示特性&#xff0c;在工业控制、智能家居和便携设备等领域广泛应用。本文…...

2026-04-03 全国各地响应最快的 BT Tracker 服务器(联通版)

数据来源&#xff1a;https://bt.me88.top 序号Tracker 服务器地域网络响应(毫秒)1http://211.75.210.221:6969/announce江苏镇江联通222http://60.249.37.20:80/announce广东肇庆联通273udp://132.226.6.145:6969/announce宁夏银川联通724http://93.158.213.92:1337/announce…...

生成历史场景数据(实际应用替换为真实数据)

电热冷氢综合能源系统分布式鲁棒优化运行&#xff0c;基于Wasserstein 距离&#xff0c;包含结果绘图和随机优化和鲁棒优化对比场景&#xff0c;代码备注详细最近在搞综合能源系统的兄弟肯定对"不确定性"这词深恶痛绝——电力负荷说变就变&#xff0c;氢能价格跟过山…...

用STC89C51+LM358做个心率计,从硬件选型到代码调试的完整避坑指南

从零打造高精度心率监测仪&#xff1a;STC89C51与LM358的硬核实战手册 指尖轻触红外传感器&#xff0c;LCD屏幕上的数字开始跳动——这不是医疗设备&#xff0c;而是你用面包板和51单片机搭建的心率监测装置。当开源硬件遇上生物信号采集&#xff0c;传统单片机依然能在可穿戴设…...

S-UI系统调用分析:与操作系统交互的底层实现

S-UI系统调用分析&#xff1a;与操作系统交互的底层实现 还在为网络代理管理系统的底层实现而困惑&#xff1f;本文将深入解析S-UI如何通过系统调用与操作系统深度交互&#xff0c;让你全面掌握这套高级Web面板的底层工作原理。 读完本文你将了解&#xff1a; S-UI如何处理系…...

提升Node.js应用性能:dotenv环境变量加载的终极优化指南

提升Node.js应用性能&#xff1a;dotenv环境变量加载的终极优化指南 【免费下载链接】dotenv Loads environment variables from .env for nodejs projects. 项目地址: https://gitcode.com/gh_mirrors/do/dotenv 在现代Node.js应用开发中&#xff0c;环境变量管理是确保…...

Java 基础核心知识

文章目录1. 谈谈对AQS的理解2. fail-safe机制与fail-fast机制分别有什么作用3. new String("abc")到底创建了几个对象4. 对序列化和反序列化的理解5. 谈谈对Java中SPI的理解6. String、StringBuffer、StringBuilder区别7. Integer 的判断8. 深拷贝和浅拷贝9. 强引用、…...

117. 如何在Rancher监控中测试 AlertManager

Procedure 程序This guide demonstrates how to test Alertmanager and PrometheusRule configuration, to validate that alerts are sent successfully by Alertmanager. 本指南演示如何测试 AlertManager 和 PrometheusRule 配置&#xff0c;以验证 AlertManager 是否成功发…...

Hi3519 DV500上跑YOLOv5n,从7秒到34毫秒:一个模型算子优化带来的200倍加速实战

Hi3519 DV500上YOLOv5n性能优化实战&#xff1a;从7秒到34毫秒的200倍加速秘诀 当我们在嵌入式设备上部署目标检测模型时&#xff0c;性能往往是最大的挑战。最近在Hi3519 DV500芯片上部署YOLOv5n模型的经历让我深刻体会到了这一点——最初的推理时间竟然长达7秒&#xff0c;完…...

浅析 Python 中数据离散化的实现方式

一、什么是数据离散化&#xff1f;在数据分析和机器学习的预处理阶段&#xff0c;数据离散化是一个非常核心且常用的操作。简单来说&#xff0c;数据离散化就是将连续的数值型数据&#xff0c;按照一定的规则划分成若干个离散的区间 / 类别。连续数据&#xff1a;身高&#xff…...