定时器/计数器介绍

2023-05-16

第一次在学习定时器的时候模模糊糊,在做过一些题目之后对定时器有了更新的理解,现在整理一下,做笔记使用。

目录

一.基础知识

定时器的作用:

定时器的实质:

定时器的工作原理:

定时器的两个工作模式:

(1)定时器模式:(该模式可以用STC软件来直接得出定时器,而不用自己设定)

(2)计数器模式

二.配置定时器0

三.配置定时器0的中断

一.基础知识

定时器的作用

定时计数器可以用于精确事件定时,PWM脉宽调制,波形发生,信号时序测量的方面。计时也是通过计数来实现的。

定时器的实质

加1的16计数器  分 高八位、低八位组成

51单片机定时器0内部有两个寄存器TH0和TL0,都是1字节的,理解位定时器0高位寄存器(TH0),定时器0低位寄存器(TL0), 我们知道2字节最大能存65535。

比赛板拥有三个定时器0,定时器1,定时器2    主要用定时器0

定时器的工作原理:

加1计数器对输入的脉冲进行计数。

定时器的两个工作模式

1)定时器模式:(该模式可以用STC软件来直接得出定时器,而不用自己设定)

定时器模式的原理:由系统的时钟振荡器输出脉冲经12分频(1/12 us)后送来;加1计数器是对内部机器周期计数。计数值N×机器周期Tcy就是定时时间t 。

51单片机内部有一个12MHZ的晶振:即时钟周期=1/(12M) (s) = 1/12 us

51单片机一个指令周期(机器周期)是12个时钟周期:即指令周期=12*1/12 us = 1us

每经过一个机器周期(1us),内部的16位计数 寄存器的值就会加1,直到这个寄存器装满时溢出。当加到溢出后发出一个溢出中断,即硬件使TCON中TFO或TF1置1,我们程序可以捕获到这个中断,就可以知道此时经历了(65535+1)us。

 T0(T1)当做定时器来使用,就不用外部P3.4(P3.5)引脚,是用内部机器周期计数实现定时的,当定时到就会引起中断.我们可以算出工作在定时模式时最高单次定时时间为 65535*1.085us=时间(单位us)(最高单次定时时间大概在6毫秒左右,这也就是为什么STC软件中为什么定时器只能做6毫秒以下时间的)

2)计数器模式

原理:②T0或T1引脚输入的外部脉冲源。T0(P3.4引脚),T1(P3.5引脚)每来一个脉冲计数器加1(共有16位计数器),当加到计数器为全1时,再输入一个脉冲就使计数器回零,且计数器的溢出使TCON中TFO或TF1置1,向CPU发出中断请求(定时/计数器中断允许时).

 

T0(T1)当做计数器来使用,才用到外部P3.4(P3.5)引脚,检测到1个脉冲,计数+1,当计数满时就会引起中断。

二.配置定时器0

1配置辅助寄存器    (置于定时器启动之前)

      AUXR=0X80

     对51单片机进行兼容处理。

 

2.TCON寄存器:启动定时/计数器

(可位寻址,控制T0、T1的启动和停止,以及设置溢出标志。

后缀为1的是定时器1的配置,不用管)

  TF0 = 0; //清除TF0溢出中断标志,加到65536后TF0会被硬件置为1,我们需要把他清0.

  TR0 = 1; //为1时允许定时器0计数,为0时不允许计数

  IE0和IT0不用管。

所以,我们对于TCON寄存器的使用就只对TF0和TR0设置即可。

 

3.TMOD寄存器

 

 

设置定时/计数器工作模式,设置定时/计数器工作模式。(不可位寻址)

  定时器1的不用配置,全部置1即可,定时器0配置如下

  GATE=0:用到中断的情况下,这一位需要设置为0;如果只用定时器的情况下设置为1即可。

  C/T=0:0代表用作定时器(对内部系统时钟进行计数),1代表用作计数器(对T0-P34引脚的外部脉冲进行计数)。

  M1=0,M0=0: M1和M0这样设置代表使用模式1,即TH0和TL0两个寄存器都使用。

【自动重装定时器】(后两位00):我们一开始给TH0和TL0一个初值,当它计数满65535之后,如果自动重装,TH0和TL0将会返回这个初值。(一般用这个)

【不可重装模式】(后两位01):我们一开始给TH0和TL0一个初始值,当他计数满65535之后,将不在返回这个初值,而是等待着我们再次给它赋值。

 所以,TMOD=0XF0

3.TH0TL0(配置计数初值)

如果我们要定时1ms(1000个指令周期),可以这样做,设置寄存器的初值为64536(距离65535差1000,一次1us,1000次就是1ms),这样到溢出值65536就正好1ms。       

TL0=64535%256+1;

TH0=64535/256;

定时器模式时有:N=t/Tcy(Tcy是机器周期)

计数初值的公式:X=-N

例如;计5ms的时间:t=5* s​​​​​​​

                                Tcy= ​​​​​​​

              得出 X=10240  

转换成16进制2800(4位二进制是1位16进制)

所以4位16进制的数转换成2进制就是16位

所以 28是高八位;00是低八位

然后将高八位装到TH0里面   将低八位装到TL0里面

TH0=0X28TL0=0X00

三.配置定时器0的中断

定时器0的中断:1;定时器1的中断:3;定时器2的中断:12。

以定时器0为例:

Void time0 (void)      interrupt 1

{

      中断之后系统要做的程序

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

定时器/计数器介绍 的相关文章

随机推荐

  • Java运行时的shutdown hook

    Hook作为一种回调方式 xff0c 广泛应用于软件中 从Java 1 3开始 xff0c JVM的Runtime也提供了hook的机制 xff0c 即shutdown hook 提供给出shutdown hook xff0c 在退出JVM
  • Apache Maven Resources Plugin插件详解

    Apache Maven Resources Plugin是Apache Maven团队提供的官方核心插件 xff0c 能够将Maven项目中的各种资源文件复制到指定的输出目录中 1 在Maven项目中的资源可以分为两类 main资源 xf
  • TestNG测试的并发执行详解

    TestNG在执行测试时 xff0c 默认suitethreadpoolsize 61 1 xff0c randomizesuites 61 false xff0c 即非并发顺序执行测试 但是TestNG提供了多种方式 xff0c 以支持测
  • Maven的pom.xml文件结构之Build配置build

    在Maven的pom xml文件中 xff0c Build相关配置包含两个部分 xff0c 一个是 lt build gt xff0c 另一个是 lt reporting gt xff0c 这里我们只介绍 lt build gt 1 在Ma
  • Docker容器的重启策略及docker run的--restart选项详解

    1 Docker容器的重启策略 Docker容器的重启策略是面向生产环境的一个启动策略 xff0c 在开发过程中可以忽略该策略 Docker容器的重启都是由Docker守护进程完成的 xff0c 因此与守护进程息息相关 Docker容器的重
  • docker run的--rm选项详解

    在Docker容器退出时 xff0c 默认容器内部的文件系统仍然被保留 xff0c 以方便调试并保留用户数据 但是 xff0c 对于foreground容器 xff0c 由于其只是在开发调试过程中短期运行 xff0c 其用户数据并无保留的必
  • Spring Boot的Maven插件Spring Boot Maven plugin详解

    Spring Boot的Maven插件 xff08 Spring Boot Maven plugin xff09 能够以Maven的方式为应用提供Spring Boot的支持 xff0c 即为Spring Boot应用提供了执行Maven操
  • Django项目与Django应用的关系及django.apps模块

    1 Django项目与Django应用 Django项目通常是使用django admin工具创建的项目结构 xff0c 执行如下命令创建Django项目myproject xff1a django admin startproject m
  • Gradle-7.0.3 build.gradle字段有改变

    如果你使用最新的 Gradle 7 0 3 build gradle文件里 defaultConfig 作用域内个别字段有变化 defaultConfig span class token punctuation span applicat
  • Unable to start ServletWebServerApplicationContext due to missing ServletWebServerFactory bean异常解析

    Spring Boot升级到2 0 1 xff0c 再次按照其官网的Quick Start做了一下上手练习 xff0c Maven构建成功 xff0c 但是启动应用总是报错如下 xff1a Unable to start ServletWe
  • Spring Boot 2.0中嵌入式Web容器(如Tomcat)对HTTP2的支持详解

    Spring Boot应用往往作为服务发布 xff0c 这里对HTTP2的支持 xff0c 主要是对通过嵌入式Web容器支持HTTP2 1 在最新的Spring Boot 2 0 3 RELEASE中 xff0c 集成的三种嵌入式Web容器
  • Spring Cloud OpenFeign详解

    作为Spring Cloud的子项目之一 xff0c Spring Cloud OpenFeign以将OpenFeign集成到Spring Boot应用中的方式 xff0c 为微服务架构下服务之间的调用提供了解决方案 首先 xff0c 利用
  • Docker容器支持IPv6的方法

    1 设置Docker Engine支持IPv6 1 启动Docker Engine时即开启对IPv6的支持 默认启动时Docker Engine只支持IPv4 启动Docker Engine时 xff0c 指定 ipv6选项即可支持IPv6
  • 总线带宽计算公式(解析)

    总线带宽 xff1a 一定时间内总线上可以传输的数据量 xff0c 使用MByte s表示 总线位宽 xff1a 总线能同时传送的数位数 xff0c 使用bit表示 xff08 常见的如32位 xff0c 64位 xff09 总线频率 xf
  • macOS终端命令行配置网络代理

    一 前言 xff1a 在下载一些需要vpn下载公司内网的源码或者认证时 xff0c 必不可少的需要使用代理 xff0c 与普通的网页及应用代理不同 xff0c 在mac的终端中并没有开启默认的代理模式 xff0c 所以需要手动进行设置 xf
  • VUE源码浅读

    首先我们要知道vue代码如何运行的 xff1f 初始化及挂载 61 gt 编译 xff08 parse optimize generate xff09 61 gt render function渲染 xff08 响应式 xff09 61 g
  • 一文解决Vue2过渡Vue3痛点

    项目升级vue3 0总结 醉逍遥neo的博客 CSDN博客 升级项目vue版本
  • 前端vue需求:将当前页面转成图片或者PDF并下载

    一 xff0c 下载依赖并引用 npm install html2canvas jspdf import html2canvas from 34 html2canvas 34 import jsPDF from 34 jspdf 34 二
  • react数据之dispatch,reducer

    1 之前写了一篇fetch的简单用法 xff0c 实际项目中数据比那个要复杂 xff0c 下面看一下通过dispatch和reducer来控制数据的更新 xff1b 2 还是以上一个添加分组的组件为例 xff1a 首先我们写一个MoveGr
  • 定时器/计数器介绍

    第一次在学习定时器的时候模模糊糊 xff0c 在做过一些题目之后对定时器有了更新的理解 xff0c 现在整理一下 xff0c 做笔记使用 目录 一 基础知识 定时器的作用 xff1a 定时器的实质 xff1a 定时器的工作原理 xff1a