蓝桥杯篇---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。

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

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

相关文章

2D 游戏艺术、动画和光照

原文&#xff1a;https://unity.com/resources/2d-game-art-animation-lighting-for-artists-ebook 笔记 用Tilemap瓷砖大小为1单元&#xff0c;人物大小在0.5~2单元 PPU &#xff1a;单位像素 pixels per unit 2160 4K分辨率/ 正交相机size*2 完整屏幕显示像素点 有骨骼动…

HTML的入门

一、HTML HTML&#xff08;HyperText Markup Language&#xff0c;超文本标记语言&#xff09;是一种用来告知浏览器如何组织页面的标记语言。 超文本&#xff1a;就是超越了文本&#xff1b;HTML不仅仅可以用来显示文本(字符串、数字之类)&#xff0c;还可以显示视频、音频等…

C语言:指针详解

C语言&#xff1a;指针详解 1&#xff1a;指针的基本概念1&#xff1a;什么是指针2&#xff1a;为什么要引入指针3&#xff1a;指针的作用4&#xff1a;指针的类型 2&#xff1a;指针的声明与初始化1&#xff1a; 指针的声明2&#xff1a; 指针的初始化 3&#xff1a;指针的操作…

Spring Boot “约定大于配置”

什么是“约定大于配置”&#xff1f; “约定大于配置”是一种简化开发的设计理念。简单来说&#xff0c;就是框架默认提供了常见的配置和行为&#xff0c;开发者只需要按照约定来编写代码&#xff0c;避免了繁琐的配置&#xff0c;只在需要时进行定制和调整。这种理念在Spring…

redis sentinel模式 与 redis 分片集群 配置

Redis 最低为5.0版本&#xff0c;以下为6.2.6版本信息。 模式 高可用性 数据分片 部署复杂度 适用场景 Sentinel 模式 高 无 中等 中小规模&#xff0c;需要高可用性 集群模式 高 支持 复杂 大规模&#xff0c;需要高…

HCIA项目实践---OSPF的基本配置

9.5.12 OSPF的基本配置 &#xff08;所搭环境如上图所示&#xff09; A 先配置IP地址 (先进入路由器R1的0/0/0接口配置IP地址&#xff0c;再进入环回接口配置IP地址) &#xff08;配置R2路由器的0/0/0和0/0/1以及环回接口的IP地址&#xff09; &#xff08;置R3路由器的0/0/0接…

【MyBatis】预编译SQL与即时SQL

目录 1. 以基本类型参数为例测试#{ }与${ }传递参数的区别 1.1 参数为Integer类型 1.2 参数为String类型 2. 使用#{ }传参存在的问题 2.1 参数为排序方式 2.2 模糊查询 3. 使用${ }传参存在的问题 3.1 SQL注入 3.2 对比#{ } 与 ${ }在SQL注入方面存在的问题 3.3 预编译…

07:串口通信(二):收发数据包

1、数据包 我们使用上位机个单片机发送数据包时&#xff0c;规定包头和包尾&#xff0c;将我们需要发送的数据放在中间&#xff0c;数据的长度我们也可以自己规定。一般情况下HEX数据包我们使用固定长度数据包。而文本数据包使用是可变长度数据包。 2、HEX数据包 2.1、HEX固定…

vs2022支持.netframework4.0

下载nuget包 .netframework4.0 解压nuget 复制到C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework 参考 https://www.cnblogs.com/bdqczhl/p/18670152 https://blog.csdn.net/xiaomeng1998_/article/details/135979884

《安富莱嵌入式周报》第350期:Google开源Pebble智能手表,开源模块化机器人平台,开源万用表,支持10GHz HRTIM的单片机,开源CNC控制器

周报汇总地址&#xff1a;嵌入式周报 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! 视频版&#xff1a; https://www.bilibili.com/video/BV1YPKEeyEeM/ 《安富莱嵌入式周报》第350期&#xff1a;Google开…

Oracle临时表空间(基础操作)

临时表空间 临时表空间&#xff1a;用来存放用户的临时数据&#xff0c;临时数据在需要时被覆盖&#xff0c;关闭数据库后自动删除&#xff0c;其中不能存放永久性数据。 用户进程和服务器进程是一对一的叫做专用连接。 任何一个用户连到oracle数据库&#xff0c;oracle都会…

浅识MQ的 Kafka、ActiveMQ、RabbitMQ、RocketMQ区别

DeepSeek回复&#xff1a; 以下是主流消息队列&#xff08;MQ&#xff09;的对比分析&#xff0c;结合核心特性、适用场景和实际案例说明&#xff1a; 一、主流MQ对比分析 维度 Kafka RabbitMQ RocketMQ ActiveMQ所属公司Apache&#xff08;LinkedIn开源&#xff09;…

19.4.2 -19.4.4 新增、修改、删除数据

版权声明&#xff1a;本文为博主原创文章&#xff0c;转载请在显著位置标明本文出处以及作者网名&#xff0c;未经作者允许不得用于商业目的。 需要北风数据库的请留言自己的信箱。 19.4.2 新增数据 数据库数据的新增、修改和删除不同于查询&#xff0c;查询需要返回一个DbD…

若依系统环境搭建记录

开源若依系统网上资料也很全的&#xff0c;本篇博文记录下自己搭建环境过程中遇到的一些问题。 配置Maven和编辑器选择 我懒得配置Eclipse了&#xff0c;直接用vscode作为编辑器&#xff0c;后面构建运行都用命令行。 配置数据库连接 按照mysql5.7按网上教程即可&#xff1…

Redis——优惠券秒杀问题(分布式id、一人多单超卖、乐悲锁、CAS、分布式锁、Redisson)

#想cry 好想cry 目录 1 全局唯一id 1.1 自增ID存在的问题 1.2 分布式ID的需求 1.3 分布式ID的实现方式 1.4 自定义分布式ID生成器&#xff08;示例&#xff09; 1.5 总结 2 优惠券秒杀接口实现 3 单体系统下一人多单超卖问题及解决方案 3.1 问题背景 3.2 超卖问题的…

解锁豆瓣高清海报(三)从深度爬虫到URL构造,实现极速下载

脚本地址: 项目地址: Gazer PosterBandit_v2.py 前瞻 之前的 PosterBandit.py 是按照深度爬虫的思路一步步进入海报界面来爬取, 是个值得学习的思路, 但缺点是它爬取慢, 仍然容易碰到豆瓣的 418 错误, 本文也会指出彻底解决旧版 418 错误的方法并提高爬取速度. 现在我将介绍…

3D可视化定制:开启个性化消费新时代

3D可视化定制是一种将产品的三维模型与可视化技术相结合&#xff0c;以满足消费者个性化需求的服务。以下是对3D可视化定制的详细介绍&#xff1a; 一、定义与原理 3D可视化定制是指利用三维建模技术和可视化工具&#xff0c;为消费者提供一个直观、互动且高度个性化的定制平…

【OJ项目】深入剖析 JudgeServiceImpl 类:题目的判题逻辑详解

《深入剖析 JudgeServiceImpl 类&#xff1a;题目的判题逻辑详解》 一、引言 在编程竞赛或者在线编程平台中&#xff0c;判题服务是核心功能之一。它负责对用户提交的代码进行编译、执行&#xff0c;并根据预设的测试用例判断代码的正确性。今天我们就来详细剖析一个名为 Jud…

MySQL常见错误码及解决方法(1130、1461、2003、1040、2000、1049、1062、1129、2002、1690等)

目录 【问题1】、FATAL: error 1130: Unknown error 1130 【问题2】、FATAL: error: 1461 【问题3】、ERROR 2003 (HY000): Cant connect to MySQL server on "" (113) 【问题4】、FATAL: error 2003: Cant connect to MySQL server on 172.19.111.151 (111) 【问…

5种解决方式来应对deepseek暂时无法回答

在工作中&#xff0c;你是否常常遇到deepseek回复“暂时无法回答”的情况&#xff1f;根据某权威机构的调研数据显示&#xff0c;约73%的用户在使用此类工具时遇到过类似问题&#xff0c;这严重影响了工作效率和体验。本文将为你提供5种实测有效的解决方法&#xff0c;帮助你快…