(4)定时器

news2024/11/26 20:27:50

51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成

作用:

  1. 用于计时系统
  2. 替代长时间Delay,提高运行效率和速度
  3. 任务切换

STC89C52定时器资源:

定时器个数:3个(T0,T1,T2),T2是新增资源,T0T1为老版本兼容

定时器的资源和单片机的型号是关联在一起的,不同型号可能有不同定时器个数和操作方式

定时器根据时钟的输出信号,每隔固定时间段,计数单元的数值加一,当计数单元数值增加到设定的值时,计数单元会向中断系统发出中断申请,使程序跳转到中断服务函数中执行

STC89C52的T0和T1均有四种工作模式:

  • 模式0:13位定时器/计数器
  • 模式1:16位定时器/计数器(常用)
  • 模式2:8位自动重装模式
  • 模式3:两个8位计数器

请添加图片描述

计数单元:时钟发出脉冲给计数单元,每个脉冲加一,计数单元一共2*8=16位(最大65535),超过最大值溢出,此时标志位TF0发出中断请求

时钟:有两个来源

  • SYSclk系统时钟,即晶振周期,12MHz,此时做定时器
  • T0 Pin外接时钟——此时做计数器

中断系统:使CPU具有对外界紧急事件的实时处理能力,高级别的中断优先执行,多级中断称为中断嵌套,中断请求的来源称为中断源

STC89C52中断资源:

  • 中断源个数:8个(外部中断0,定时器0中断,外部中断1,定时器1中断,串口中断,外部中断2,外部中断3)
  • 中断优先级个数:4个
  • 中断号:

请添加图片描述

寄存器是连接软硬件的媒介在单片机中寄存器就是一段特殊的RAM存储器,一方面,寄存器可以存储和读取数据,另一方面,每一个寄存器背后都连接了一根导线,控制着电路的连接方式寄存器相当于一个复杂机器的“操作按钮”

TCON:控制中断

请添加图片描述

请添加图片描述

TMOD:定时和计数功能

请添加图片描述

请添加图片描述

12MHz每隔一微秒加一,计数单元(0~65535),通过赋初始值的方式做到每秒中断:

0~65535
总共定时65535us
计数单元初始值为64535,计时时间为1000us=1ms
所以TH0(高位)TL0(低位)应组合
TH0 = 64535/256; // 取出64535的高八位赋给TH0
TL0 = 64535%256; // 取出64535的低八位赋给TL0
1.因为64535是十进制数,要先转换为十六进制数所以除16;
2.然后还要取高8位,所以再除16,算到一起就是除256.
3.取模同理
void Timer0_Init(){
	TMOD = 0x01; // 0000 0001 定时模式1
    // 这里TMOD可以使用与或式赋值法,只操作特定位而不改变其他位
    // TMOD &= 0xf0;
    // TMOD |= 0x01;
	TF0 = 0; // 标志位初始化,防止产生中断
	TR0 = 1; // 运行控制位,开始计数工作
	TH0 = 64535 / 256; // 给计数单元赋初值
	TL0 = 64535 % 256;
	
	ET0 = 1;// 溢出中断允许位
	EA = 1; // 总中断允许控制位
	PT0 = 0; // 定时器0中断优先级控制位
}
void Timer0_Rountine() interrupt 1{ // 中断号
    static unsigned int T0Count = 0;
	TH0 = 64535 / 256; // 给计数单元赋初值,保证每次移除后都是从64535开始重新计数
	TL0 = 64535 % 256;
	T0Count++;
	if(T0Count >= 1000){ // 中断次数超过1000,即经过1秒后
		T0Count = 0;
		P2 = ~P2;
	}
}

一个函数头文件:INTRINS.H

内部函数 描述
_crol_ 字符循环左移 溢出则从低位重新开始
_cror_ 字符循环右移
_irol_ 整数循环左移
_iror_ 整数循环右移
_lrol_ 长整数循环左移
_lror_ 长整数循环右移
_nop_ 空操作 8051 NOP 指令
_testbit_ 测试并清零位 8051 JBC 指令
_nop_ 空操作 8051 NOP 指令
_testbit_ 测试并清零位 8051 JBC 指令

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

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

相关文章

【MySQL】MySQL 运算符

目录 一、运算符简述 二、运算符使用 1.算术运算符 1.1 加法运算符 1.2 减法运算符 1.3 乘法与除法运算符 1.4 求模(求余)运算符 2.比较运算符 2.1 等号运算符 2.2 安全等于运算符 2.3 不等于运算符 2.4 空运算符 2.5 非空运算符 2.6 最小…

深度剖析Mybatis-plus Injector SQL注入器

背景 在项目中需要同时操作Sql Server 以及 MySQL 数据库,可能平时直接使用 BaseMapper中提供的方法习惯 了,不用的话总感觉影响开发效率,但是两个数据库的SQL语法稍微有点差别,有些暴露的方法并不能直接使用,所以便想…

WebSocket的那些事(3-STOMP实操篇)

目录 一、序言二、STOMP详解1、STOMP简单介绍2、STOMP协议内容3、使用STOMP的好处 三、代码示例1、Maven依赖2、开启WebSocket消息代理3、控制器4、前端页面greeting.html 四、测试1、连接服务端2、发送消息 五、STOMP消息传播流程六、结语 一、序言 上节中我们在 WebSocket的…

(11)LCD1602液晶显示屏

LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置特殊字符,还可以有8个自定义字符,自带芯片扫描 显示容量:162个字符,每个字符…

【C++】STL六大组件简介

STL(standard template libaray-标准模板库):是C标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。 1.STL的版本介绍 原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本&#xff…

Unity里面CG和HLSL在写法上的一些区别

大家好,我是阿赵。这里继续讲URP相关的内容。 这次想讲的是CG和HLSL在写法上的一些区别。 一、为什么开始用HLSL 首先,基本上大家都知道的事情再说一遍。 三种Shader编程语言: 1、基于OpenGL的OpenGL Shading Language,缩写GLSL…

接口测试中postman环境和用例集

postman的环境使用 postman里有环境的设置,就是我们常说的用变量代替一个固定的值,这样做的好处是可以切换不同的域名、不同的环境变量,不同的线上线下账户等等场景。下面就看下怎么用吧。 创建一个Environment postman有一个envrionment&am…

Java是如何实现双亲委托机制的

Java 是一种面向对象的编程语言,它有一套独特的类加载机制。其中,双亲委托加载机制是 Java 类加载机制中的一个重要概念。本文将介绍 Java 的双亲委托加载机制是如何实现的,并解释其作用和优点。 Java 类加载机制 在 Java 中,类的…

瀑布流组件陷入商品重复怪圈?我是如何用心一解的!

目录 背景 瀑布流组件 什么是瀑布流组件 如何实现一个瀑布流组件 商品重复的原因 解决方案 方法一(复杂,不推荐):标记位大法 方法二(优雅,推荐):Promise 队列 大法 总结 背…

解决新思路#报错:ping: www.baidu.com: 未知的名称或服务--照着步骤来还是ping不通的可能原因

最近由ubantu转为centos7,配置hadoop,配置静态ip的过程中一直ping不通。之前配置ubantu的也是,终于这次在重启虚拟机和主机后发现了原因。 中途尝试过: 1.三次以上命令行反复操作 2.图形界面设置 3.看是否主机的网络适配器的网关与设置的IP地址产生冲突…

JavaScript实现计算100之间能被5整除的数的代码

以下为实现计算100之间能被5整除的数的程序代码和运行截图 目录 前言 一、计算100之间能被5整除的数 1.1 运行流程及思想 1.2 代码段 1.3 JavaScript语句代码 1.4 运行截图 前言 1.若有选择,您可以在目录里进行快速查找; 2.本博文代码可以根据题…

2023最新100道渗透测试面试题(附答案)

眨眼间2023年快过去一半了,不知道大家有没有找到心仪的工作呀,今天我给大家整理了100道渗透测试面试题给大家,需要答案的话可以在评论区给我留言哦~ 第一套渗透面试题 什么是渗透测试?它的目的是什么? 渗透测试的五个…

DirectX12 简单入门(一)

在很久以前写过关于DirectX9的一些应用,直到现在DirectX12已经普及了。写完几个DirectX12测试代码之后,写一篇DirectX12简单入门介绍一下基本概念,以及环境搭建和编程过程。 编程环境 与DirectX9不同,在DirectX12开发中微软将需…

『MySQL 实战 45 讲』“order by” 是怎么工作的

“order by” 是怎么工作的 首先创建一个表 CREATE TABLE t ( id int(11) NOT NULL, city varchar(16) NOT NULL, name varchar(16) NOT NULL, age int(11) NOT NULL, addr varchar(128) DEFAULT NULL, PRIMARY KEY (id), KEY city (city) ) ENGINEInnoDB;全字段排序 在 cit…

自己搭建go web 框架

思想base部分day1:封装gee封装context上下文封装tree路由树分组封装group与中间件封装文件解析封装封装错误处理 思想 web框架服务主要围绕着请求与响应来展开的 搭建一个web框架的核心思想 1 便捷添加响应路径与响应函数(base) 2 能够接收多种数据类型传入(上下文context) 3 构…

【Linux】Linux入门学习之常用命令五

介绍 这里是小编成长之路的历程,也是小编的学习之路。希望和各位大佬们一起成长! 以下为小编最喜欢的两句话: 要有最朴素的生活和最遥远的梦想,即使明天天寒地冻,山高水远,路远马亡。 一个人为什么要努力&a…

支付系统设计五:对账系统设计01-总览

文章目录 前言一、对账系统构建二、执行流程三、获取支付渠道数据1.接口形式1.1 后台配置1.2 脚本编写1.2.1 模板1.2.2 解析脚本 2.FTP形式2.1 后台配置2.2 脚本编写2.2.1 模板2.2.2 解析脚本 四、获取支付平台数据五、数据比对1. 比对模型2. 比对器 总结 前言 从《支付系统设…

AE基础教程

一:粒子插件。 AEPR插件-Trapcode Suite V18.1.0 中文版 二:跟随手指特效。 1:空对象位置关键帧跟随手指。 2:发射粒子位置,按住Alt键,连接到空对象位置处。。 三:CtrI导入素材快捷键。 四&a…

Elasticsearch基础学习-常用查询和基本的JavaAPI操作ES

关于ES数据库的和核心倒排索引的介绍 一、Elasticsearch概述简介关于全文检索引擎关系型数据库的全文检索功能缺点全文检索的应用场景Elasticsearch 应用案例 二、Elasticsearch学习准备安装下载关于es检索的核心-倒排索引正向索引(forward index)倒排索…

辅助驾驶功能开发-功能规范篇(16)-2-领航辅助系统NAP-自动变道-1

书接上回 2.3.4.自动变道 当车辆处于导航引导模式NOA功能时(即车辆横向控制功能激活),且车速大于40km/h,驾驶员按下转向灯拨杆或系统判断当前有变道需要时,自动变道系统通过对车道线、自车道前方目标距离、邻近车道前后方目标距离等环境条件进行判断,在转向灯亮起3s后控…