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

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

sbit LED = P1^0;  // LED连接到P1.0

void Timer0_Init() {
    TMOD |= 0x01;  // 定时器0,模式1(16位定时器)
    TH0 = 0xFC;    // 初值,定时1ms
    TL0 = 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();  // 初始化定时器0
    while (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 int

sbit 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();  // 初始化定时器1
    while (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。

相关文章:

  • 开业盛典活动策划方案拆解
  • Django中数据库迁移命令
  • pyqt写一个待办程序
  • 惠普HP Color LaserJet CP1215/1210彩色打印机打印校准方法
  • 比较5点结构的减一对称性
  • KT1025A蓝牙音频芯片歌名歌词ID3显示芯片的功能说明
  • 手动埋点的demo
  • 双击打开、输入内容即可生成二维码的便捷工具
  • 往es中写入一条数据的,请求流程
  • 使用MyBatis生成器
  • ZOJ 1012 Mainframe
  • 关于XML映射器的基本问题
  • 【线性代数】2矩阵
  • DC-8靶机渗透测试全过程
  • Unity学习part2
  • python从入门到进去
  • [高等数学] 分部积分法
  • 计网-数据链路层
  • 【华为OD机考】华为OD笔试真题解析(10)--字符串重新排序
  • 使用 Python 爬虫和 FFmpeg 爬取 B 站高清视频
  • 印度外交秘书:印巴军方将于12日再次对话
  • 婚姻登记“全国通办”首日观察:数据多跑路,群众少跑腿
  • 冯德莱恩:欧美贸易谈判前不会前往美国会见特朗普
  • 代理销售保险存在误导行为,农业银行重庆市分行相关负责人被罚款0.1万元
  • 马上评|比余华与史铁生的友情更动人的是什么
  • 大四本科生已发14篇SCI论文?学校工作人员:已记录汇报