51单片机应用开发---定时器(定时1S,LED以1S间隔闪烁)

实现目标

1、掌握定时器的配置流程;

2、掌握定时器初值的计算方法;

3、具体实现:(1)1mS中断1次,计数1000次中断,实现定时1S功能;(2)LED1每隔1S状态取反。


一、定时器概述

1.1 生活中哪些场景会用到定时器?

       许多家用电器都配备了定时器功能,如电饭煲、热水器、空调等。通过设定开始和结束时间,用户可以确保在需要的时候这些设备能够自动开启或关闭。

                

1.2 周期是什么?

    在 51单片机的最小系统板上有一个12MHz或11.0592MHz的晶振,那为什么是12MHZ呢?在此之前就需要了解三个概念:时钟周期指令周期机器周期

1.2.1 时钟周期

         时钟周期也称为振荡周期,定义为时钟频率的倒数。时钟周期是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。时钟周期是一个时间的量。时钟周期表示了SDRAM所能运行的最高频率。更小的时钟周期就意味着更高的工作频率。

1.2.2 机器周期

        机器周期也称为CPU周期。在计算机中,为了便于管理,常把一条指令的执行过程划分为若干个阶段(如取指、译码、执行等),每一阶段完成一个基本操作。完成一个基本操作所需要的时间称为机器周期。一般情况下,一个机器周期由若干个时钟周期组成。AT89S51单片机每12个时钟周期为1个机器周期

1.2.3指令周期

         指令周期是取出一条指令并执行这条指令的时间。一般由若干个机器周期组成,是从取指令、分析指令到执行完所需的全部时间。单片机的指令按字节可分为单字节(1个机器周期)、双字节(2个机器周期)、三字节指令(3个机器周期),乘法、除法指令需要(4个机器周期),因此执行一条指令的时间也不相同。

         因此,晶振可以理解为单片机的 “心脏 ,它为单片机提供了时钟周期,晶振频率会直接影响时钟周期的大小,二者的关系为:时钟周期 =  1 / 晶振频率 。无论你的晶振频率是多少,对于单片机来说,它内部都是固定的关系 ,在设计之初,由于51单片机性能和制程工艺等因素,出厂时把51单片机的机器周期严格的控制在12个时钟周期,指令周期一般是由1\ 2 \4 个机器周期组成。

        那么为什么晶振是12MHz?通过计算:时钟周期 = 1 / (12M) (s) =  1/12000000 (s) = 1/12 (us),51单片机一个机器周期是12个时钟周期,即机器周期=12*1/12 (us) = 1 (us) ,这样执行1条指令的时间就控制在了1(us)、2(us)、4(us)。

       如果晶振的频率是11.0592MHz,那么时钟周期就是   1 / (11.0592x10^6) 秒   (1MHz = 10^6Hz)。那么,无论是定时器,还是计数器,每隔1个机器周期 ,加法存储器就+1,代表时间经过了  12  x     1 / (11.0592x10^6) 秒。

1.3 与定时器有关的寄存器

1.3.1  定时器/计数器T0、T1的控制寄存器TCON

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


 

  1. TF1(Timer 1 Overflow Flag):当定时器1计数溢出时,TF1位被硬件自动置1。软件需要手动清除该标志位。
  2. TR1(Timer 1 Run Control Bit):控制定时器1的启动和停止。TR1 = 1时,定时器1运行;TR1 = 0时,定时器1停止。
  3. TF0(Timer 0 Overflow Flag):当定时器0计数溢出时,TF0位被硬件自动置1。软件需要手动清除该标志位。
  4. TR0(Timer 0 Run Control Bit):控制定时器0的启动和停止。TR0 = 1时,定时器0运行;TR0 = 0时,定时器0停止。
  5. IE1(External Interrupt 1 Edge Flag):当外部中断1(INT1)检测到边沿变化时,IE1位被置1。软件需要手动清除该标志位。
  6. IT1(Interrupt 1 Type Control Bit):控制外部中断1的触发方式。IT1 = 1时,INT1为边沿触发;IT1 = 0时,INT1为电平触发。
  7. IE0(External Interrupt 0 Edge Flag):当外部中断0(INT0)检测到边沿变化时,IE0位被置1。软件需要手动清除该标志位。
  8. IT0(Interrupt 0 Type Control Bit):控制外部中断0的触发方式。IT0 = 1时,INT0为边沿触发;IT0 = 0时,INT0为电平触发。


1.3.2  定时器/计数器工作模式寄存器TMOD  

        定时和计数功能由特殊功能寄存器TMOD的控制位 CT 进行选择,TMOD寄存器的各位信息如下表所列。可以看出,2个定时/计数器有4种操作模式,通过TMOD的M1和M0选择。2个定时/计数器的模式0、1和2都相同,模式3不同,各式下的功能如下所述。

1.4 定时器模式

        通过对寄存器TMOD中的M1(TMOD.1)、M0(TMOD.0)的设置,定时器/计数器有4种不同的工作模式,见下表:

定时器各种模式的最大定时:

例:对12MHz  1个机器周期 1us  12/fosc = 1us

方式0  13位定时器最大时间间隔  = 2^13 = 8.192ms
方式1  16位定时器最大时间间隔  = 2^16 = 65.536ms (常用)  
方式2  8位定时器最大时间间隔  = 2^8 = 0.256ms =256 us 
方式3 仅适用于T0,此时T0分成两个8位计数器,T1停止计数

 1.5 定时器计算(以T0,方式1为例)

        方式1为一个16位的定时器,其高八位为TH0,低八位为TL0。定时器 和 计数器 都是单片机中同一个模块。他们的实质都是: 加法存储计数器。

        对于计数器,每来一个信号(信号从P3.4 或者P3.5输入),就加1,以此达到计数的目的。

        对于定时器,每隔1个机器周期 加 1,假如一个机器周期为 1uS , 当加到1000时,我们就认为经过了1mS,这就是定时器的原理。

定时器0方式1框架图:

②处 C/T = 0 表示为定时器模式,触发信号为①处的单片机内部时钟信号。(若②处CT = 1,则触发信号为Tn脚,信号从P3.4 或者P3.5输入单片机)

③处表明,信号能触发使加法计数器加1,还得受④处控制。不然时钟信号是不能让加法计数器累加的。 ④处这个是与门,TRn必须为1,表明我们要开启定时器。同时GATE为0,通过非门后为1,再通过或门,也是1,那么就让③处控制起来了。

(若GATE为1,那么,定时器的启动停止受 TRx和 INTx 共同控制。 )

于是我们需要:

TRn    为 1

GATE  为 0

INTn   为 X(X表示任意的意思,do not care)

为THx和TLx赋初始值

若TH0 和 TL0 以 16位 模式1工作,那它的计数范围为   [0 , 65535 ]  ,  也就是累加 65536次发生溢出。 每累加一次是  12 / (11.0592x10^6) 秒(晶振为11.0592MHz)。那么从 0 累加到溢出 历时  ≈ 0.071s = 71ms 。对12MHz  晶振,从 0 累加到溢出 历时65.536ms。

 1、机器周期 = 具体晶振频率 / 分频数 的倒数

  2、初值 = 溢出值 - 机器周期 * 定时时间

假设T0初值为5000,则应该这么设置:
        TH0 = (65536 - 50000) / 256;
        TL0 = (65536 - 50000) % 256;

得到TH0 和 TL0值的方法:

 

二、原理图设计

三、程序设计

#include <REGX52.H>sbit LED1 = P2^0;unsigned int g_Count;  //全局变量默认初始化为0void Timer0_Init(void)
{TMOD = 0x01; //设置定时器0 工作模式1    0000  0001TR0 = 1;     //开启定时器0TH0 = (65536-1000)/256;  //设置定时初值,高8位TL0 = (65536-1000)%256;  //设置定时初值,低8位ET0 = 1;  //开启定时器0 中断EA  = 1;  //开启总中断
}void main(void)
{Timer0_Init();  //定时器0初始化while(1){}
}void Timer0_Rountine(void) interrupt 1  //1ms进一次中断
{TH0 = (65536-1000)/256;  //TL0 = (65536-1000)%256;  //重新赋初值才能保证下一次还是1msg_Count++;if(g_Count>=1000)  // 1S 计时{g_Count = 0;   //计数清零LED1 = !LED1;  //LED1状态取反}
}

四、实验效果

五、仿真实现


总结

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/58236.shtml

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

相关文章

TCP/IP Attack Lab

网络拓扑&#xff1a; Task 1: SYN Flooding Attack 收到攻击之前&#xff0c;在Victim主机查看网络连接的状态: 在攻击之前使用User1主机(10.9.0.6)访问Victim(10.9.0.5)主机的 Telnet服务: Task 1.1: Launching the Attack Using Python 在Atacker上建立文件attack-1.py…

VictoriaMetrics 中文教程(10)集群版介绍

VictoriaMetrics 中文教程系列文章&#xff1a; VictoriaMetrics 中文教程&#xff08;01&#xff09;简介VictoriaMetrics 中文教程&#xff08;02&#xff09;安装VictoriaMetrics 中文教程&#xff08;03&#xff09;如何配置 Prometheus 使其把数据远程写入 VictoriaMetri…

深度学习(五):语音处理领域的创新引擎(5/10)

一、深度学习在语音处理中的崛起 在语音处理领域&#xff0c;传统方法如谱减法、维纳滤波等在处理复杂语音信号时存在诸多局限性。这些方法通常假设噪声是平稳的&#xff0c;但实际噪声往往是非平稳的&#xff0c;导致噪声估计不准确。同时&#xff0c;为了去除噪声&#xff0…

https和http的区别,及HTTPS的工作流程

HTTP&#xff08;HyperText Transfer Protocol&#xff09;和HTTPS&#xff08;HyperText Transfer Protocol Secure&#xff09;都是超文本传输协议&#xff0c;但它们之间的关键区别在于安全性。 安全性&#xff1a; HTTP&#xff1a;数据以明文传输&#xff0c;没有加密&…

阿里云 SAE 应用引擎可观测性最佳实践

SAE 简介 Serverless 应用引擎 SAE&#xff08;Serverless App Engine&#xff09;是一款零代码改造、极简易用、自适应弹性的应用全托管平台。SAE 能够让用户免运维 IaaS 和 Kubernetes&#xff0c;秒级完成从源代码、代码包、Docker 镜像部署任意语言的在线应用&#xff08;…

Windows环境 ffmpeg 命令使用介绍

记录一下纯命令操作ffmpeg的用法&#xff01; 目录 一、FFmpeg查询命令帮助文档 1.ffmpeg、ffplay、ffprobe的区别 2.ffmpeg命令查看帮助文档 3.ffplay命令查看帮助文档 4.ffprobe命令查看帮助文档 二、FFmpeg音视频处理流程 三、FFmpeg命令分类查询 1.命令参数 2.查看…

深入理解Java虚拟机(五)

介绍垃圾收集器的算法及引用详解 1、引用计数器 引用计数器在对象中添加一个引用计数器&#xff0c;当一个地方引用的时候&#xff0c;计数器1&#xff0c;当引用失效时&#xff0c;计数器值就-1。 但是在Java里面存在对象循环引用&#xff1a;objA 和 objB都有字段instance…

Linux系统操作篇 one -文件指令及文件知识铺垫

Linux操作系统入门-系统篇 前言 Linux操作系统与Windows和MacOS这些系统不同&#xff0c;Linux是黑屏的操作系统&#xff0c;操作方式使用的是指令和代码行来进行&#xff0c;因此相对于Windows和MacOS这些带有图形化界面的系统&#xff0c;Linux的入门门槛和上手程度要更高&…

PostgreSQL的奥秘:表结构、TOAST与大对象

PostgreSQL&#xff08;以下简称PSQL&#xff09;因其灵活性和强大的功能深受欢迎。本文将详细介绍PSQL的内部结构&#xff0c;特别是页面缓冲机制&#xff0c;包括表结构、TOAST技术、大对象&#xff08;BLOB/CLOB&#xff09;&#xff0c;以及页面缓冲表的工作原理。同时&…

SQL Server 可观测最佳实践

SQL Server 简介 SQL Server 是微软公司开发的一款关系数据库管理系统&#xff0c;支持企业 IT 环境中的各种事务处理、商业智能和分析应用程序。它支持多种操作系统平台&#xff0c;而无论是物理还是虚拟形式&#xff0c;自建部署环境还是在云环境中&#xff0c;运行的操作系…

MySQL8 安装配置及卸载教程

MySQL8 安装配置及卸载教程 0 卸载 MySQL 如果之前没安过 MySQL &#xff0c;或者卸载干净了不用看这个。 如果安装中出现以下问题&#xff0c;有可能是为之前安装 MySQL 不成功&#xff0c;有残留的安装程序等文件程序或者是卸载 MySQL 不成功。 0.1 停止服务 首先进入服务…

大数据-194 数据挖掘 机器学习理论 有监督、无监督、半监督、强化学习

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; 目前已经更新到了&#xff1a; Hadoop&#xff08;已更完&#xff09;HDFS&#xff08;已更完&#xff09;MapReduce&#xff08;已更完&am…

Java最全面试题->数据库/中间件->KafKa面试题

文章目录 KafKaKafka中的ISR、AR代表什么?ISR的伸缩指什么?kafka中的broker 是干什么的?kafka中的 zookeeper 起到什么作用?kafka follower如何与leader同步数据?kafka 为什么那么快?kafka producer如何优化打入速度?kafka producer发送数据,ack为0,1,-1分别是什么意…

兼容Lodash的真正替代者

大家好&#xff0c;我是农村程序员&#xff0c;独立开发者&#xff0c;前端之虎陈随易。 这是我的个人网站&#xff1a;https://chensuiyi.me&#xff0c;欢迎一起交朋友~ 今天给大家分享一个前端工具库 Lodash 的替代品 es-toolkit。 仓库地址&#xff1a;https://github.com…

鼠标增强工具 MousePlus v5.3.9.0 中文绿色版

MousePlus 是一款功能强大的鼠标增强工具&#xff0c;它可以帮助用户提高鼠标操作效率和精准度。该软件可以自定义鼠标的各种功能和行为&#xff0c;让用户根据自己的习惯和需求来调整鼠标的表现。 详细功能 自定义鼠标按钮功能&#xff1a;可以为鼠标的各个按钮设置不同的功能…

基于SpringBoot+Vue+MySQL的中药材进存销管理系统

系统展示 系统背景 中药材在医疗保健领域具有重要地位&#xff0c;随着中药材市场的不断发展&#xff0c;对中药材的进存销管理提出了更高的要求。传统的管理方式效率低下&#xff0c;容易出现错误和漏洞&#xff0c;无法满足快速发展的市场需求。因此&#xff0c;开发一套集成…

Nginx+Tomcat 动静分离

1. NginxTomcat 环境 Nginx 处理静态资源的优势同样可以应用在 Tomcat 环境中 。从实现方法上来说&#xff0c;NginxTomcat 环境的搭建思路与前面完成的 NginxApache 环境是完全相同的&#xff0c;只需要将 Nginx 与 Tomcat 的站点文档目录配置到同一目录下&#xff0c;利用 N…

npm安装过程的问题

报错信息C:\Users\lyyds>npm list -global npm error code ENOENT npm error syscall lstat npm error path D:\nodejs\node_global npm error errno -4058 npm error enoent ENOENT: no such file or directory, lstat D:\nodejs\node_global npm error enoent This is rel…

数通自学——VLAN虚拟局域网,eNSP实验讲解

VLAN虚拟局域网&#xff0c;eNSP实验讲解 一、概念二、eNSP仿真实验1、实验一&#xff1a;vlan演示&#xff08;交换机端口access模式&#xff09;2、实验二&#xff1a;vlan演示&#xff08;交换机端口trunk模式&#xff09; 一、概念 VLAN&#xff08;Virtual Local Area Ne…

SQL-lab靶场less1-4

说明&#xff1a;部分内容来源于网络&#xff0c;如有侵权联系删除 前情提要&#xff1a;搭建sql-lab本地靶场的时候发现一些致命的报错&#xff1a; 这个程序只能在php 5.x上运行&#xff0c;在php 7及更高版本上&#xff0c;函数“mysql_query”和一些相关函数被删除&#xf…