蓝桥杯篇---IAP15F2K61S2定时器
文章目录
- 前言
- 简介
- 定时器的工作模式
- 1.模式0
- 2.模式1
- 3.模式2
- 4.模式3
- 定时器的寄存器
- 1.TMOD
- 2.TCON
- 3.THO/TL0
- 4.TH1/TL1
- 定时器的使用步骤
- 1.配置TMOD
- 2.设置初值
- 3.启动定时器
- 4.使能中断
- 5.编写中断服务函数
- 示例代码:定时器的基本使用
- 代码说明
- 示例代码:定时器1用于PWM生成
- 代码说明
- 注意事项
- 1.初值计算
- 2.公式
- 3.中断优先级
- 4.模式选择
- 5.PWM精度
- 总结
前言
本文仅仅简单介绍了IAP15F2K61S2中的定时器的使用以及使用定时器生成PWM。
简介
IAP15F2K61S2 是一款基于8051内核的单片机,内置多个定时器(如定时器0、定时器1等),可用于定时、计数、PWM生成、频率测量等功能。定时器是单片机中非常重要的外设,能够实现精确的时间控制和事件处理。
定时器的工作模式
IAP15F2K61S2 的定时器通常有以下几种工作模式:
1.模式0
模式0:13位定时器/计数器。
2.模式1
模式1:16位定时器/计数器。
3.模式2
模式2:8位自动重装定时器/计数器。
4.模式3
模式3:双8位定时器/计数器(仅定时器0可用)。
定时器的寄存器
1.TMOD
TMOD:定时器模式寄存器,用于设置定时器的工作模式。
2.TCON
TCON:定时器控制寄存器,用于启动或停止定时器。
3.THO/TL0
TH0/TL0:定时器0的高8位和低8位寄存器。
4.TH1/TL1
TH1/TL1:定时器1的高8位和低8位寄存器。
定时器的使用步骤
1.配置TMOD
配置 TMOD:设置定时器的工作模式。
2.设置初值
设置初值:给 THx/TLx 寄存器赋初值。
3.启动定时器
启动定时器:设置 TCON 中的 TRx 位。
4.使能中断
使能中断:如果需要定时器中断,需配置 IE 寄存器。
5.编写中断服务函数
编写中断服务函数:处理定时器溢出事件。
示例代码:定时器的基本使用
以下代码展示了如何使用定时器0在 IAP15F2K61S2 上实现1秒的定时,并控制LED闪烁。
#include <reg52.h>#define uchar unsigned char
#define uint unsigned intsbit LED = P1^0; // LED连接到P1.0void Timer0_Init() {TMOD |= 0x01; // 定时器0,模式1(16位定时器)TH0 = 0xFC; // 初值,定时1msTL0 = 0x18;ET0 = 1; // 使能定时器0中断EA = 1; // 使能总中断TR0 = 1; // 启动定时器0
}void Timer0_ISR() interrupt 1 {static uint count = 0;TH0 = 0xFC; // 重装初值TL0 = 0x18;count++;if (count >= 1000) { // 1秒到达count = 0;LED = ~LED; // LED状态取反}
}void main() {Timer0_Init(); // 初始化定时器0while (1); // 主循环,等待中断
}
代码说明
Timer0_Init:
设置定时器0为模式1(16位定时器)。
初值设置为 TH0 = 0xFC 和 TL0 = 0x18,定时1ms。
使能定时器0中断和总中断。
启动定时器0。
Timer0_ISR:
定时器0中断服务函数,每次溢出时重装初值。
使用静态变量 count 计数,达到1000次(即1秒)时切换LED状态。
main:
初始化定时器0,进入主循环等待中断。
示例代码:定时器1用于PWM生成
以下代码展示了如何使用定时器1在 IAP15F2K61S2 上生成PWM信号,控制LED亮度。
#include <reg52.h>#define uchar unsigned char
#define uint unsigned intsbit PWM_OUT = P1^0; // PWM输出引脚void Timer1_Init() {TMOD |= 0x10; // 定时器1,模式1(16位定时器)TH1 = 0xFF; // 初值,定时较短TL1 = 0x00;ET1 = 1; // 使能定时器1中断EA = 1; // 使能总中断TR1 = 1; // 启动定时器1
}void Timer1_ISR() interrupt 3 {static uchar pwm_count = 0;TH1 = 0xFF; // 重装初值TL1 = 0x00;pwm_count++;if (pwm_count < 50) { // 占空比调整PWM_OUT = 1; // 高电平} else {PWM_OUT = 0; // 低电平}if (pwm_count >= 100) {pwm_count = 0; // 重置计数}
}void main() {Timer1_Init(); // 初始化定时器1while (1); // 主循环,等待中断
}
代码说明
Timer1_Init:
设置定时器1为模式1(16位定时器)。
初值设置为 TH1 = 0xFF 和 TL1 = 0x00,定时较短。
使能定时器1中断和总中断。
启动定时器1。
Timer1_ISR:
定时器1中断服务函数,每次溢出时重装初值。
使用静态变量 pwm_count 计数,实现占空比控制。
占空比为50%(高电平50次,低电平50次)。
main:
初始化定时器1,进入主循环等待中断。
注意事项
1.初值计算
初值计算:定时器的初值需要根据晶振频率和定时时间计算。
2.公式
公式:初值 = 65536 - (定时时间 * 晶振频率) / 12。
3.中断优先级
中断优先级:如果有多个中断,需合理设置中断优先级。
4.模式选择
模式选择:根据需求选择合适的定时器模式。
5.PWM精度
PWM精度:PWM的精度取决于定时器的溢出时间和占空比调整的粒度。
通过以上代码和说明,你可以在 IAP15F2K61S2 上灵活使用定时器实现定时、PWM生成等功能。
总结
以上就是今天要讲的内容,本文仅仅简单介绍了IAP15F2K61S2中的定时器的使用以及使用定时器生成PWM。
相关文章:
蓝桥杯篇---IAP15F2K61S2定时器
文章目录 前言简介定时器的工作模式1.模式02.模式13.模式24.模式3 定时器的寄存器1.TMOD2.TCON3.THO/TL04.TH1/TL1 定时器的使用步骤1.配置TMOD2.设置初值3.启动定时器4.使能中断5.编写中断服务函数 示例代码:定时器的基本使用代码说明示例代码:定时器1用…...
Java发展史
JavaEE的由来 语言的诞生 Java的前身是Oak语言,其目的是搞嵌入式开发开发智能面包机 叮~~~🍞🍞🍞 产品以失败告终 巅峰 网景公司需要网景浏览器打开网页,Oak->Java,进行前端开发(相关技…...
Jenkins 新建配置 Freestyle project 任务 六
Jenkins 新建配置 Freestyle project 任务 六 一、新建任务 在 Jenkins 界面 点击 New Item 点击 Apply 点击 Save 回到任务主界面 二、General 点击左侧 Configure Description:任务描述 勾选 Discard old builds Discard old builds:控制何时…...
Electron视图进程和主进程通讯
快速创建基于vue的electron项目:quick-start/create-electron - npm 视图线程也就index.html是无法直接访问这个api的(如果没有开启视图层访问nodejs的功能,现在几乎没法直接开启,开启了一堆警告提示) 所以需要通过r…...
【湖南-益阳】《益阳市市本级政府投资信息化项目预算编制与财政评审工作指南》益财评〔2024〕346号-省市费用标准解读系列40
《益阳市市本级政府投资信息化项目预算编制与财政评审工作指南(试行)》(益财评〔2024〕346号)由益阳市财政局主编,2024年10月17日起正式执行,本指南主要规定了政府投资信息化项目费用的构成、测量过程和方法…...
springboot+mybatis按条件分页查询多张表
文章目录 背景方案推荐创建 DTO创建 Mapper创建对应 xmlService 代码 背景 假如同 mysql 数据源下有如下几张表: 用户基础信息表用户地址表用户学历信息表 我希望做分页查询用户数据,用户数据为各个表内信息的汇总,并且这个分页查询会根据…...
探索Java中的集合类_特性与使用场景
1. 引言 1.1 Java集合框架概述 Java集合框架(Java Collections Framework, JCF)是Java中用于存储和操作一组对象的类和接口的统称。它提供了多种数据结构来满足不同的需求,如列表、集合、映射等。JCF的核心接口包括Collection、List、Set、Queue和Map,以及它们的各种实现…...
具身智能在智能巡检机器人中的应用——以开关柜带电操作机器人为例
随着机器人技术和人工智能的迅速发展,具身智能在各行业的应用日益广泛,尤其是在电力行业中的智能巡检领域。传统的电力巡检和维护工作通常需要人工操作,存在着高温、高压、强电磁场等危险环境,且效率较低。开关柜带电操作机器人作…...
C#+SqlSugar实现主从库读写分离
在使用 **SqlSugar** 进行分库操作时,可以通过配置多个数据库连接,并根据业务逻辑动态切换数据库。以下是一个完整的分库示例,展示如何实现分库功能。 --- ### **1. 安装 NuGet 包** 安装 SqlSugarCore: bash dotnet add packag…...
Webpack 基础入门
一、Webpack 是什么 Webpack 是一款现代 JavaScript 应用程序的静态模块打包工具。在 Web 开发中,我们的项目会包含各种类型的文件,如 JavaScript、CSS、图片等。Webpack 可以将这些文件打包成一个或多个文件,以便在浏览器中高效加载。它就像…...
nuxt中引入element-ui组件控制台报错问题
在使用element-ui组件的外层加一层 <client-only placeholder"Loading..."><van-button type"primary">主要按钮</van-button> </client-only> 实际使用: <div class"tab"><client-only placehol…...
【机器学习】线性回归 多项式线性回归
【机器学习系列】 KNN算法 KNN算法原理简介及要点 特征归一化的重要性及方式线性回归算法 线性回归与一元线性回归 线性回归模型的损失函数 多元线性回归 多项式线性回归 多项式线性回归 V1.0多项式回归多项式回归的公式 特征代换超越函数作为特征向量维度 V1.0 多项式回归 …...
Java面试第二山!《计算机网络》!
在 Java 面试里,计算机网络知识是高频考点,今天就来盘点那些最容易被问到的计算机网络面试题,帮你轻松应对面试,也方便和朋友们一起探讨学习。 一、HTTP 和 HTTPS 的区别 1. 面试题呈现 HTTP 和 HTTPS 有什么区别?在…...
RocketMQ 5.0安装部署
0.前言 在微服务架构逐渐成为主流的今天,消息队列如同数字世界的快递员,承担着系统间高效通信的重要使命。 Apache RocketMQ 自诞生以来,因其架构简单、业务功能丰富、具备极强可扩展性等特点被众多企业开发者以及云厂商广泛采用。历经十余…...
go语言并发的最佳实践
Go 语言的并发模型是其最强大的特性之一,基于 CSP(Communicating Sequential Processes)理论,通过 goroutine 和 channel 实现轻量级并发. 一、并发核心概念 1. Goroutine 在 Go 语言中,Goroutine 是实现并发编程的…...
俄罗斯方块游戏完整代码示例
以下是一个基于Cocos Creator引擎开发的俄罗斯方块游戏的完整代码示例。该游戏实现了俄罗斯方块的基本功能,并且代码整合在单个文件中,无需任何外部依赖,可以直接在浏览器中运行。 1. 创建Cocos Creator项目 首先,确保你已经安装了…...
Ubuntu22.04配置cuda/cudnn/pytorch
Ubuntu22.04配置cuda/cudnn/pytorch 安装cuda官网下载.run文件并且安装/etc/profile中配置cuda环境变量 cudnn安装官网找cuda版本对应的cudnn版本下载复制相应文件到系统文件中 安装pytorch官网找cuda对应版本的pytorchpython代码测试pytorch-GPU版本安装情况 安装cuda 官网下…...
【九】Golang 数组
💢欢迎来到张胤尘的技术站 💥技术如江河,汇聚众志成。代码似星辰,照亮行征程。开源精神长,传承永不忘。携手共前行,未来更辉煌💥 文章目录 数组数组初始化默认初始化显式初始化省略长度初始化索…...
百达翡丽(Patek Philippe):瑞士制表的巅峰之作(中英双语)
百达翡丽(Patek Philippe):瑞士制表的巅峰之作 在钟表界,百达翡丽(Patek Philippe) 一直被誉为“世界三大名表”之一,并且常被认为是其中的至高存在。一句“没人能真正拥有一枚百达翡丽&#x…...
【学习】软件测试中的分类树法介绍
分类树法是一种软件测试设计技术,它通过构建一个树状结构来组织和展示输入数据的多种组合。这种方法有助于系统地识别和分析可能的测试情况,从而确保对软件进行全面而详尽的测试。分类树法特别适用于具有多个选择或条件的复杂系统,它可以有效…...
打造智能语料库:通过Coco AI Server 实现 Notion 笔记 RAG 检索功能
本文将详细介绍如何将 Notion 作为语料库,部署 Coco Server 的 RAG(Retrieval-Augmented Generation)功能。我们将使用 Easysearch 作为语料库存储 Notion 素材,并通过 ollama 进行 LLM 推理。 1. 环境准备 1.1 启动 Easysearch…...
SP字体UI放大代码
代码: echo off set QT_SCALE_FACTOR放大倍数 start "" "你的SP.exe启动路径"...
spring boot知识点2
1.spring boot 要开启一些特性,可通过什么方式开启 a.通过Enable注解,可启动定时服务 b.通过application.properties可设置端口号等地址信息 2.什么是热部署,以及spring boot通过什么方式进行热部署 热部署这个概念,我知道。就…...
动手学Agent——Day2
文章目录 一、用 Llama-index 创建 Agent1. 测试模型2. 自定义一个接口类3. 使用 ReActAgent & FunctionTool 构建 Agent 二、数据库对话 Agent1. SQLite 数据库1.1 创建数据库 & 连接1.2 创建、插入、查询、更新、删除数据1.3 关闭连接建立数据库 2. ollama3. 配置对话…...
qt实习总结
创建一个滑动条 QSlider *slider new QSlider(Qt::Vertical); //创建一个垂直方向的 进度条 带有上下箭头的输入框 QSpinBox 提供了一个带有上下箭头的输入框 垂直 水平怎么说 horizontal vetical 布局知识 BtnLayout->addWidget(AmendBtn); BtnLayout->addWidg…...
SpringBoot3.x整合WebSocket
SpringBoot3.x整合WebSocket 本文主要介绍最新springboot3.x下如何整合WebSocket. WebSocket简述 WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它允许在浏览器和服务器之间进行实时的、双向的通信。相对于传统的基于请求和响应的 HTTP 协议ÿ…...
vLLM专题(二):安装-CPU
vLLM 是一个 Python 库,支持以下 CPU 变体。选择您的 CPU 类型以查看供应商特定的说明: Intel/AMD x86 vLLM 最初支持在 x86 CPU 平台上进行基本模型推理和服务,支持的数据类型包括 FP32、FP16 和 BF16。 注意 此设备没有预构建的 wheel 包或镜像,因此您必须从源代码构建 v…...
「软件设计模式」适配器模式(Adapter)
软件设计模式深度解析:适配器模式(Adapter)(C实现) 一、模式概述 适配器模式(Adapter Pattern)是结构型设计模式中的"接口转换器",它像现实世界中的电源适配器一样&#…...
Dify平台搭建面试机器人
无代码搭建面试机器人 什么是Dify 什么是Dify Dify 是一款开源的大语言模型(LLM) 应用开发平台。它融合了后端即服务(Backend as Service)和 LLMOps 的理念,使开发者可以快速搭建生产级的生成式 AI 应用。即使你是非技术人员,也能…...
Vue 3 中可读可写的计算属性(Computed Properties)的使用场景
在 Vue 3 中,计算属性(Computed Properties)是一种基于响应式依赖进行缓存的属性。它们通常用于处理复杂的逻辑,并且只有当依赖的响应式数据发生变化时,才会重新计算。计算属性非常适合用于处理模板中的复杂表达式&…...
