STC15W104 定时器实现灯的闪烁(定时器原理讲解)

news/2024/10/30 19:29:55/

一:STC15W104单片机有几个定时器

STC15W104单片机共有2个定时器,分别为定时器0、定时器2。

在这里插入图片描述

二:定时器的作用

定时器是单片机中的一种常用外设,用于在一定时间间隔内产生中断。

定时器通常用于计时、测量时间间隔、生成PWM信号等应用中。
在STC15W104单片机中,定时器可以被配置为定时器/计数器模式。
在定时器模式下,定时器会在经过指定的时间间隔后产生中断信号;
在计数器模式下,定时器则会根据外部时钟输入进行计数,当计数值达到指定阈值时,定时器会产生中断信号。定时器的使用需要配置相应的寄存器,具体使用方法可参考相关的数据手册。

三:定时器的工作模式

定时器的工作模式可以通过相应的寄存器进行配置,具体而言,可以通过以下寄存器进行配置:

  • TCON:定时器控制寄存器,用于配置定时器的工作模式、中断标志位等。
  • TMOD:定时器模式寄存器,用于配置定时器的工作模式、计数值计量单位、计数/定时器选择等。
  • THx/TLx:定时器高/低位计数寄存器,用于存储定时器计数值的高8位/低8位。

在定时器模式下,定时器的工作流程如下:

  1. 首先,需要配置TMOD寄存器,以选择定时器的工作模式(0/1/2/3)和计数值计量单位(12位/16位)。
  2. 然后,需要配置THx/TLx寄存器,以设置定时器的初始计数值。
  3. 接下来,需要启动定时器,以开始计时。在启动定时器时,需要设置TCON寄存器中的相应位,以使定时器开始工作。
  4. 当定时器计数值达到设定的阈值时,定时器会产生中断信号,此时会将TCON寄存器中的中断标志位置位,从而触发中断服务程序。

在计数器模式下,定时器的工作流程与定时器模式类似,唯一的区别在于定时器计数值的来源不同。在计数器模式下,定时器会根据外部时钟输入进行计数,因此需要将外部时钟输入与定时器相连接。

分频模式

在STC15W104单片机的定时器中,定时器0和定时器1支持外部时钟源的分频功能。
分频功能可以将外部时钟源的频率除以指定的系数,从而降低定时器的计数速度。分频系数可以通过相应的寄存器进行配置,具体而言,可以通过以下寄存器进行配置:

  • TMOD中的高4位(M1、M0):用于选择分频系数。
  • AUXR中的低2位(T0x12、T1x12):用于选择分频系数的倍频。

其中,TMOD寄存器的M1、M0位用于选择分频系数,具体配置方法如下:

  • M1=0,M0=0:不分频。
  • M1=0,M0=1:分频2。
  • M1=1,M0=0:分频4。
  • M1=1,M0=1:分频8。

AUXR寄存器的T0x12、T1x12位用于选择分频系数的倍频,具体配置方法如下:

  • T0x12=0,T1x12=0:不倍频。
  • T0x12=0,T1x12=1:倍频2。
  • T0x12=1,T1x12=0:不倍频。
  • T0x12=1,T1x12=1:不倍频。

通过分频功能,可以有效地降低定时器的计数速度,从而适应不同的计时需求。

四:定时器定时时间的计算

ISP软件寻找例程

在这里插入图片描述

程序源码

/*---------------------------------------------------------------------*/
/* --- STC MCU Limited ------------------------------------------------*/
/* --- STC15F4K60S4 系列 定时器0的16位自动重装载模式举例---------------*/
/* --- Mobile: (86)13922805190 -------------- -------------------------*/
/* --- Fax: 86-0513-55012956,55012947,55012969 ------------------------*/
/* --- Tel: 86-0513-55012928,55012929,55012966-------------------------*/
/* --- Web: www.STCMCU.com --------------------------------------------*/
/* --- Web: www.GXWMCU.com --------------------------------------------*/
/* 如果要在程序中使用此代码,请在程序中注明使用了STC的资料及程序        */
/* 如果要在文章中应用此代码,请在文章中注明使用了STC的资料及程序        */
/*---------------------------------------------------------------------*///本示例在Keil开发环境下请选择Intel的8058芯片型号进行编译
//若无特别说明,工作频率一般为11.0592MHz#include "reg51.h"typedef unsigned char BYTE;
typedef unsigned int WORD;//-----------------------------------------------#define FOSC 11059200L#define T1MS (65536-FOSC/1000)      //1T模式
//#define T1MS (65536-FOSC/12/1000) //12T模式sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xC9;
sfr P5M0 = 0xCA;
sfr P6M1 = 0xCB;
sfr P6M0 = 0xCC;
sfr P7M1 = 0xE1;
sfr P7M0 = 0xE2;sfr AUXR = 0x8e;                    //Auxiliary register
sbit P10 = P1^0;//-----------------------------------------------/* Timer0 interrupt routine */
void tm0_isr() interrupt 1
{P10 = ! P10;                    //将测试口取反
}//-----------------------------------------------/* main program */
void main()
{P0M0 = 0x00;P0M1 = 0x00;P1M0 = 0x00;P1M1 = 0x00;P2M0 = 0x00;P2M1 = 0x00;P3M0 = 0x00;P3M1 = 0x00;P4M0 = 0x00;P4M1 = 0x00;P5M0 = 0x00;P5M1 = 0x00;P6M0 = 0x00;P6M1 = 0x00;P7M0 = 0x00;P7M1 = 0x00;AUXR |= 0x80;                   //定时器0为1T模式
//  AUXR &= 0x7f;                   //定时器0为12T模式TMOD = 0x00;                    //设置定时器为模式0(16位自动重装载)TL0 = T1MS;                     //初始化计时值TH0 = T1MS >> 8;TR0 = 1;                        //定时器0开始计时ET0 = 1;                        //使能定时器0中断EA = 1;while (1);
}

然后程序进行移植修改

下面是我们修改好的程序


http://www.ppmy.cn/news/62087.html

相关文章

pandas使用教程:pandas resample函数处理时间序列数据

文章目录 时间序列(TimeSeries)执行多个聚合 上采样和填充值通过apply传递自定义功能 DataFrame对象 时间序列(TimeSeries) #创建时间序列数据 rng pd.date_range(1/1/2012, periods300, freqS)ts pd.Series(np.random.randint(0, 500, len(rng)), indexrng) ts2012-01-01 0…

YOLOv5+单目跟踪测速(python)

YOLOv5+单目跟踪测速(python) 1. 相关配置2. 相机标定2.1:标定方法1(针对图片)2.2:标定方法2(针对视频)3. 目标跟踪4. 相机测速4.1 测速添加4.2 细节修改(可忽略)4.3 主代码5. 实验效果相关链接 1. YOLOv5+单目测距(python) 2. YOLOv7+单目测距(python)

2022云计算技能大赛容器云开发

容器开发 【任务 6】容器云运维开发:Kubernetes APIs 运维开发[10 分]【题目 1】Python 运维开发:基于 Kubernetes Restful API 实现 Deployment 创建[2 分]【题目 2】Python 运维开发:基于 Kubernetes Python SDK 实现 Job 创建[1 分]【题目…

计算时间复杂度详解

1,前置知识 我们在计算时间复杂度之前的前置知识是等差数列的通项公式和求和公式以及等比数 列的通项公式和求和公式 等差数列: 通项公式:ana1(n-1)d(d是公差) 求和公式:Snn(a1an)/2 等比数列&#xf…

低代码平台解读—如何不写代码创建表单和维护表单

工作表新建与修改——敲敲云 新建工作表的流程包含 新建工作表/编辑公祖表为工作表添加字段,例如“员工档案”表中有姓名、性别、年龄等字段为字段设置属性工作表布局工作表预览、保存、关闭 1、新建工作表/修改工作表 新建工作表 修改工作表 2、为工作表添加字段 …

基于docker的confluent-kafka搭建及python接口使用

基于docker的confluent-kafka搭建及python接口使用 1. 安装docker以及docker-compose1.1 安装docker1.2 安装docker-compose 2. 安装confluent-kafka3. python接口使用3.1 安装依赖包3.2 创建、查看topic3.3 python接口-broker3.4 python接口-consumer 参考链接 本文介绍基于do…

[2023-DAS x SU战队2023开局之战] crypto-sign1n

题目描述: from secret import r, t from Crypto.Util.number import *flag bxxx flag bytes_to_long(flag) e 0x10001def gen_keys():p getPrime(1024)q getPrime(1024)phi (p-1)*(q-1)d inverse(e,phi)n p*qprint(fn {n})WHATF (d ** 3 3) % phiprint…

一个让人类窒息的AI工具,或许未来人工智能真的能代替人类!

时隔几周,「神采PromeAI」又更新了 不仅页面做了小小的调整 又增加了「背景生成」功能 害怕各位小伙伴找不到使用位置 今天小编就给大家分享一个超全的使用教程 极速出图效率翻倍 让神采PromeAI在应用性设计方面更具优势 温馨提示:目前手机适配端无…