Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >关于单片机定时器的个人看法

关于单片机定时器的个人看法

作者头像
云深无际
发布于 2022-03-07 08:38:33
发布于 2022-03-07 08:38:33
35400
代码可运行
举报
文章被收录于专栏:云深之无迹云深之无迹
运行总次数:0
代码可运行

STC51(点灯+五向开关)

mini DSO STC15 开源示波器

中景园STC89C52资料

其实本来不是写定时器的文章,而是想写一篇长长的文章把单片机说完。但是我写的写的后悔了,实在是有点多,写完定时器就饿了,SO,最后起了这个名字。

nop是一个空指令的时间

对我们使用引脚的定义

没什么好说的,就是记住0是低电平,1是高电平。再者就是nop是一个空的时钟时间。注意上面函数的声明。

模块化编程,是怎么回事?考虑变与不变的艺术,注意分层的艺术。

dev是外设传感器的封装,写函数接口。sys是单片机本身的资源。

C是具体的实现,H是暴露的接口。

写函数声明,各种可变的参数

sys里面写关于操作寄存器的头文件,还有数据类型的重新定义。

需要注意的是,引脚也是一种资源,所以也放在配置的文件夹。

然后一个main文件作为逻辑的实现,完事。

函数与逻辑和模块之间的联系就是头文件。

关于按键检测,是永远不会缺席的功能。这里就先说查询法,这个查询我感觉有点扫描的味道,不就是一个循环里面判断一次和IO口相关联的状态标志。

看我代码,在死循环里面调用按下的语句。

消抖什么的,老生常谈了,不说了。功能就是如果按下按键就返回一个1.

也就是if为真,那就继续运行。不就是把灯开了。

这就是灯的IO

另外注意五向开关,也是需要占用好多IO的。

说下设计的逻辑,一定要在这个按键的状态前先查询,这个按键的当前情况,就好像你去买东西,先知道哪个地方还卖你要的东西吗?

因为我们想的是没有,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
key1 = 1;    //设置成输入状态

所以要:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
!key1 =1

是真!

开始延时,穷人做法,跳过抖动。

接着再判断一下这个状态,因为一直是准备读取,你还没有读取,对吧!不停的为真,一直就按着。一直IO为0.不继续运行,直到你放开,这个循环条件变假了。因为是你摁的时候有抖动,你松开的时候也有,所以处理方法一样。

是一样的

处理过后,相当于你读取了这个信息,相当于你取走了东西,这个东西你要还愿。flag=0,后面用return把它这个函数得到的信息传出去,给上层的函数使用。

就是这样。

STC51(LCD1602全解析.上),我以前写过,但是觉得不深刻,这里重新写。

使用外设,俩步走,先初始化,接着就是通信过程。

数字器械就是活的个时序,就是IO的电平变化+时间。

这是LCD1602的初始化代码,别问为什么我也不知道,先用。不是我不求甚解,其实我是真的不知道。

这里你也看见了,读写操作。怎么实现?用IO的电平变化:

写指令

写数据

时序

还有一个事情,就是在写操作前要看看LCD忙不忙:

忙信号检测

初始化而已。接下来看下连线问题:

8个线

接着就是

那么操作这个LCD,你就让IO口搭配的输出不同电平就行。

对于显示器件,知道在哪里显示什么就ok了~

高(0100)+低(0001)

这才是一个字符,如果一个串呢?

也是有函数的.

其实本来是要写应用的,但是我觉得太早了,不如再写几下相关的硬件。

这里先说定时器这个东西,前面的延时实现都是空语句浪费时间,这样很不好,至少不精确。

定时器的一些通俗解释我就不说了,我觉得这个地方可以是哟个数学建模里面的一些方法说明:

假设:

  1. 我们先认为一个可以记录的事情的两个相邻间隔的时间是相同的。
  2. 要记录的事情可以被记录
  3. 有个容器可以装我们记录的事情

定时器的工作就是这样:就好像你拿一个羽毛球往羽毛球桶里面塞,你一秒钟可以塞一个。10s后一个桶满了,然后你把这个桶里面的球倒入一个大桶里面,你顺手在本子上面划一道。

其实我们就可以计算了,你一个人塞了多少球?以及塞球用了多少时间。仔细想想还有进位的知识。就像表一样!

下面我找了一个土的要死的视频截图:

上面的水滴就是你塞球,时间是1秒一颗

满了以后就倒出去,是个容器就会满

初值重装,就是你一开始的羽毛球桶里面有几个。其实就是为了可控这个过程

可恶啊,让这么丑的示意图说明白了

我们开始抽象一下,一个定时器有什么构成:

  1. 要求事件之间的间隔时间相同
  2. 这个装事件的箱子多大
  3. 这个事件该怎么表示?

差不多啦!

因为我们说的是51单片机(我是觉得你51玩不明白就去玩ARM,STM32这些,笑话一样,不可否认你会用,但是你深刻吗?)。

一般51单片机的定时器名字叫TIMER,然后寄存器就是箱子,起个名字叫TL0,TH0. 也就是说定时器有两个箱子,名字分别是tl,th。

有箱子放啥?放事件,不论是什么事件无非就是发生了!然后在单片机里面就是1,0,相当于一个事件的发生标志。发生一个在TL的最低位写一个1,在发生就再放1.

其实有一个事情是,这个事件怎么触发,你看它本身很无聊,就是一个一个的。所以在单片机里面有晶振搬砖。

其实你要深刻的理解这个东西,所有的单片机定时器都是这样的。

那定时器怎么样用?其实就是闹钟的用法

我们先看怎么打开,闹钟是按钮打开。在单片机里面都是0,1,所以很容易就是0,1.

剩下是多长时间?闹钟的话我们是看走了多少格子,那单片机也是这样的原理,就是TH,TL这两个箱子如何组合的事情。

这个如何组合是一种模式,所以有个寄存器叫TMOD(time mode)干这个事情。

你看

一个格子有两个状态,0或1.那这么多格子,就是00、01,11,10.

4个工作模式哇。里面的时间够了,怎么传出去这个时间到了的意思呢?

使用TCON寄存器里面的TF,full满的意思,上面满了TF(0->1),告诉CPU满了。

你看是不是

你看

TF就是满了以后是中断。

接下来看怎么用!首先定时器我们要解决定时时长的问题。通过TH,TL控制。这里选16bit

先开启定时器1,都设置1.

然后就是M1,M0,设置01.这就OK了。

TMOD = 0000 0001 = 0x01.

一开始要计数了,TH,TL都为0,16bit,就是2的16次方,65535这么多。

有溢出,所以2^16+1,每次装一个值需要12/11.0592 微秒,装65536需要

UnitT=65536x(12/11.0592)= 71000微秒 = 71ms,那我要定时1s。

明显TH,TL都不够,兄弟别慌,循环几次就OK。

比如UnitT = 10ms,循环100次就1s啦!

那UnitT=10000us,也就是UnitT=(65536-X)x(12/11.0592)=10000us.

X就是我们的TH,TL的初始化的值。

算不来的自己用软件

继续,初始值为19456,然后不停的++,那么到65535,这是TL满了,然后不停的增长到TH到65535,两个都放不下了,TF变1,告诉CPU时间到了。

要注意TF变1 是溢出了一次,时间还没有到。要TF溢出20次,这才到1s。

这就是我们的框图,当TF为1时,我们要记录这个溢出事件,而且要把寄存器TLTH,清零,接着装值,拍拍屁股开始干活。

我觉得我讲的最清晰了,再听不懂可以考虑不用学了。

这里学点数字电路小知识。

学会了吗?

我们来分析一个,这个定时器的本质就是一个加减法的计数器,本质就是对脉冲计数。

只不过这个来源不一样,系统时钟的脉冲,就是定时,12或者6时钟得到一个计数脉冲.

如果是外部引脚那就是计数。一个脉冲+1

很清晰吧

6T肯定是快啊,你以前2个点吃一个,现在一个点吃一个。

看这个,3开关是由4,5,6控制的。

6为非门,GATE=0,输出1,5为或门,5,6搭配必出一,由高电平就全高了。4为与门这个时候,从56上来的信号是确定的1.要想4输出1,那就要TR0为1就行,其实侧面说明,TR0是开关了。巧妙

这不就开始了

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-02-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 云深之无迹 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
(六)51单片机基础——定时器
        定时器介绍:51单片机的定时器属于单片机的内部资源,其电路的连接和运转均在单片机内部完成。
小点点
2022/12/12
1.2K0
(六)51单片机基础——定时器
【51单片机】十分钟学会定时器&中断¹
🚩write in front🚩  🔎大家好,我是謓泽,希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎 🏅2021年度博客之星物联网与嵌入式开发TOP5~2021博客之星Top100~阿里云专家^星级博主~掘金⇿InfoQ创作者~周榜34»总榜1889🏅 🆔本文由 謓泽 原创 CSDN首发🙉如需转载还请通知⚠ 📝个人主页-謓泽的博客_CSDN博客 📃 🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​ 📣系列专栏-【51单片机】系列_謓泽的博客-CSDN博客🎓 ✉️我们并非登上我们所
謓泽
2022/12/12
1K0
【51单片机】十分钟学会定时器&中断¹
4.1 51单片机-定时器使用
时钟周期:时钟周期T是时序中最小的时间单位,具体计算的方法就是 1/时钟源频率,89C51单片机开发板上常用的晶振是11.0592M,对于这个单片机系统来说,时钟周期=1/11059200 秒。
DS小龙哥
2022/01/12
1.2K0
4.1 51单片机-定时器使用
51单片机定时器详细全解.上
看了很多几本单片机的书,对51定时器的认识又有了一些新的变化。开局一张图(一个简单的单片机程序),其实文章也是来解释这个代码的写法。
云深无际
2022/06/27
1.2K0
51单片机定时器详细全解.上
【51单片机】配置定时器
​ 那么我们先创建一个子函数 void Timer0_Init() ⇥ 对定时器进行初始化。 那么首先是TMOD的一个配置,定时器1我们先不管(高四位定时器全部给上0),只管低四位的一个定时器0的一个配置。 在前面的定时器工作有介绍过,STC89C52 的 T0 和 T1 一共有四种工作模式:在这里我们选择最常用的工作模式1。 Ⅰ:工作模式①的话,我们只需要把 M1 = 0,M0 = 1 就是定时器模式①的配置了。 Ⅱ:C/T(取反):这个我们只需要给C/T(取反) = 0即可,SYSclk⇢系统时钟。 Ⅲ:GATE(门控端),GATE = 0,这里当中都是数字电路当中的一些基础逻辑门,TR0 = 1。
謓泽
2022/12/12
7390
【51单片机】配置定时器
51单片机定时器使用
机器周期:12/11059200 s (标准框架下51单片机一个机器是12个时钟周期)
緣來
2020/01/02
1K0
STC51单片机中断与定时器配置参考
*外中断INT0--------void intsvr0(void) interrupt 0 using 1
小锋学长生活大爆炸
2020/08/13
1.5K0
STC51单片机中断与定时器配置参考
基于单片机的简易声光报时时钟
本设计采用STC89C51单片机作为主控制器,外部加上74HC573驱动数码管。系统总体框图如下:
一条晒干的咸鱼
2024/11/19
1310
基于单片机的简易声光报时时钟
【详解】单片机定时器初值的多种计算方式
前段时间,有小伙伴问小代,说给讲讲定时器初值的计算方式。今天我们就来细说定时器/计数器的初值的计算。
单片机技术宅
2023/02/17
7.7K0
【详解】单片机定时器初值的多种计算方式
单片机入门:定时器/计数器应用
利用单片机内部定时器/计数器中断实现一个数码管的秒记数,重点学习定时器/计数器的工作方式以及其控制寄存器TMOD、TCON的功能,在程序实现过程中掌握定时器/计数器中断的一般步骤。
电子工程师成长日记
2022/07/21
6660
单片机入门:定时器/计数器应用
51单片机采用中断进行串口通信
所谓中断方式,就是串口收/发标志位出发中断后,在中断中执行既定操作,可通过函数调用来实现。
緣來
2020/01/02
2K0
(七)51单片机基础——串口通信
        这个地方是连接到了SCON,控制的话,需要给ES赋1,EA 赋1,优先级直接给低优先级。接下来还是先看看SCON部分的原理图。
小点点
2022/12/12
7700
(七)51单片机基础——串口通信
51单片机定时器程序设计
在我们的DIY电子时钟里,需要用到单片机定时器来做秒的显示,说是显示,其实就是实现数码管上“:”点的闪烁。这里初步定义为每秒亮1次,亮0.5秒,灭0.5秒。实现显示秒的功能。这里也可以用DS1302的秒数据来做,但是实现起来麻烦,达到一样的效果,我们追求的是程序越简单越好,所以在此我们用单片机定时器来实现。
单片机技术宅
2020/03/17
9250
物联网-定时器实验
STC12C5A16S2系列单片机有4个定时器,其中定时器0和定时器1两个16位定时器,与 传统8051的定时器完全兼容,也可以设置为1T模式,当在定时器1做波特率发生器时,定时 器0可以当两个8位定时器用(另外2路PCA/PWM可以再实现2个16位定时器)。
会洗碗的CV工程师
2024/01/29
2410
物联网-定时器实验
51单片机定时器详细全解.下
继续写这个定时器,注意的是,崽每个机器周期完成的时候计数。S5P2的时候如果采样到高变低的情况,认为是个脉冲。在下一个机器周期的S3P1进行计数。
云深无际
2022/06/27
1.1K0
51单片机定时器详细全解.下
一文解决STC51单片机的IO配置问题
我们学习单片机,到底学什么呢?最终落脚点,就是落在单片机的IO口上,其实最终就是操作单片机的IO口,什么串口通讯,IIC通信协议,中断,定时器,最终在单片机上体现出来的还是我们对单片机IO口的操作。既然那么重要,今天我们就来好好的说一说单片机的IO口。
单片机技术宅
2020/03/17
3K0
【51单片机】从零开始手把手带你【查手册】配置定时器,并完成小项目(定时器&中断的应用)(代码演示&单片机现象对照LCD闪烁)(9)
YY的秘密代码小屋
2024/02/17
1.1K0
【51单片机】从零开始手把手带你【查手册】配置定时器,并完成小项目(定时器&中断的应用)(代码演示&单片机现象对照LCD闪烁)(9)
4.2 51单片机-中断
当中央处理机CPU正在处理某件事的时候外界发生了紧急事件请求,要求CPU暂停当前的工作,转而去处理这个紧急事件,处理完完后,再回到原来被中断的地方,继续原来的工作,这样的过程称为中断,实现这种功的部件称为中断系统,请示CPU中断的请求源称为中断源。
DS小龙哥
2022/01/12
9620
4.2 51单片机-中断
单片机应用基础知识_51单片机基础知识总结
STC89C52:8KFLASH、512字节RAM、32个IO口、3个定时器、1个UART、8个中断源
全栈程序员站长
2022/10/04
6250
单片机应用基础知识_51单片机基础知识总结
大神学习单片机的步骤,学完你不是大神你来找我
任何一款单片机,其实学习步骤都是一样的,不管是8位的入门芯片,还是32位的高速芯片。以下步骤是必须的,按部就班的学完了,你不成大神你来找我。
单片机技术宅
2020/03/17
7240
推荐阅读
相关推荐
(六)51单片机基础——定时器
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验