51单片机定时/计数器

2023-05-16

硬件结构:

电路图:

 T0,T1均由两个{TH0/1(高位),TL0/1(低位)}8位SFR(Special Function Register)寄存器构成

 TMOD用于设置定时器/计数器的工作方式

TCON用于启动和停止定时器/计数器的计数,并控制定时器的工作状态

工作模式

定时器:由系统内部的时钟晶振输出脉冲的1/12,当每来一个内部脉冲,对应的计数单元就加一,当加到对应模式的最大值,TF0/1置1,向cup发出中断请求。

计数器:由外部脉冲源提供,当每来一个外部脉冲,计数器就加1,当加到计数器全为1时候,位于TCON寄存器中的TF0/1(溢出标志位)置1,向cup发出中断请求。

(如何选择定时器/计数器?见寄存器板块)

寄存器

定时器/计数器控制寄存器TCON(可按位寻址):

定时器/计数器工作方式寄存器TMOD(不可按位寻址):

 寄存器结构:

 寄存器各位功能:

特殊说明:当为计数器模式时且GATE=1,此时计数的停止与否受INTx位控制,当INTx=1(高电平)开始计数,INTx=0(低电平)停止计数。

定时器/计数器工作方式:

1--13位定时器/计数器(最大计数:2^13=8192,M1M0=00)

 由TLx的低5位(高3位未使用),THx的8位组成,TLx低5位溢出时向THx进位,,当THx溢出时候,TCON中的TFx置1,向cup发出中断请求。

设置初值:

设单片机机器周期为T,产生一次中断时间是t,那么需要的计数次数N=t/T;

THx=(8192-N)/2^5,TLx=(8192-N)%2^5;

2--16位定时器/计数器(最大计数次数:2^16=65536,M1M0=01)最常用

THx的8位和TLx的8位组成

设置初值:

N=t/T;

THx=(65536-N)/2^8,TLx=(65536-N)%2^8;

3--8位自动重装初值方式(最大计数:2^8=256,当计数器溢出,自动将上次设置的初值重装--适合做比较精确的脉冲信号发生器)

计数的次数:N=t/T

THx=256-N,TLx=256-N;

(晶振频率要选择12的整数倍,因为定时器的频率是晶振频率的1/12,如果使用11.0592MHZ,误差比较大)

4--将T0分为两个8位计数器(最大计数:256,T1被禁用了)

 TL0是正常的8位定时/计数器,计数溢出后,将TF0位置1,向cup发出中断请求,之后重装初值。

TH0也被固定为一个8位定时/计数器,计数溢出后,将TF1置1,向cup发出中断请求,之后重装初值。

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

51单片机定时/计数器 的相关文章

  • C语言之数组

    目录 一 一维数组 1 一维数组的定义 2 一维数组初始化 3 一维数组的引用 4 一维数组程序举例 二 二维数组 1 二维数组的定义 2 二维数组的初始化 3 二维数组的引用 4 二维数组的举例 三 字符数组 1 字符数组的定义 2 字符
  • C语言之函数

    目录 一 函数的定义 二 函数的参数 1 实际参数 xff08 实参 xff09 2 形式参数 xff08 形参 xff09 三 函数的调用 四 函数的返回 五 函数的声明 一 函数的定义 函数是一块代码 xff0c 接受零个或多个参数 x
  • C语言之指针运算符、指针变量及其定义、指针的使用

    目录 一 指针运算符 1 amp 运算符 2 运算符 二 指针变量及其定义 1 指针变量 2 定义指针变量 三 指针的使用 指针 xff0c 是C语言中的一个重要概念 xff0c 也是掌握C语言比较困难的部分 指针也就是内存地址 xff0c
  • C语言——指针的运算以及野指针

    目录 一 野指针 1 野指针成因 xff08 1 xff09 指针未初始化 xff08 2 xff09 指针越界访问 xff08 3 xff09 指针指向的空间释放 2 如何规避野指针 二 指针的运算 1 赋值运算 2 算术运算 3 关系运
  • C语言错题总结

    输出格式 xff08 以整形为例 xff0c 其他类似 xff09 xff1a d是普通的输出 5d是将数字按宽度为5 xff0c 采用右对齐方式输出 xff0c 若数据位数不到5位 xff0c 则左边补空格 xff0c 若数据位数超过5位
  • C语言小游戏之弹跳的小球

    1 显示静止的小球 首先利用printf函数在屏幕坐标 xff08 x y xff09 处显示一个静止的小球字符 39 o 39 xff0c 应当注意屏幕坐标系的原点在左上角 xff0c 代码如下 xff1a include lt stdi
  • 解决Clash意外关闭后的问题;附clash常见问题解决办法

    一 引言 最近 xff0c 我在一次win11的重启更新后遇到了一个问题 xff0c 那就是发现我的浏览器无法上网了 起初 xff0c 我以为我的网络存在问题 xff0c 但后来发现不是这个问题 经过我查阅资料以及实际操作后 xff0c 我
  • Qt 获取所有进程、终止某个进程

    代码中用到Qt库的地方 xff0c 不使用Qt库的可以替换为自己相应的函数 方法一 xff1a 1 Qt开源库 xff0c 通过QProcess启动系统命令 tasklist exe 获取正在运行的进程 2 QProcess process
  • Qt QPixmap设置图片透明度

    最近看到美图秀秀的一些功能 xff0c 可以手动设置图片的透明度并显示在其它图片上 xff0c 所以自己动手做了个小Demo xff0c 实际效果如下 xff1a xff08 图片仅供参考使用 xff09 可以看到拖动下方进度条 xff0c
  • 【IDEA报错】Failed to start bean ‘documentationPluginsBootstrapper‘问题及解决方案

    使用springfox swagger2进行接口文档输出 编写配置文件Swagger2Config 64 Configuration 64 EnableSwagger2 public class Swagger2Config 64 Bean
  • Android 调整Spinner下拉框高度(避免下拉列表跑到顶部)

    在运用系统原生的Spinner控件做下拉选择功能时 由于选择项的子项Item太多 导致下拉列表跑到上面去了 关键原因是系统下拉默认的高度 spinner所在的位置 超过了屏幕底部的高度 所以就会出现下拉列表跑到控件的头部去了 解决方案 1
  • c++中的随机数rand()

    总结 xff1a 1 RANK MAX 61 32767 2 随机范围 xff1a num 61 rank x C 43 43 中rand 函数的用法 1 rand 不需要参数 xff0c 它会返回一个从0到最大随机数的任意整数 xff0c
  • 最大数和最小数位置交换位置

    输入10个整数 xff0c 用函数编程将其中最大数与最小数的位置互换 然后在主函数中将交换后的数组的所有元素输出 include lt stdio h gt int main int arr 10 61 0 int maxi 61 0 in
  • HDFS基本概念

    目录 零 学习目标 一 导入新课 二 新课讲解 xff08 一 xff09 HFDS的演变 xff08 二 xff09 HDFS的基本概念 1 NameNode xff08 名称节点 xff09 2 DataNode xff08 数据节点
  • 用栈来判断字符串是否回文

    include lt iostream gt include lt bits stdc 43 43 h gt using namespace std define MAX SIZE 100 class Stack private char
  • 技术分享 | 将覆盖反馈融入黑盒模糊测试技术提升测试效率

    引言 近几年来 xff0c 自动化漏洞挖掘技术成为网络安全的重要研究方向 传统的漏洞挖掘技术面临着耗时长 误报多等痛点 xff0c 且无法全面地探测目标软件中的已知与未知漏洞 因此 xff0c 一种简单高效的漏洞挖掘技术 xff0c 即模糊
  • 基于Vue3+Vite实现的移动端天气预报系统

    文章目录 1 前言2 准备工作3 项目创建与配置3 1适配移动端3 2路由配置 4 功能实现4 1Footer组件的实现4 2Mine组件的实现4 3Guide组件的实现4 4GuideInfo组件的实现4 5 Home组件的实现4 6封装
  • 【C++ 将十六进制数转换为二进制数】

    问题描述 将十六进制数转换为二进制数 输入格式 输入一个16进制数 输出格式 输出二进制数 输入样例 在这里给出一组输入 例如 xff1a 23 输出样例 在这里给出相应的输出 例如 xff1a 100011 输入样例 在这里给出一组输入
  • 电力系统强大的Gurobi 求解器的学习(Python&Matlab)

    到底有多强大 xff0c 看看就知道 xff0c 必须 x1f44d x1f44d x1f44d xff1a 目录 1 概述 2 算例理解 Python 2 1 算例1 详细入门 2 2 算例2 一般线性规划问题 2 3 算例3 非凸问题
  • 位移操作符 <<左移 与 >>右移 的基本逻辑

    1 xff1a lt lt 左移操作符 2 xff1a gt gt 右移操作符 xff08 注 xff1a 位移操作符的操作数只能是整数 xff09 lt lt 左移操作符 与 gt gt 右移操作符 都是移二进制位操作符 整数的二进制表现

随机推荐