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

news2024/11/24 16:30:33

一: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.coloradmin.cn/o/488787.html

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

相关文章

【MybatisPlus】高级版可视化、可配置 自动生成代码

今天看别人使用了一个更加智能的生成代码工具,可视化、可配置策略,非常方便,配置一次,在哪都可以使用,也不会跟项目藕合下面简单说一下使用方式。 1、介绍mybatis-plus-generator-ui 主要是封装了mybatis-plus-gener…

【深度学习】计算机视觉(13)——模型评价及结果记录

1 Tensorboard怎么解读? 因为意识到tensorboard的使用远不止画个图放个图片那么简单,所以这里总结一些关键知识的笔记。由于时间问题,我先学习目前使用最多的功能,大部分源码都包含summary的具体使用,基本不需要自己修…

【AWS入门】将EC2的系统日志推送到CloudWatch

创建一个 EC2 实例,不附加任何 IAM profile. ※这里注意不要用23年最新版本的镜像,该镜像不支持awslogs 选择旧版镜像可成功安装awslogs 开始创建一个 IAM profile 创建角色,服务选择 EC2, policy 选择 CloudWatchAgentServerPolicy. 切换回…

GPT 学术优化 (ChatGPT Academic)搭建过程(含ChatGLM cuda INT4量化环境和newbing cookie)

文章目录 1、GPT Academic2、chatGPT3、chatGLM4、newbing 1、GPT Academic 项目地址:地址 安装部分 git clone https://github.com/binary-husky/chatgpt_academic.git cd chatgpt_academicconda create -n gptac_venv python3.11 conda activate gptac_venv pyt…

ASEMI代理ADM3202ARUZ-REEL7原装ADI车规级ADM3202ARUZ-REEL7

编辑:ll ASEMI代理ADM3202ARUZ-REEL7原装ADI车规级ADM3202ARUZ-REEL7 型号:ADM3202ARUZ-REEL7 品牌:ADI /亚德诺 封装:TSSOP-16 批号:2023 安装类型:表面贴装型 引脚数量:16 工作温度: …

助力数字轻工发展,企企通亮相第十三届中国轻工业信息化大会

新一代数字技术蓬勃发展,数字经济和实体经济加速融合,数字化不仅仅是生产和管理方式的转变,更是一场创新的革命,只有通过持续创新、不断优化产品内容和服务,才能真正满足客户的需求。 近日,第十三届中国轻工…

想要跳槽涨薪 那你准备拿下 Framework 了吗?

2023这个阶段Android 还行,只是初级开发没有之前那么吃香了,初级市场饱和,但是中高级岗位人才还是比较稀缺。 我们Android程序员与其他程序员一样,每过一年焦虑便加深一点,在近几年越来越差的大环境下更是如此。许多程…

C++好难(2):类和对象(上篇)

okay,从这里开始,就进入c比较难的部分了~啊啊啊!!! (﹃ԅ) 坚持坚持啦 ~ ᵎ(•̀㉨•́)و ̑̑ 【本章目标】 1.面向过程和面向对象初步认识 2.类的引入 3.类的定义 4.类的访问限定符及封装 5.类的作用域 6.类的实…

情景剧本杀闯关系统

情景剧本杀闯关软件的开发需求通常包括以下几个方面: 剧本设计:开发者需要根据用户需求和市场调研,设计不同主题和难度等级的剧本内容,以及游戏过程中的任务、角色和道具等。 游戏引擎开发:为了实现游戏过程中…

TensoRT量化第四课:PTQ与QAT

目录 PTQ与QAT前言1. TensorRT量化2. PTQ3. QAT4. QAT实战4.1 环境配置4.2 pytorch_quantization简单示例4.3 自动插入QDQ节点 总结 PTQ与QAT 前言 手写AI推出的全新TensorRT模型量化课程,链接。记录下个人学习笔记,仅供自己参考。 本次课程为第四课&am…

Netty基础(一)

1.概述 1.1.原生NIO存在的问题 1>.NIO的类库和API繁杂,使用麻烦: 需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等; 2>.需要具备其他的额外技能: 要熟悉Java多线程编程,因为NIO编程涉及到Reactor模式,你必须对多线程和网络编程非常熟悉,才能…

【数据结构与算法】图——邻接表与邻接矩阵

文章目录 一、图的基本概念二、图的存储结构2.1 邻接矩阵2.2 邻接表2.3 邻接矩阵的实现2.4 邻接表的实现 三、总结 一、图的基本概念 图(Graph)是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G(V,E&#…

【服务器数据恢复】多块磁盘离线导致RAID5崩溃的数据恢复案例

服务器数据恢复环境&故障: 某品牌StorageWorks存储设备,8块磁盘组建一组raid5磁盘阵列。存储中2块磁盘掉线导致阵列崩溃,经过检查发现掉线的2块磁盘均存在物理故障。 服务器数据恢复过程: 1、硬件工程师对掉线的两块磁盘进行…

性能测试-压力测试如何快速上手?8年资深测试总结整理,永不背锅...

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 一般我们在刚介入…

mulesoft MCIA 破釜沉舟备考 2023.05.04.30(易错题)

mulesoft MCIA 破釜沉舟备考 2023.05.04.30(易错题) 1. According to MuleSoft, which major benefit does a Center for Enablement (C4E) provide for an enterprise and its lines of business?2. An organization is choosing between API-led connectivity and other i…

ASEMI代理ADM3251EARWZ-REEL原装ADI车规级ADM3251EARWZ-REEL

编辑:ll ASEMI代理ADM3251EARWZ-REEL原装ADI车规级ADM3251EARWZ-REEL 型号:ADM3251EARWZ-REEL 品牌:ADI/亚德诺 封装:SOIC-20-300mil 批号:2023 引脚数量:20 工作温度:-40C~85C 安装类型…

vim常用命令总结

vim常用命令总结 (转) 在命令状态下对当前行用 (连按两次), 或对多行用n(n是自然数)表示自动缩进从当前行起的下面n行。你可以试试把代码缩进任意打乱再用n排版,相当于一般IDE里的code format。使用ggG可对…

如何在Windows AD域中驻留ACL后门

前言 当拿下域控权限时,为了维持权限,常常需要驻留一些后门,从而达到长期控制的目的。Windows AD域后门五花八门,除了常规的的添加隐藏用户、启动项、计划任务、抓取登录时的密码,还有一些基于ACL的后门。 ACL介绍 …

X3派 部署pytorch yolov5 demo

一、配置环境 我的pytorch之前已配置了,参照链接: 安装anconda配置pytorch 查看环境conda env list 激活环境 conda activate yolov5_py3.10 安装onnx:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple onnx 安装yolov5需要的包…

小程序中使用CANVAS实现手写签名并写入模板图片中

实测,开发者工具中滚动条位置会影响书写,显示会有些问题,手机上测试正常 index.js const App getApp();Page({/*** 页面的初始数据*/data: {curScrollTop : 0},/*** 生命周期函数--监听页面加载*/onLoad(options) {},/*** 生命周期函数--监…