单片机学习笔记---DS1302实时时钟工作原理

news2025/1/19 2:38:42

目录

DS1302介绍

学会读芯片手册(DS1302芯片手册)

封装

引脚定义

电源部分

时钟部分

通信部分

总结列表

内部结构图

电源控制部分

时钟控制部分

寄存器部分

访问部分

寄存器部分的详细定义

命令字

时序的定义

单字节读

单字节写


提前预告:本节会带大家看芯片手册!学会看芯片手册是一位开发工程师必备的技能!

DS1302介绍

DS1302是由美国DALLAS公司推出的具有涓细电流充电能力低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能

还有另外一个名词就是RTC(Real Time Clock):实时时钟,是一种集成电路,通常称为时钟芯片(我们的单片机内部没有RTC,可以外接一个RTC的芯片,给单片机提供实时时钟。市面上有很多种实时时钟芯片,有的自带电池,功能各不相同。)

这个模块在我们开发板上的这个位置,那个芯片就是DS1302芯片

这个是这个模块的原理图

问题来了,前面定时器那一节我们也做过是时钟了,但是为什么还要用这个时钟芯片来做呢?

其实定时器做的时钟有几个缺点,第一个缺点就是它的精度不高(相对于时钟芯片来讲),第二个缺点就是它会占用我们单片机的CPU时间。还有一点最重要的是单片机定时器的时钟不能掉电继续运行,就是开关重启之后时间又得重新开始计时。而时钟芯片会带有一个备用电池,如果掉电的话它的内部逻辑判断就会自动把电源切换到备用电池,即使我们单片机不工作,这个备用电池也会给时钟芯片提供电能,让它能够在单片机不工作的时候继续走时,等下次单片机工作的时候,再读取时间的时候还是一个正确的实时时间。

学会读芯片手册(DS1302芯片手册)

平时我们根据功能找到一块芯片后,第一时间应该看芯片数据手册datasheet,这个芯片怎么玩怎么用都在手册上写得很清楚,所以一定要学会看芯片手册。

接下来介绍DS1302芯片手册的内容,看看这个芯片是怎么玩的。

通过刚才的讲解我们知道这个时钟芯片是用来计时的,我们先来看一下它的引脚定义和电路。

封装

市面上这种芯片可能会有两种封装,

DIP直插封装,和贴片封装:

引脚定义

这个是它的应用电路,可以看到它有8个引脚。

电源部分

第一部分就是电源部分的引脚

其中电源部分的第一个引脚是VCC2是主电源,它和我们单片机的VCC电源正极连在一起的。

还有一个引脚是VCC1,连接备用电源。

当VCC主电源一旦掉电之后,它会自动切换到备用电池,保证时钟继续运行。前面介绍过DS1302具有涓细电流充电能力低功耗实时时钟芯片,也就意味着再VCC有点的时候,它会对这个备用电池进行充电(当然要保证这个备用电池是可充电电池)。

但是一般来说我们的芯片不需要配这个涓细电流充电能力,因为它在掉电的模式下使用备用电池功耗是很低的,我们只需要接个电池就能运行很久时间了。

这个是我们芯片的GND

芯片和备用电池的GND是连在一起的

以上就是芯片手册上的原理图,我们看一下开发板上这一模块的原理图,这里的VCC1没有接备用电池,所以掉电继续走时的这个功能就看不到了。

时钟部分

然后我们看一下X1和X2,它们是固定接晶振,这个晶振的频率是32.768千赫兹,是因为通用的实时时钟的晶振都是32.768千赫兹,方便应用,并且精度比较高。这就好像我们的单片机在使用串口的时候,为什么需要11.0592兆带这么多小数点的晶振,是因为这个晶振对他来说是比较能够保证精度的。晶振能够提供稳定的计数脉冲。

通信部分

有了电源和计数脉冲之后,这个芯片就可以独立工作了。但是单片机如果设置时间和如何去获取时间就需要这三个引脚:

这三个引脚就是通信的引脚,利用这三个引脚,单片机就可以把芯片内部的时钟给读出来,写入时间也是通过这三个引脚。

这三个引脚规定了一套协议,我们利用这个协议就可以对里面的芯片里面的寄存器进行读写。

这三个引脚的通信模式就和我们上一节讲的74HC595这个移位寄存器的操作就很类似的。

其中I/O对应74HC595这个移位寄存器的SER。

CE是对IO和SCLK这两个操作进行使能,相当于开关控制

总结列表

内部结构图

这个是这个DS1302芯片的内部结构图

电源控制部分

这就是电源控制部分

时钟控制部分

这个是时钟部分,X1和X2接的是外部晶振,通过内部电路的设置,频率分频等等运算之后,就会输出一个1Hz的标准计时频率。

寄存器部分

这个是芯片内部的一个寄存器部分,内部的时间都是存在这个寄存器里面的,它是31*8这么大的一个RAM,就跟单片机内部的RAM一样,比如说我们定一个变量i,那么在单片机内部的寄存器里面就为这里变量开辟了一个地址的空间。

这些就是一部分跟时钟有关的寄存器

访问部分

接下来就是访问部分。怎么去读写寄存器就是靠这部分来的。其中CE引脚是芯片的使能,当然并不是说芯片不使能这个时钟就不工作了。这个CE是就相当于一个中介开关一样,数据从移位寄存器过来之后,首先要经过一个开关,开关使能之后才能去访问这个RAM。CE为高电平的时候,IO和SCLK的操作才是有用的。

I/O和SCLK控制输入移位寄存器。

寄存器部分的详细定义

接下来详细介绍一个寄存器部分的定义

这些寄存器都有一个地址,每个地址下就是一个数据,数据是以一个字节一个字节存储的,一个字节有8位。在所有的这些寄存器中,第一个寄存器是秒寄存器,也就是地址0它存储的是秒。第二个是分寄存器,第三个是小时寄存器,第四个就是date(1-31)寄存器,接下来就是月寄存器,再下来是Day寄存器(星期一到星期日),然后是年寄存器(可以工作在2000-2099年,2100年之后这个芯片就不中用了)。

然后下面地WP是write protect写保护,如果它置1的话,就是写入的操作是无效的,读出操作是有效的,相当于它也是个使能的标志位。

然后下面这个寄存器是用来存储涓流充电的。如果不需要涓流充电这个功能,那么这个寄存器就不需要配置。

以上只是芯片内部的一部分寄存器,并不是全部的寄存器,只不过上面提到的这些是和时钟有关的寄存器。

命令字

什么是命令字?

命令字是一个字节(8位)。

它的最高位7固定是1(要操作RTC,规定最高位7就是1)。

如果要操作RAM,那次高位6就得给1,如果给0就是操作CK(clock)时钟。

第5位到第1位就是地址(A4~A0),比如秒的地址是0,如果操作秒的话,就需要给地址00000

最后一位就是读写,1就是读,0就是写

地址/命令字体现了两个要点:

1.在哪 写入 什么(单片机输出的东西)

2.在哪 读出 什么(DS1302输出的东西,单片机要读到这个东西)

如果是这样的命令字,转成16进制就是0x80

正好对上这张表格上给出的地址命令字。

也就时候时钟写秒就是80

如果想读秒就是81

上面这张表上已经把每个寄存器读和写的命令字都给列出来了,可以直接参考。

有了这些命令字之后,我们在在哪,读/写的操作就已经完成了。

时序的定义

接下来我们看一下时序的定义

前面说的命令字和这些数据是怎么对应起来的呢?

我们看一下这张图:

在整个操作过程中要保证CE是高电平,也就是读写之前给1,才能使I/O和SCLK的操作有效,读写完之后再给0。

SCLK给一个固定的时钟,I/O给数据。

单字节读

数据是怎么一位一位地移进去的呢?

它规定在SCLK时钟的上升沿,I/O口上的电平将会被写入。

IO口发两个字节,发第一个字节是命令字,完成后单片机就知道在哪读出数据。

发第二个字节的时候DS1302就把数据输出给单片机,也就是单片机控制SCLK时钟,每来一个下降沿,DS1302就会把它的数据输出,即单片机把数据读出来。

换句话说,对于单片机而言,在时钟的上升沿我们要向时钟芯片写入数据,在时钟的下降沿,时钟芯片向我写入数据。

单字节写

第一步就是给CE一个高电平。

第二步,I/O口发两个字节(第一个字节是命令字,第二个字节是我们的数据),其中命令字要先发R/W(命令字的最低位),1还是0。

第三步 ,时钟给一个上升沿,命令字的最低位被写入单片机。

第四步,将时钟置回0,把次低位的数据放在IO口上。

第五步,再给时钟一个上升沿,再把次低位写入单片机。

依次循环,直到循环8次,把最高位给写入单片机,然后再给时钟一个低电平。

到这里就完成了对命令字的写入操作。

这一部分过程就是给CE一个高电平之后,第一个写入的就是命令字,也就是告诉单片机在哪读或者在哪写,然后它才知道是写入数据还是读出数据。

如果你发的是写的话,那么发完一个字节之后,紧跟着就可以发第二个字节,第二个字节就是继续同样的操作把要写入的数据(8位)的D0位写入到单片机里面,如此循环直到写进D7位之后再给时钟一个下降沿。操作完之后再把CE置0,这样这个时序就完成了。

这整张图中的过程中,除了这部分是由DS1302掌控,其他部分都是由单片机掌控的。

以上就是本节的内容,下一节进行代码演示。

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

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

相关文章

qt/c++实现拓扑排序可视化

💂 个人主页:pp不会算法^ v ^ 🤟 版权: 本文由【pp不会算法v】原创、在CSDN首发、需要转载请联系博主 💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 实现功能 1、选择文件导入初始数据 2、逐步演示 3、排序完成输出…

L1-096 谁管谁叫爹

一、题目 二、解题思路 依据题意判断即可。 三、代码 #include<iostream> using namespace std; #include<cmath> int main() {int n;cin>>n;while(n--){int n1,n2,s10,s20;cin>>n1>>n2;for(int i1;n1/i>0;i*10){s1(n1/i%10);}for(int i1;n…

FastDFS安装并整合Openresty

FastDFS安装 一、环境--centos7二、FastDFS--tracker安装2.1.下载2.2.FastDFS安装环境2.3.安装FastDFS依赖libevent库2.4.安装libfastcommon2.5.安装 libserverframe 网络框架2.6.tracker编译安装2.7.文件安装位置介绍2.8.错误处理2.9.配置FastDFS跟踪器(Tracker)2.10.启动2.11…

【JAVA WEB】 css背景属性 圆角矩形的绘制

目录 背景属性设置 圆角矩形 背景属性设置 背景颜色,在style中 background-color:颜色&#xff1b; 背景图片 background-image:url(……) 背景图片的平铺方式 background-repeat: 平铺方式 repeat 平铺&#xff08;默认&#xff09;no-repeat 不平铺repeat-x 水平平铺repea…

设计模式3-责任链模式

责任链模式是一种行为设计模式&#xff0c;它允许你创建一个对象链。请求沿着这条链传递&#xff0c;直到有一个对象处理它为止。这种模式通常用于需要以某种方式动态地决定处理请求的顺序或方式的情况。 类图&#xff1a; 从图中可见最大的特点是AbstractHandler它自己聚合了自…

探索Xposed框架:个性定制你的Android体验

探索Xposed框架&#xff1a;个性定制你的Android体验 1. 引言 在当今移动设备市场中&#xff0c;Android系统作为最受欢迎的操作系统之一&#xff0c;其开放性和可定制性备受用户青睐。用户希望能够根据个人喜好和需求对其设备进行定制&#xff0c;以获得更符合自己习惯的使用…

svg 进阶

svg 进阶 svg 应用场景 绘制 icon绘制动画 svg viewport 和 viewBox viewport 是 svg 图像的可见区域 viewBox 是用于在画布上绘制 svg 图形的坐标系统 在一下案例中 svg中 width“500” height“200” 就是可视区域 比如你的svg是100X100但是你的可视区域只有20X20 那么他…

c语言中的模拟多态性

在C语言中模拟多态性 多态性是面向对象编程中的一个核心概念&#xff0c;它允许我们通过一个共同的接口来操作不同的数据类型。虽然C语言是一种过程式语言&#xff0c;本身不直接支持面向对象的特性&#xff0c;如继承、封装和多态&#xff0c;但我们可以通过一些技巧来模拟这些…

mac docker 宿主机和容器间网络打通

动因 是这样&#xff0c;笔者最近满怀欣喜入手Docker&#xff0c;看着各种文章命令都是不断点头称道&#xff1a;“嗯嗯&#xff0c;不错不错”,在接下来终于准备大干一场的时候碰壁了&#xff0c;主要情况是说在Mac中跑了第一把的时候发现碰到&#xff0c;虚拟机和宿主机居然…

arkTS开发鸿蒙OS应用(登录页面实现,连接数据库)

前言 喜欢的朋友可在抖音、小红书、微信公众号、哔哩哔哩搜索“淼学派对”。知乎搜索“编程淼”。 前端架构 Toubu.ets import router from ohos.router Component export struct Header{build(){// 标题部分Row({space:5}){Image($r(app.media.fanhui)).width(20).onClic…

HiveSQL——用户中两人一定认识的组合数

注&#xff1a;参考文章&#xff1a; SQL之用户中两人一定认识的组合数--HQL面试题36【快手数仓面试题】_sql面试题-快手-CSDN博客文章浏览阅读1.2k次&#xff0c;点赞3次&#xff0c;收藏12次。目录0 需求分析1 数据准备2 数据分析3 小结0 需求分析设表名&#xff1a;table0现…

深度分析一款新型Linux勒索病毒

前言 DarkRadiation勒索病毒是一款全新的Linux平台下的勒索病毒&#xff0c;2021年5月29日首次在某平台上发布了此勒索病毒的相关的信息&#xff0c;6月中旬趋势科技针对这个新型的勒索病毒进行了相关的分析和报道。 DarkRadiation勒索病毒采用Bash脚本语言编写实现&#xff0…

渗透测试练习题解析 2(CTF web)

题目均来自 BUUCTF 1、[极客大挑战 2019]Upload 1 考点&#xff1a;文件上传漏洞 进入靶场 一看就知道是考察文件上传漏洞&#xff0c;看源码有没有敏感信息 没有什么敏感信息&#xff0c;那我们试着按要求传一张图片看看结果&#xff0c;但是传了 png、jpg 类型的图片后发现上…

那些 C语言指针 你不知道的小秘密 (4)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 我会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人能…

蓝桥杯每日一练(python)B组

###来源于dotcpp的蓝桥杯真题 题目 2735: 蓝桥杯2022年第十三届决赛真题-取模&#xff08;Python组&#xff09; 给定 n, m &#xff0c;问是否存在两个不同的数 x, y 使得 1 ≤ x < y ≤ m 且 n mod x n mod y 。 输入格式&#xff1a; 输入包含多组独立的询问。 第一…

Linux开发工具的使用 (gcc/g++ | gdb)

目录 一、gcc/g 1.关于gcc/g 2.gcc如何使用 gcc选项&#xff1a; 预处理&#xff1a; 编译: 汇编: 连接: 函数库是什么&#xff1a; 函数库分为动态库和静态库两种 二、调试器gdb 1.关于gdb 2. gdb的使用 gdb选项&#xff1a; Linux是一个广泛用于开发的操作系统&…

uni-app x,一个纯原生的Android App开发工具

uni-app x&#xff0c;下一代uni-app&#xff0c;一个神奇的产品。 用vue语法、uni的组件、api&#xff0c;以及uts语言&#xff0c;编译出了kotlin的app。不再使用js引擎和webview。纯纯的kotlin原生app。 uni-app x&#xff0c;让“跨平台开发性能不如原生”的这条曾广为流…

【集合系列】TreeMap 集合

TreeMap 集合 1. 概述2. 方法3. 遍历方式4. 排序方式5. 代码示例16. 代码示例27. 代码示例38. 注意事项9. 源码分析 其他集合类 父类 Map 集合类的遍历方式 TreeSet 集合 具体信息请查看 API 帮助文档 1. 概述 TreeMap 是 Java 中的一个集合类&#xff0c;它实现了 SortedMap…

【网工】华为设备命令学习(服务器发布)

本次实验主要是内网静态nat配置没&#xff0c;对外地址可以理解为一台内网的服务器&#xff0c;外网设备可以ping通内网的服务器设备&#xff0c;但是ping不通内网的IP。 除了AR1设备配置有区别&#xff0c;其他设备都是基础IP的配置。 [Huawei]int g0/0/0 [Huawei-GigabitEt…

5.1 灯光色彩与视觉

5.1 灯光色彩与视觉 视觉成像 灯光与物体的反应:吸收,反射和折射 色彩:光照到物体上,物体吸收其他光源色,只反射该颜色光,所以物体 表面呈现该颜色 视觉:该颜色光进入人眼刺激感光细胞,并在视网膜上形成影像. ABSORBTION 一、基础灯光 1.环境光&#xff08;Ambient Light…