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

单片机学习6——定时器/计数功能的概念

在8051单片机中有两个定时器/计数器,分别是定时器/计数器0和定时器/计数器1。

T/C0:  定时器/计数器0

T/C1: 定时器/计数器1

T0: 定时器0

T1: 定时器1

C0: 计数器0

C1: 计数器1

如果是对内部振荡源12分频的脉冲信号进行计数,对每个机器周期计数,它是定时器(T0和T1)。

如果是对单片机引脚T0(P3.4)或者T1(P3.5)输入的外部脉冲信号进行计数,则它是计数器(C0、C1)。

定时/计数器(T/C)的结构图:

定时/计数器的结构:

1、由两个加1计数寄存器(由高8位和低8位两个寄存器组成,共计16位,每个寄存器是16位),分别对应T/C0和T/C1。

2、TMOD是定时器/计数器的工作方式寄存器,确定工作方式和功能。

3、TCON是控制寄存器,控制T0和T1的启动和停止及设置溢出标志。

加1计数寄存器输入的计数脉冲有两个来源:

1、一个是由系统的时钟振荡器输出脉冲经12分频后送来;

2、一个是由单片机引脚T0(P3.4)或T1(P3.5)输入的外部脉冲源。

每来一个脉冲,计数器加1, 当加到全1的时候,再输入一个脉冲使得计数器回零。

计数器的溢出使TCON中的TF0或者TF1置1, 向CPU发出中断请求(定时器/计数器中断允许时)。

如果定时器/计数器工作于定时模式,则表示定时已到。

如果工作于计数模式,则表示计数值已满。

可见,由溢出时计数器的值减去计数初值是加1计数器的计数值。

控制寄存器TCON:

TCON的低4位用于控制外部中断。TCON的高4位用于控制定时器/计数器的启动和中断请求,其格式如下:

 reg51.h文件:

CPU响应中断,这个时候会去执行某个中断服务函数程序。

工作方式寄存器:

工作方式寄存器TMOD用于设置定时/计数器的工作方式,低4位用于T/C0, 高4位用于T/C1。

格式如下:

GATE的工程应用是用来测量脉冲的宽度。

从高电平的时候开始计数,看高电平花了多少时间,从而计算出脉冲的宽度。

正常情况下GATE置0即可。

M1M0:工作方式设置位,定时/计数器有四种工作方式,有M1和M0进行设置。

方式1: 常用的16位定时/计数器。

方式2: 主要用在串口波特率发生器。

方式0和方式3:几乎不用。

方式1:(定时器0模式)

方式1的计数位数是16位,由TL0作为低8位、TH0作为高8位,组成了16位加1计数器。

是对每个机器周期进行计数,计数器满了之后,会溢出,然后TF0置1,产生中断请求,CPU响应中断请求。

16位定时器0装初值的计算公式:

假设要计算的个数是n:

TH0=(65536-n)/256        商

TL0=(65536 - n)%256    求余

8051的基本时序周期:

振荡周期:为单片机提供振荡源的周期(是指振荡源的两个相邻同方向峰值之间的时间。)

机器周期:1个机器周期等于12个振荡周期。

若:fosc=12M,则8051的各周期参数如下:

振荡周期=1/12 us

机器周期=1us

单片机使用的晶振是12M,那么每个机器周期是1us。

加1计数寄存器是每1个机器周期加1,也就是相当于每间隔1us加1个数。

65536-50000=15536

也就是从15536开始计数,计数50000次,也就是50000*1us,得到50ms。

http://www.lryc.cn/news/248907.html

相关文章:

  • a-table:表格组件常用功能记录——基础积累2
  • leetCode 131.分割回文串 + 回溯算法 + 图解 + 笔记
  • 浅谈对于Android CMakeLists文件的理解
  • 虚函数可不可以重载为内联 —— 在开启最大优化时gcc、clang和msvc的表现
  • 【开源】基于Vue+SpringBoot的智能教学资源库系统
  • Sass基础知识之【变量】
  • 云原生系列Go语言篇-泛型Part 1
  • 力扣1089题 复写零 双指针解法
  • Redis基础与运用
  • PTA:猜帽子游戏 ,C语言
  • ESP32基于IDF框架OTA学习记录
  • 分布式技术(一)分布式的架构的演进
  • webpack 打包优化
  • electron windows robotjs 安装教程
  • IDEA解决Git冲突详解
  • Vue3使用kkFileView预览文件pdf
  • 建造者模式-C语言实现
  • Jmeter+influxdb+grafana监控平台在windows环境的搭建
  • 关注这两点 或能避开一些现货黄金交易的陷阱
  • Python 文件读写
  • 线性分组码的奇偶校验矩阵均匀性分析
  • leetcode算法之链表
  • 2023.11.27 滴滴P0级故障或为k8s升级造成
  • Ubuntu16.04.4系统本地提权实验
  • Vue中使用正则表达式进行文本匹配和处理的方法
  • php许愿墙代码包括前端和后端部分
  • PHP 刷新缓存区的问题!
  • Android Studio Giraffe-2022.3.1-Patch-3安装注意事项
  • 【古月居《ros入门21讲》学习笔记】14_参数的使用与编程方法
  • Webpack 懒加载