单片机基础知识之定时计数器和寄存器

news2024/11/14 23:55:16

目录

一、定时计数器

二、什么是寄存器

三、定时器如何定时10毫秒

四、定时器编程前寄存器配置计划

五、编程定时器控制LED每隔一秒亮灭


一、定时计数器

1、定时计数器的概念引入

定时器和计数器,电路一样

定时或者计数的本质就是让单片机某个部件数数

当定时器用的时候,靠内部震荡电路数数

当计算器用的时候,数外面的信号,读取针脚的数据

负跳变指:从高电平回到低电平

2、定时器怎么定时

定时器的本质原理:每经过一个机器周期,就加1

什么是晶振:

晶振(晶体震荡器)又称数字电路的心脏,是各种电子产品里面必不可少的频率元器件,数字电路的所有工作都离不开时钟,晶振的好坏,晶振电路设计的好坏,会影响到整个系统的稳定性

什么是时钟周期:

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

什么是机器周期:

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

一个机器周期 = N个时钟周期

一个时钟周期 = 晶振频率的倒数

3、定时器加一经过多久:≈ 1.085微妙

当晶振频率是11.0592MHz的时候,等于11059.2KHz = 11059200Hz

跳一次等于一个机器周期

一个机器周期 等于12个时钟周期

一个时钟周期 等于 晶振的倒数:1/11059200秒

那么跳一次就是:12/11059200秒 = 12 000 000 / 11059200微秒 ≈ 1.085微妙

二、什么是寄存器

#include "reg52.h"
 
sbit ledOne = P3^7;   //就是在配置寄存器
sbit ledTwo = P3^6;   //就是在配置寄存器
void main()
{
	
	ledOne = 0;       //往寄存器里写值0 
	ledTwo = 0;
	
}

如上图:P3就是一个寄存器,然后ledOne是往P3寄存器的地址里写一个值0

特殊功能寄存器:

特殊功能寄存器是用来对片内功能模块进行管理、控制、监视的控制寄存器和状态寄存器,是一个特殊功能的RAM区

定时器的寄存器是什么

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

TF0:定时器/计数器T0溢出中断标志

TR0:定时器T0的运行控制位

三、定时器如何定时10毫秒

定时器的TL0:指低八位

定时器的TH0:指高八位

给定时器一个初始值:

TL0 = 0x00;

TH0 = 0xDC;

TL0+TH0 = 16位,从0开始数,能数2的16次方= 65536下

数一下1.085微秒,数65536下就是71毫秒,

也就是说计时器,从0开始数,最多能数到71毫秒,就爆表了(TF0状态发生改变),不能再数了

那么要定义数10毫秒,定时器就得从61毫秒开始数,数到71毫秒

10毫秒= 10 000微秒

10 000微秒 / 1.085 =9216下,说明10毫秒,要数9216下

65536 - 9216 = 56320下

56320下,转换成十六进制的是:DC00

为什么转换成十六进制,因为计时器有两个寄存器,只有转换成十六进制,才能平均放到两个寄存器中

所以:

TL0 = 0x00 (低位),初始值是在这里加

TH0 = 0xDC(高位),数数是在这里数

最后结果是:从56320下开始数,数到65536下,就正好是10毫秒的时间

下面是用stc-isp-15xx-v6.87D软件计算定时10毫秒的方法

四、定时器编程前寄存器配置计划

1、怎么知道定时器爆表了

TCON寄存器的bit5能表示爆表:当爆表的时候,硬件会修改bit5(TF0)位上面的数据,会改成1(置1)会像CPU中请求中断,如果不用中断,我们需要手动代码清零

2、怎么开始计时

TCON寄存器的bit4,通过编程让TR0=1的时候,开始计时,相当于按下了闹钟

3、定时器使用时有很多种模式的

定时器模式寄存器:TMOD来选择定时器模式,选择工作方式1,TMOD的bit0 bit1配置成0 1 ,选择16位的定时器功能

TMOD定时器通过M1和M0的互相配合,来确定定时器的模式 

TMOD.1/TMOD.0 M1、 M0      定时器/计数器0模式选择

                              0        0       13位定时器/计数器,兼容8048定时模式,TL0只用低5位参                                                     与分频,TH0整个8位全用

                              0        1       16位定时器/计数器,TL0、TH0全用 

                              1        0       8位自动重装载定时器,当溢出时将TH0存放的值自动重装入                                                    TL0

                              1        1       定时器0此时作为双8位定时器/计数器。TL0作为一个8位定时                                                   器/计数器,通过标准定时器0的控制位控制。TH0仅作为一个                                                   8位定时器,由定时器1的控制位控制       

五、编程定时器控制LED每隔一秒亮灭

#include "reg52.h"

sbit led = P3^6;

void main()
{
	int cnt = 0;
	led = 1;
	
	//1、配置定时器0工作模式位16位计时
	TMOD = 0x01;
	//2、给定时器一个初值
	TL0 = 0x00;
	TH0 = 0xD0;
	//3、定时器开始计时
	TR0 = 1;
	TF0 = 0;
	//4、爆表了,操作led,累计到1s,再操作led
	while(1){
		if(TF0 == 1){                 //这时定时器爆表了
				TF0 = 0;              //不用中断,软件清零
				cnt ++;               //统计爆表的次数
				//给定时器重新定义初值
				TL0 = 0x00;      
				TH0 = 0xD0;       
				if(cnt == 100){       //要爆表101次
						led = !led;   //每经过1s,翻转led的状态
						cnt = 0;      //当100次表示1s,重新让cnt从0开始,计算下一次的1s			
				}
		}
	}
}

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

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

相关文章

Linux基础------高级IO

文章目录阻塞IO非阻塞IO信号驱动异步IO多路转接(核心终点)实际上 IO “等” 拷贝 等什么呢? -----> 等待的是内核将数据准备好。 拷贝-------> 数据从内核考到用户 IO话题: 无非就是 1 , 改变等的方式 2 &…

Linux中编译带kafka模块的搜狗workflow开源库

workflow依赖的第三方库 openssl https://github.com/openssl/openssl apt install libssl-dev zlib https://github.com/madler/zlib git clone https://github.com/madler/zlib.git./configuremake -j4 make install lz4 (版本>1.7.5) https://github.com/lz4/lz4 …

C语言:预处理(2)

宏通常被用于执行简单的运算。 宏相比于函数的优势: 1.用于调用函数和从函数返回的代码可能比实际执行这个小型计算工作所需要的时间更多。所以宏比函数在程序的规模和速度方面更胜一筹。 2.更为重要的是函数的参数必须声明为特定的类型。所以函数只能在类型合适的…

Diffusion Model原理详解及源码解析

🍊作者简介:秃头小苏,致力于用最通俗的语言描述问题 🍊专栏推荐:深度学习网络原理与实战 🍊近期目标:写好专栏的每一篇文章 🍊支持小苏:点赞👍🏼、…

KubeSphere中间件部署

目录 🧡应用部署总览 🧡中间件部署 MySQL有状态副本集 🍠KubeSphere创建配置集 🍠KubeSphere创建存储卷 🍠KubeSphere创建有状态副本集 🍠集群访问 💟这里是CS大白话专场,让枯…

Entity Framework Core 代码自动化迁移

简述 文章内容基于:.NET6 Entity Framewor kCore 7.0.* 使用 EF Core 进行 Code First 开发的时候,肯定会遇到将迁移更新到生产数据库这个问题,大多数都是使用命令生成迁移 SQL,然后使用 SQL 脚本将更新迁移到生产数据库的方式&a…

【一起从0开始学习人工智能0x03】文本特征抽取TfidVectorizer

文章目录文本特征抽取TfidVectorizerTfidVecorizer--------Tf-IDFTF-IDF------重要程度文本特征抽取TfidVectorizer 前几种方法的缺点:有很多词虽然没意义,但是出现次数很多,会影响结果,有失偏颇------------关键词 TfidVecoriz…

一篇文章带你搞懂nodeJs环境配置

1、nodeJs下载地址,这里可以选择你想要的版本,我这里以14.15.1为例 2、下载完成后,直接傻瓜式安装即可。 3、打开命令行(以管理员身份打开),输入node -v,出现以下版本号,代表node成功安装 4、在…

html+css设计两个摆动的大灯笼

实现效果 新年马上就要到了,教大家用htmlcss设计两个大灯笼,喜气洋洋。 html代码: html代码部分非常简单,将一个灯笼分成几部分进行设计,灯笼最上方部分,中间的线条部分和最下方的灯笼穗。组合在一起就…

docker系列教程:docker图形化工具安装及docker系列教程总结

通过前面的学习,我们已经掌握了docker-compose容器编排及实战了。高级篇也算快完了。有没有相关,我们前面学习的时候,都是通过命令行来操作docker的,难道docker就没有图形化工具吗?答案是肯定有的。咱们本篇就来讲讲docker图形化工具及使用图形化工具安装Nginx及docker系列…

读书系列2022(下)读书纪录片

目录 一、认知类 二、纪录片 一、认知类 《蓝海战略》: 让你(企业/个人)在竞争中产生错位竞争,获得优势 《认知盈余》:“人们实际上很喜欢创造并分享”, 参与是一种行为 将人们的自由时间和特殊才能汇聚在一起,共同…

移动Web【字体图标、平面转换[位移,旋转,转换原点,多重转换]、渐变】

文章目录一、字体图标1.1 图标库1.2 下载字体包:1.3 使用字体图标:1.4 使用字体图标 – 类名:1.5 案例:淘宝购物车1.6 上传矢量图:二、平面转换2.1 位移2.1 位移-绝对定位居中2.3 案例2.4 旋转2.5 转换原点2.6 多重转换…

2022年终总结:不一样的形式,不一样的展现

Author:AXYZdong 硕士在读 工科男 有一点思考,有一点想法,有一点理性! 定个小小目标,努力成为习惯!在最美的年华遇见更好的自己! CSDNAXYZdong,CSDN首发,AXYZdong原创 唯…

你真的了解表达式求值吗?

表达式求值大家很熟悉特别是整型十进制的表达式求值。那么char类型的表达式求值是怎么样的&#xff1f;Eg&#xff1a;#include <stdio.h>int main() {char a 127;char b 3;char c a b;printf("%d %d %d\n",a,b,c);return 0; }上面程序输出的结果是多少&am…

2022跟学尚硅谷Maven入门(一)纯命令行

2022跟学尚硅谷Maven入门 一 纯命令行Maven从小白到专家应用场景开发过程自动部署私有仓库课程介绍小白目标普通开发人员目标资深开发人员目标第一章:Maven 概述第一节 为什么要学习MavenMaven 作为依赖管理工具(1)jar包的规模(2)jar 包的来源(3)jar包之间的依赖关系Maven 作为…

APSIM练习:播种作物练—高粱作物模拟

在本练习中&#xff0c;您将观察作物在一个季节内的生长情况。您将更多地了解如何使用 APSIM 对施肥率进行“假设”实验。这些技能不仅可以用来试验施肥率&#xff0c;还可以用来试验变量&#xff0c;例如&#xff1a; 种植时间。播种率。作物比较和不同的起始土壤水分条件。 …

C++之异常

文章目录一、C 语言传统的处理错误的方式二、C 异常概念三、异常的使用1.异常的抛出和捕获2.异常的重新抛出3.异常安全4.异常规范四、自定义异常体系五、C 标准库的异常体系六、异常的优缺点一、C 语言传统的处理错误的方式 传统的错误处理机制&#xff1a;   ① 终止程序&a…

JUC(十)-线程池-ThreadPoolExecutor分析

ThreadPoolExecutor 应用 & 源码解析 文章目录ThreadPoolExecutor 应用 & 源码解析一、线程池相关介绍1.1 为什么有了JDK提供的现有的创建线程池的方法(Executors类中的方法),然而还需要自定义线程池ThreadPoolExecutor 提供的七个核心参数大致了解JDK提供的几种拒绝策…

一辆适合长途出行的电动跑车 奥迪RS e-tron GT正式上市

作为奥迪品牌电动化发展的先锋力作&#xff0c;奥迪RS e-tron GT不止是前瞻科技的呈现&#xff0c;在e-tron纯电技术的加持下&#xff0c;更传递着RS的情怀&#xff0c;承载着人们对GT豪华休旅生活的向往。 2022年12月30日&#xff0c;伴随着Audi Channel第九期直播节目盛大开播…

MySQL存储引擎介绍以及InnoDB引擎结构理解

目录存储引擎概述各个存储引擎介绍InnoDBMySIAMMemeory其他引擎引擎有关的SQL语句InnoDB引擎逻辑存储结构架构内存部分磁盘部分后台线程InnoDB三大特性存储引擎概述 数据引擎是与数据真正存储的磁盘文件打交道的&#xff0c;它的上层&#xff08;服务层&#xff09;将处理好的…