51单片机15单片机 时钟芯片DS1302【更新中】

news2024/11/27 21:45:23

前言

现在流行的串行时钟电路很多,如DS1302、 DS1307、PCF8485等。这些电路的接口简单、价格低廉、使用方便,被广泛地采用。

  • 本文介绍的实时时钟电路DS1302是DALLAS公司的一种具有涓细电流充电能力的电路
  • 主要特点是采用串行数据传输,可为掉电保护电源提供可编程的充电功能,并且可以关闭充电功能。采用普通32.768kHz晶振。


一、DS18B20芯片介绍

 DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。
RTC(Real Time Clock):实时时钟,是一种集成电路,通常称为时钟芯片。

特征

DS1302模块:


二、芯片引脚定义与应用电路

晶振给芯片提供一个时钟源 

典型工作电路

51单片机DS1302电路图

蓝桥杯15单片机开发板实际电路

注意51单片机与15单片机使用的I/O口是不同的

该开发板中没有接备用电池,因此掉电再上电之后是初始化设置的时间。

带电池的DS1302模块可以存储时间

引脚名作用
VCC2主电源
VCC1备用电池
GND电源接地
X1,X232.768kHz晶振
CE芯片使能
IO数据输入/输出
SCLK串行时钟


三、寄存器定义

DS1302相关寄存器如下:

  • 第一行的 CH(BIT7)表示时钟暂停控制位,这一位置1代表时钟暂停,置0时钟正常运行
  • 倒数第二行的 WP(BIT7),这一位置1代表芯片写保护,写入操作无效,置0即可解除芯片写保护,就可以写入数据

 DS1302有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式,其日历、时间寄存器如上图所示。

此外,DS1302 还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器外的所有寄存器内容。 DS1302与RAM相关的寄存器分为两类:一类是单个RAM单元,共31个,每个单元组态为一个8位的字节,其命令控制字为C0H~FDH,其中奇数为读操作,偶数为写操作;另一类为突发方式下的RAM寄存器,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。


四、命令字

  • 第0位表示读还是写(置1表示读,置0表示写);
  • 第1-5位表示地址(秒地址为0,分钟地址为10,…);
  • 第6位表示操作RAM还是时钟CK(置1表示操作RAM,置0表示操作CK);
  • 第7位:固定为1;

举个例子:

对时钟操作、秒地址操作、读:
10000001(0x81)
对时钟操作、秒地址操作、写:
10000000(0x80)
这与上面寄存器中的读地址和写地址是对应的。


五、数据流

在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。

五、时序图与数据读写

时序代码实现部分

#include "DS1302.h"

//对端口重新定义,位变量,只进行逻辑判断,非零即真
sbit DS1302_CE   = P1^3;
sbit DS1302_IO   = P2^3;
sbit DS1302_SCLK = P1^7;

#define DS1302_SECOND   0x80	//秒
#define DS1302_MINTUE   0x82	//分钟
#define DS1302_HOUR     0x84	//小时
#define DS1302_DATE     0x86	//日
#define DS1302_MONTH    0x88	//月
#define DS1302_DAY      0x8A	//星期
#define DS1302_YEAR     0x8C	//年
#define DS1302_WP       0x8E	//写保护的

unsigned char DS1302_Time[9]={23,2,9,23,59,55,4};//年 月 日 时 分 秒 星期

//上电默认1,先初始化为0
void DS1302_Init(void)
{   
	DS1302_CE    = 0;	//
	DS1302_SCLK  = 0;
}

//单字节写(命令字,数据)
void DS1302_WriteByte(unsigned char Command, unsigned char Data)
{
	unsigned char i;
	DS1302_CE = 1;	
	for (i = 0; i < 8; i ++)	//写命令字
	{
		DS1302_IO = Command & (0x01<<i);
		DS1302_SCLK = 1;
		DS1302_SCLK = 0;
	}
	for (i = 0; i < 8; i ++)	//写数据
	{
		DS1302_IO = Data & (0x01<<i);
		DS1302_SCLK = 1;
		DS1302_SCLK = 0;
	}	
	DS1302_CE = 0;	
}

//单字节读,用上面的宏定义即可
unsigned char DS1302_ReadByte(unsigned char Command)
{
	unsigned char Data = 0x00;
	unsigned char i;
	Command |= 0x01;//变成读的地址
	
	DS1302_CE = 1;	
	for (i = 0; i < 8; i ++)	//写命令字
	{
		DS1302_IO = Command & (0x01<<i);
		DS1302_SCLK = 0;	//先给0后给1,因为时序图上少一个脉冲
		DS1302_SCLK = 1;
	}
	for (i = 0; i < 8; i ++)
	{
		DS1302_SCLK = 1;	//先给1后给0,模拟时序图
		DS1302_SCLK = 0;
		if(DS1302_IO == 1)	//读取端口是1
		{ Data |= (0x01<<i); }	//读数据操作
	}
	DS1302_CE = 0;	
	DS1302_IO = 0;	//修改的地方
	return Data;	
}



void DS1302_SetTime(void)
{
	DS1302_WriteByte(DS1302_WP, 0x00);//解除芯片写保护
	DS1302_WriteByte(DS1302_YEAR,   DS1302_Time[0]/10*16+DS1302_Time[0]%10);//十进制转BCD码
	DS1302_WriteByte(DS1302_MONTH,  DS1302_Time[1]/10*16+DS1302_Time[1]%10);	
	DS1302_WriteByte(DS1302_DATE,   DS1302_Time[2]/10*16+DS1302_Time[2]%10);
	DS1302_WriteByte(DS1302_HOUR,   DS1302_Time[3]/10*16+DS1302_Time[3]%10);
	DS1302_WriteByte(DS1302_MINTUE, DS1302_Time[4]/10*16+DS1302_Time[4]%10);
	DS1302_WriteByte(DS1302_SECOND, DS1302_Time[5]/10*16+DS1302_Time[5]%10);
	DS1302_WriteByte(DS1302_DAY,    DS1302_Time[6]/10*16+DS1302_Time[6]%10);	//星期
	DS1302_WriteByte(DS1302_WP, 0x80);//此句WP给0x80,打开芯片写保护
}



void DS1302_ReadTime(void) //此函数读取时钟芯片的数据,写到数组DS1302_Time里
{
	unsigned char Temp;
	Temp = DS1302_ReadByte(DS1302_YEAR);//进去就被 或运算 置1,变成读,读BCD码
	DS1302_Time[0] = Temp/16*10+Temp%16;
	
	Temp = DS1302_ReadByte(DS1302_MONTH);//月
	DS1302_Time[1] = Temp/16*10+Temp%16;
	Temp = DS1302_ReadByte(DS1302_DATE);
	DS1302_Time[2] = Temp/16*10+Temp%16;
	Temp = DS1302_ReadByte(DS1302_HOUR);
	DS1302_Time[3] = Temp/16*10+Temp%16;
	Temp = DS1302_ReadByte(DS1302_MINTUE);
	DS1302_Time[4] = Temp/16*10+Temp%16;
	Temp = DS1302_ReadByte(DS1302_SECOND);
	DS1302_Time[5] = Temp/16*10+Temp%16;
	Temp = DS1302_ReadByte(DS1302_DAY);
	DS1302_Time[6] = Temp/16*10+Temp%16;
}

效果

9之后变成16了

原因?

   BCD码   

十进制十六进制BCD码
90000 100109
160001 000010

介绍BCD码的文章:

【C语言】BCD码、十进制互相转换

 这个BIT7  CH  如果给1,时钟就会暂停, 给0是运行的

12/24第四行  BIT7   =0,是24小时模式

如果BIT7 = 1 是12小时模式  BIT5 = 0是AM, BIT5 = 1是PM

写的地址,弄个宏定义

Command(写) | 0x01 = Command(读)

让写的地址 |= 0x01,就是读数据的地址,减少一半的宏定义!!!


参考文章:

DS1302详解

51单片机DS1302实时时钟

单片机常用芯片总结(二)——DS1302时钟芯片

B站视频(链接打不开)

江科大自化协-51单片机入门教程-2020版 程序全程纯手打 从零开始入门【10-1】【10-2】


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

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

相关文章

配置与管理FTP服务器

FTP的概念及作用 FTP( 文件传输协议 ) 是目前Internet上流行的数据传输方法之一。利用FTP协议&#xff0c;可以在FTP服务器和客户机之间进行双向传输&#xff0c;既可以把数据从FTP服务器上下载到本地客户机&#xff0c;又可以从客户机上传数据到远程FTP服务器。FTP最初与WWW服…

[ECCV 2020] FGVC via progressive multi-granularity training of jigsaw patches

Contents IntroductionProgressive Multi-Granularity (PMG) training frameworkExperimentsReferencesIntroduction 不同于显式地寻找特征显著区域并抽取其特征,作者充分利用了 CNN 不同 stage 输出的特征图的语义粒度信息,并使用 Jigsaw Puzzle Generator 进行数据增强来帮…

MediaPipe之人体关键点检测>>>BlazePose论文精度

BlazePose: On-device Real-time Body Pose tracking BlazePose&#xff1a;设备上实时人体姿态跟踪 论文地址&#xff1a;[2006.10204] BlazePose: On-device Real-time Body Pose tracking (arxiv.org) 主要贡献: &#xff08;1&#xff09;提出一个新颖的身体姿态跟踪解决…

文件操作 -- IO

文章目录文件操作 -- IO文件 :文件路径 :文件的类型java 中的文件操作文件内容的相关操作字节流的读和写操作字符流的读和写操作代码案例代码案例一 &#xff1a;代码案例二 &#xff1a;代码案例三 &#xff1a;文件操作 – IO 文件 : 文件相比大家都不陌生把 &#xff0c; 打…

10 卷积神经网络CNN(基础篇)

文章目录全连接CNN过程卷积过程下采样过程全连接层卷积原理单通道卷积多通道卷积改进多通道总结以及课程代码卷积改进PaddingStride下采样过程大池化层&#xff08;Max Pooling&#xff09;简单卷积神经网络的实现课程代码本篇课程来源&#xff1a; 链接部分文本来源参考&#…

LSTM已死,Transformer当立(LSTM is dead. Long Live Transformers! ):上

回想一下在Seq2seq模型中,如何使用Attention。这里简要回顾一下【1】介绍的方法2(并以此为基础展开对Transformer的讨论)。 下图中包含一个encoder(左)和一个decoder(右)。对于decoder来说,给定一个输入,得到输出,如何进一步得到context vector 呢? 我们需要根据和…

网络工程师一定要学会的知识点:OSPF,今天给大家详细介绍

1. OSPF 概念OSPF&#xff08;Open Shortest Path First 开放式最短路径优先&#xff09;是一种动态路由协议&#xff0c;属于内部网关协议(Interior Gateway Protocol,简称 IGP)&#xff0c;是基于链路状态算法的路由协议。2. OSPF 的运行原理&#xff08;1&#xff09;OSPF 的…

后端开发必懂nginx面试40问

什么是Nginx&#xff1f; Nginx是一个 轻量级/高性能的反向代理Web服务器&#xff0c;用于 HTTP、HTTPS、SMTP、POP3 和 IMAP 协议。他实现非常高效的反向代理、负载平衡&#xff0c;他可以处理2-3万并发连接数&#xff0c;官方监测能支持5万并发&#xff0c;现在中国使用ngin…

Flink面试题

一 基础篇Flink的执行图有哪几种&#xff1f;分别有什么作用Flink中的执行图一般是可以分为四类&#xff0c;按照生成顺序分别为&#xff1a;StreamGraph-> JobGraph-> ExecutionGraph->物理执行图。1&#xff09;StreamGraph顾名思义&#xff0c;这里代表的是我们编写…

RabbitMQ安装及配置

目录1.下载和安装1.1 下载1.2. 安装1.3 测试1.4 卸载管理界面2.1 添加用户2.2 创建Virtual Hosts2.3. 设置权限1.下载和安装 1.1 下载 1.下载Erlang的rpm包 RabbitMQ是Erlang语言编写&#xff0c;所以Erang环境必须要有&#xff0c;注&#xff1a;Erlang环境一定要与RabbitMQ…

每天一道大厂SQL题【Day08】

每天一道大厂SQL题【Day08】 大家好&#xff0c;我是Maynor。相信大家和我一样&#xff0c;都有一个大厂梦&#xff0c;作为一名资深大数据选手&#xff0c;深知SQL重要性&#xff0c;接下来我准备用100天时间&#xff0c;基于大数据岗面试中的经典SQL题&#xff0c;以每日1题…

Learning C++ No.7

引言&#xff1a; 北京时间&#xff1a;20223/2/9/22:20&#xff0c;距离大一下学期开学还有2天&#xff0c;昨天收到好消息&#xff0c;开学不要考试了&#xff0c;我并不是害怕考试&#xff0c;考试在我心里&#xff0c;地位不高&#xff0c;可能只有当我挂了&#xff0c;才能…

自媒体人都在用的免费音效素材网站

视频剪辑、自媒体人必备的剪辑音效素材网站&#xff0c;免费下载&#xff0c;建议收藏&#xff01; 1、菜鸟图库 音效素材下载_mp3音效大全 - 菜鸟图库 菜鸟图库是一个综合性素材网站&#xff0c;站内涵盖设计、图片、办公、视频、音效等素材。其中音效素材就有上千首&#xf…

数学建模学习笔记(20)典型相关分析

典型相关分析概述&#xff1a;研究两组变量&#xff08;每组变量都可能有多个指标&#xff09;之间的相关关系的一种多元统计方法&#xff0c;能够揭示两组变量之间的内在联系。 典型相关分析的思想&#xff1a;把多个变量和多个变量之间的相关化为两个具有代表性的变量之间的…

【沁恒WCH CH32V307V-R1开发板读取板载温度实验】

【沁恒WCH CH32V307V-R1开发板读取板载温度实验】1. 前言2. 软件配置2.1 安装MounRiver Studio3. ADC项目测试3.1 打开ADC工程3.2 编译项目4. 下载验证4.1 接线4.2 演示效果5. 小结1. 前言 ADC 模块包含 2 个 12 位的逐次逼近型的模拟数字转换器&#xff0c;最高 14MHz 的输入时…

pandas——plot()方法可视化

pandas——plot()方法可视化 作者&#xff1a;AOAIYI 创作不易&#xff0c;如果觉得文章不错或能帮助到你学习&#xff0c;记得点赞收藏评论哦 在此&#xff0c;感谢你的阅读 文章目录pandas——plot()方法可视化一、实验目的二、实验原理三、实验环境四、实验内容五、实验步骤…

Python文件的属性获取,重命名,目录的创建,显示和改变

1. 文件的属性获取 os.stat()函数可以获取文件的属性&#xff0c;该函数会返回一个和系统平台有关的stat_result对象&#xff0c; 具备一组可访问的属性&#xff0c;可以通过 stat_result.attribute 这样的格式来访问各个属性的值。 字 段描 述st_modeinode 保护模式st_inoin…

115.Android 简单的多级树结构列表+正常列表结合使用(RecyclerView)

1.第一步 导入需要用到的依赖库: //RecyclerView implementation com.android.support:recyclerview-v7:28.0.0 //RecyclerAdapter implementation com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.28 //刷新控件 implementation com.scwang.smartrefresh:SmartRefre…

python-QGIS环境配置

系统&#xff1a;win10 QGIS的下载及安装 在QGIS的官网下载安装包进行安装 下载得到QGIS-OSGeo4W-3.22.16-1.msi的安装包&#xff0c;除了安装路径&#xff0c;基本下一步就可以安装了安装完成后打开QGIS程序文件夹&#xff0c;在./QGIS xx.xx/bin/目录下有个python-qgis-ltr.b…

SpringBoot 自定义注解实现涉密字段脱敏

关于数据脱敏&#xff0c;网上的文章都是硬编码规则&#xff0c;比如对身份证&#xff0c;手机号&#xff0c;邮件地址等固定写法脱敏。本文在此基础上&#xff0c;拓展动态从数据库查出涉密关键字执行脱敏操作。数据脱敏&#xff1a;把系统里的一些敏感数据进行加密处理后再返…