关于如何设置 TMOD (定时/计数 高低 共 8 位 寄存器)

2024-06-10 16:04

本文主要是介绍关于如何设置 TMOD (定时/计数 高低 共 8 位 寄存器),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

TMOD 寄存器简介

TMOD 是 8051 单片机的定时器模式寄存器。它是一个 8 位寄存器,用于配置定时器/计数器的工作模式。TMOD 的每一位有特定的含义。

TMOD 的结构如下:

GATE | C/T | M1 | M0 | GATE | C/T | M1 | M07  |  6  |  5 |  4 |  3   |  2  |  1 |  0
  • GATE (位 7 和 3):门控控制位
    • 0:不使用外部中断来启动/停止定时器
    • 1:使用外部中断来启动/停止定时器
  • C/T (位 6 和 2):计数器/定时器选择位
    • 0:定时器模式(使用内部时钟)
    • 1:计数器模式(使用外部时钟)
  • M1, M0 (位 5, 4 和 1, 0):模式选择位
    • 00:模式 0(13 位定时器)
    • 01:模式 1(16 位定时器)
    • 10:模式 2(8 位自动重装)
    • 11:模式 3(两个独立的 8 位定时器,只有定时器 0 有效)

设定步骤

  1. 选择定时器

    • 使用定时器 0,则设置 TMOD 的低 4 位。
    • 使用定时器 1,则设置 TMOD 的高 4 位。
  2. 选择模式

    • 模式 1(16 位定时器)需要将 M1, M0 设置为 01。
  3. 选择定时器/计数器模式

    • 使用定时器模式(内部时钟),将 C/T 设置为 0。
  4. 选择是否使用门控

    • 不使用门控,将 GATE 设置为 0。

例子分析

我们假设使用定时器 0,模式 1,定时器模式(内部时钟),不使用门控。

  • GATE0 (位 3):0
  • C/T0 (位 2):0
  • M1, M0 (位 1, 0):01

高 4 位用于定时器 1,不使用,所以设置为 0000。

将这些组合起来得到 TMOD 的值:

高 4 位:0000
低 4 位:0001

即:

TMOD = 0000 0001 = 0x01

实际代码

TMOD = 0x01;  // 设置定时器 0 为模式 1(16 位定时器模式)
TH0 = 0xEC;   // 高 8 位初始值
TL0 = 0x78;   // 低 8 位初始值
TR0 = 1;      // 启动定时器 0

其他模式设置示例

如果你需要设置不同的模式或使用定时器 1,可以根据上面的步骤调整:

  • 使用定时器 1,模式 2(8 位自动重装),计数器模式,使用门控:
    GATE1 | C/T1 | M1 | M0 | GATE0 | C/T0 | M1 | M01   |  1   |  1 |  0 |   0   |  0   |  0 | 0
    TMOD = 1100 0000 = 0xC0
    

这篇关于关于如何设置 TMOD (定时/计数 高低 共 8 位 寄存器)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1048622

相关文章

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

springboot使用Scheduling实现动态增删启停定时任务教程

《springboot使用Scheduling实现动态增删启停定时任务教程》:本文主要介绍springboot使用Scheduling实现动态增删启停定时任务教程,具有很好的参考价值,希望对大家有... 目录1、配置定时任务需要的线程池2、创建ScheduledFuture的包装类3、注册定时任务,增加、删

Spring Boot 集成 Quartz并使用Cron 表达式实现定时任务

《SpringBoot集成Quartz并使用Cron表达式实现定时任务》本篇文章介绍了如何在SpringBoot中集成Quartz进行定时任务调度,并通过Cron表达式控制任务... 目录前言1. 添加 Quartz 依赖2. 创建 Quartz 任务3. 配置 Quartz 任务调度4. 启动 Sprin

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

C#TextBox设置提示文本方式(SetHintText)

《C#TextBox设置提示文本方式(SetHintText)》:本文主要介绍C#TextBox设置提示文本方式(SetHintText),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录C#TextBox设置提示文本效果展示核心代码总结C#TextBox设置提示文本效果展示核心代

SpringQuartz定时任务核心组件JobDetail与Trigger配置

《SpringQuartz定时任务核心组件JobDetail与Trigger配置》Spring框架与Quartz调度器的集成提供了强大而灵活的定时任务解决方案,本文主要介绍了SpringQuartz定... 目录引言一、Spring Quartz基础架构1.1 核心组件概述1.2 Spring集成优势二、J

Pyserial设置缓冲区大小失败的问题解决

《Pyserial设置缓冲区大小失败的问题解决》本文主要介绍了Pyserial设置缓冲区大小失败的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录问题描述原因分析解决方案问题描述使用set_buffer_size()设置缓冲区大小后,buf

java实现延迟/超时/定时问题

《java实现延迟/超时/定时问题》:本文主要介绍java实现延迟/超时/定时问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Java实现延迟/超时/定时java 每间隔5秒执行一次,一共执行5次然后结束scheduleAtFixedRate 和 schedu

Feign Client超时时间设置不生效的解决方法

《FeignClient超时时间设置不生效的解决方法》这篇文章主要为大家详细介绍了FeignClient超时时间设置不生效的原因与解决方法,具有一定的的参考价值,希望对大家有一定的帮助... 在使用Feign Client时,可以通过两种方式来设置超时时间:1.针对整个Feign Client设置超时时间

PyCharm如何设置新建文件默认为LF换行符

《PyCharm如何设置新建文件默认为LF换行符》:本文主要介绍PyCharm如何设置新建文件默认为LF换行符问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录PyCharm设置新建文件默认为LF换行符设置换行符修改换行符总结PyCharm设置新建文件默认为LF