单片机定时器讲解和实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、计数器是什么?
  • 二、单片机定时器结构
    • 2.1***两个8位如何合成16位,16位如何分成两个8位***
    • 2.2 计数器的位数组合?
    • 2.3 定时功能和计数功能?
      • 2.3.1定时功能
      • 2.3.2 计数功能
  • 三、使用步骤
    • 3.1 定时10us
    • 3.2 定时1s怎么办?
  • 四、参考程序
    • 1.定时1s
    • 2.读入数据
  • 五、思考
  • 总结


前言

提示:这里可以添加本文要记录的大概内容:

日常生活中,哪里用到时间?
定时是如何实现的?
单片机如何实现定时?


提示:以下是本篇文章正文内容,下面案例可供参考

一、计数器是什么?

推荐观看基础视频

及其巧妙的设计!让几个简单的元器件实现计数!CPU是如何实现计数的!计数器的工作原理!

https://www.bilibili.com/video/BV1D3411v7jP/?spm_id_from=333.337.search-card.all.click

二进制计数器

https://www.bilibili.com/video/BV18K4y177Xx/?spm_id_from=333.337.search-card.all.click

入坑单片机 – [12_1]定时器工作原理

https://www.bilibili.com/video/BV1MY4y1u7eY/?spm_id_from=333.337.search-card.all.click

二、单片机定时器结构

在这里插入图片描述

2.1两个8位如何合成16位,16位如何分成两个8位

unsigned char h0 ,l0  //两个8位
unsigned int t16;    //16位
t16=h0*256+l0;
h0=t16/256;   // 高八位   1000/256  =3
l0=t16%256;   //低八位    1000%256  =232 =0xe8    

在这里插入图片描述

2.2 计数器的位数组合?

在这里插入图片描述

2.3 定时功能和计数功能?

2.3.1定时功能

在这里插入图片描述

2.3.2 计数功能

在这里插入图片描述

三、使用步骤

3.1 定时10us

  • 1.定时功能
  • 2.确定计数器位数,16位,装初值 65526

在这里插入图片描述

TMOD=0X01;  //不能位寻址  M1=0 不对的

假设装0, 0 1 2 3 4 5 6 7 8 9
方法1: 有可能会错过

while(1)
{t16=TH0*256+TL0if(t16==9){}
}

方法2:
中断

65536-10=65526;
TH0=65526/256;
TL0=65526%256;

t就是设定的定时us 数,注意目前是12MHz
t的范围 0 - 65535 1-65536us 够1s吗?
TH0=(65536-t)/256;
TL0=(65536-t)%256;

  • 3.开启定时器
    在这里插入图片描述
TR0=1;
  • 4.配置中断
ET0=1;
EA=1;
PT0=0;
  • 5.中断服务函数
void timer0() interrupt 1
{TH0=65526/256;TL0=65526%256;LED=!LED;
}

3.2 定时1s怎么办?

t的范围 0 - 65535 1-65536us 够1s吗?
TH0=(65536-t)/256;
TL0=(65536-t)%256;

解决方法:50ms溢出一次,进一次中断

放一个变量num

num=20
20*50=1000ms=1s

修改代码

...
unsigned char num
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;void timer0() interrupt 1
{TH0=(65536-50000)/256;//TL0=(65536-50000)%256;// 必须要重新装,否则从0计num++;if(num==19){num=0;LED=!LED;}}
...

四、参考程序

1.定时1s

代码如下(示例):

#include "reg51.h"sbit LED=P2^0;
unsigned char num;
void main()
{TMOD=0X01;TH0=(65536-50000)/256;TL0=(65536-50000)%256;ET0=1;EA=1;PT0=0;TR0=1;while(1){}
}void timer0() interrupt 1
{TH0=(65536-50000)/256;//TL0=(65536-50000)%256;// 必须要重新装,否则从0计num++;if(num==19){num=0;LED=!LED;}}

2.读入数据

代码如下(示例):



五、思考

    1. 使用按键改变定时时间 按键1 +0.5s
    1. 按键2 -0.5s
    1. 时间范围 0.5-5s

总结

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

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

相关文章

常用网络命令ping、arp、tracert、route的详细用法,弄懂立马成大神

你们好,我的网工朋友。 做网工,你遇到最多的问题是啥?大部分人的回答都是网络故障吧。 所以有很多朋友多次问到,如何检测网络故障和对网络进行基础的操作。比如:网络经常掉线、网络时好时坏,ip地址冲突、…

通过Malloc 和 Free 的具体实现 加深对C指针 的理解(笔记)

【彻底搞懂C指针】Malloc 和 Free 的具体实现 https://danluu.com/malloc-tutorial/ 进程间的通信 : ①共享内存 ② 消息传递 (内核实现) 分配策略 (实现方面) by DUCK sbrk() malocal实现的主要函数 man sbrk 查看 数据结构 一个参考代码 https…

pytorch基础语法问题

这里写目录标题 pytorch基础语法问题shapetorch.ones_like函数和torch.zeros_like函数y.backward(torch.ones_like(x), retain_graphTrue)torch.autograd.backward参数grad_tensors: z.backward(torch.ones_like(x))来个复杂例子z.backward(torch.Tensor([[1., 0]])更复杂例子实…

1.0.0 IGP高级特性简要介绍(OSPF-下篇)

二、OSPF_精细的路由控制 1.OSPF数据库上限 简介 ​ OSPF技术要求同一个区域内的路由器保存着相同的LSDB信息。 ​ 但随着网络上路由数量不断增加,一些路由器由于系统资源有限,不能再承载如此多的路由信息,这种状态就被称为数据库超限&am…

STM32GPIO——上拉、下拉电阻

如上两个图所示,标号2都为上拉、下拉电阻部分,阻值约为30k~50k欧,通过对应开关进行控制,开关由寄存器控制。 当引脚外部的器件没有干扰引脚的电压时,即没有外部的上、下拉电压,引脚的电平由引脚内部上、下…

【机器学习】八、规则学习

知识图谱与基本概念 基本概念 规则学习定义:从训练数据中学习出一组能用于对未见示例进行判别的规则。 规则定义:规则一般是:语义明确、能描述数据分布所隐含的客观规律或领域概念。 逻辑规则定义:⊕←?1⋀?2⋀?3…⋀??⊕…

下载并安装DevEco Studio 3.1,初尝鸿蒙编程

摘自华为官网 DevEco Studio 3.1配套支持HarmonyOS 3.1版本及以上的应用及服务开发,提供了代码智能编辑、低代码开发、双向预览等功能,以及轻量构建工具DevEco Hvigor 、本地模拟器,持续提升应用及服务开发效率。 下载 官网下载地址 HUAWEI…

理解快速排序

理解快速排序 首先了解以下快速排序 快速排序(QuickSort)是一种常用的排序算法,属于比较排序算法的一种。它是由英国计算机科学家Tony Hoare于1960年提出的,是一种分而治之(divide and conquer)的算法。 …

模拟ASP.NET Core MVC设计与实现

前几天有人在我的《ASP.NET Core框架揭秘》读者群跟我留言说:“我最近在看ASP.NET Core MVC的源代码,发现整个系统太复杂,涉及的东西太多,完全找不到方向,你能不能按照《200行代码,7个对象——让你了解ASP.…

css实现进度条

预期样式 方法一 <script setup> import { ref } from "vue"; // import ScreenLeft from "./ScreenLeft/index.vue"; const width ref("76.5%"); </script><template>Screen<div class"progress-contain">…

详解数据仓库之拉链表(原理、设计以及在Hive中的实现)

最近发现一本好书&#xff0c;读完感觉讲的非常好&#xff0c;首先安利给大家&#xff0c;国内第一本系统讲解数据血缘的书&#xff01;点赞&#xff01;近几天也会安排朋友圈点赞赠书活动(ง•̀_•́)ง 0x00 前言 本文将会谈一谈在数据仓库中拉链表相关的内容&#xff0c;包…

ZYNQ_project:key_beep

通过按键控制蜂鸣器工作。 模块框图&#xff1a; 时序图&#xff1a; 代码&#xff1a; /*1位按键消抖 */ module key_filter (input wire sys_clk ,input wire sys_rst_n ,input wire key_in ,output …

springboot项目使用Swagger3

一、Swagger介绍 号称世界上最流行的Api框架&#xff1b;Restful Api 文档在线自动生成工具>Api文档与API定义同步更新直接运行&#xff0c;可以在在线测试API 接口支持多种语言&#xff1a;&#xff08;java&#xff0c;Php…&#xff09; 二、Swagger3 准备工作 1、在p…

VsCode 安装 GitHub Copilot插件 (最新)

##在线安装&#xff1a; 打开Vscode扩展商店&#xff0c;输入 "GitHub Copilot " ,选择下载人数最多的那个。&#xff08;这个是你写一部分代码或者注释&#xff0c;Ai自动帮你提示/补全代码&#xff09;,建议选择这个 注意下面有个和他类似的 "GitHub Copilo…

BMVC 23丨多模态CLIP:用于3D场景问答任务的对比视觉语言预训练

来源&#xff1a;投稿 作者&#xff1a;橡皮 编辑&#xff1a;学姐 论文链接&#xff1a;https://arxiv.org/abs/2306.02329 摘要&#xff1a; 训练模型将常识性语言知识和视觉概念从 2D 图像应用到 3D 场景理解是研究人员最近才开始探索的一个有前景的方向。然而&#xff0c…

APS、SAP解析BOM批量核对(我的APS项目三)

APS提供了解析BOM接口 SAP从CU50中解析了BOM 博主开发了一个程序&#xff0c;把两边的BOM数据拉到一起来比对&#xff0c;从最初的一个车型&#xff0c;增加到5个车型&#xff0c;最后成型是30个车型&#xff0c;几乎覆盖了F1、F2的全部车型。 并且程序还实现了消息提醒功能&…

Kotlin(十) 空指针检查、字符串内嵌表达式以及函数默认值

空指针检查 我们在之前的章节里&#xff0c;有定义一个Study的类&#xff0c;它有两个函数&#xff0c;一个doHomework(),一个readBooks()。然后我们定义个doStudy函数&#xff0c;来调用它们&#xff0c;代码如下&#xff1a; fun doStudy(study: Study) {study.doHomework(…

直播间自动发言机器人的运行分享,与开发需要到的技术分析

先来看实操成果&#xff0c;↑↑需要的同学可看我名字↖↖↖↖↖&#xff0c;或评论888无偿分享 一、引言 随着人工智能技术的不断发展&#xff0c;自动发言机器人已经成为了当今社交媒体领域的重要组成部分。它们能够自动化地发布内容、回复用户评论和消息&#xff0c;大大提高…

RE切入点:选择SLI,设定SLO

还是先来复习下上节课讲的“系统可用性”的两种计算方式&#xff0c;一种是从故障角度出发&#xff0c;以时长维度对系统进行稳定性评估&#xff1b;另一种是从成功请求占比角度出发&#xff0c;以请求维度对系统进行稳定性评估。同时&#xff0c;我们还讲到&#xff0c;在 SRE…

Django中简单的增删改查

用户列表展示 建立列表 views.py def userlist(request):return render(request,userlist.html) urls.py urlpatterns [path(admin/, admin.site.urls),path(userlist/, views.userlist), ]templates----userlist.html <!DOCTYPE html> <html lang"en">…