时钟芯片入门指南:从原理到实践

DS1302时钟

实时时钟芯片,精度高、

DS1302芯片可以对年、月、日、周、时、分、秒进行计时,并且具有闰年补偿等多种功能。
采用三线接口与CPU进行同步通信(采用串行数据传送方式简单SPI 3线接口),并可采用突发方式一次传送多个字节的时钟信号或RAM数据。
可以单字节传送和多字节传送方式.
SPI就是串行外围接口,SPI接口是在CPU和外围低速器件之间同步进行串行数据传输,在主器件的移位脉冲下,数据按位传输,高位在前,低位在后,为全双工通信。

SPI接口是以主从方式(一个主器件和多个从器件)工作的,其接口有四种信号:
1.MOSI--主器件数据输出,从器件数据输入(master主器件   slaver从器件 output输出 input输入)
2.MISO--主器件数据输入,从器件数据输出
3.SCLK--时钟信号,由主器件产生
4./CS--从器件使能信号,由主器件控制

DS1302管脚

VCC 1:工作电源    管脚8
VCC 2:备用电源。接入电池断电时提供1302电源  管脚1
X~1~、X~2~:32.76 KHz晶振接入引脚   管脚2、3
GND:接地    管脚4
RST:复位引脚,低电平有效,操作时高电平    管脚5
I/O:数据输入/输出引脚,具有三态功能(高阻态、高电平、低电平)     管脚6
SCLK:串行时钟输入引脚     管脚7

对DS1302的头文件定义

#ifndef __DS1302_H_
#define __DS1302_H_

//---包含头文件---//
#include<reg52.h>
#include<intrins.h>

//---重定义关键词---//
#ifndef uchar
#define uchar unsigned char
#endif

#ifndef uint 
#define uint unsigned int
#endif

//---定义ds1302使用的IO口---//
sbit DSIO=P3^4;
sbit RST=P3^5;
sbit SCLK=P3^6;

//---定义全局函数---//
void Ds1302Write(uchar addr, uchar dat);
uchar Ds1302Read(uchar addr);
void Ds1302Init();
void Ds1302ReadTime();

//---加入全局变量--//
extern uchar TIME[7];	//加入全局变量

#endif

DS1302的寄存器

控制寄存器

控制字节的最高有效位(位7)必须是逻辑1,如果它为0,则不能把数据写入DS1302中;
位6(D 6)如果为0,则表示存取日历时钟数据,为1表示存取RAM数据;
位5至位1指示操作单元的地址;
最低有效位(D 0 ),如为0表示要进行写操作,为1表示进行读操作,控制字节总是从最低位开始输出。格式如下:

D 7D 6D 5D 4D 3D 2D 1D 0
1RAM/CKA 4A 3A 2A 1A 0RD/W

日历、时钟寄存器

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

寄存器名称取值范围D 7D 6D 5D 4D 3D 2D 1D 0
秒寄存器00~59CH秒的十位秒的个位
分寄存器00~590分的十位分的个位
小时寄存器01~12 或 00~2312/240A/PHR小时的个位
日寄存器01~3100日的十位日的个位
写保护寄存器WP0000000

注:
1.数据都是以BCD码形式
2.小时寄存器的D 7位为12小时制或24小时制的选择位,当为’1‘时选择12小时制,当为’0‘时选24小时制。
    12小时制时,D 5位为’1‘是上午,’0‘是下午;D 4是小时的十位。
    24小时制时,D5、D4位为小时的十位。
3.秒寄存器中的CH位为时钟暂停位,当为’1‘时钟暂停,为’0‘时钟启动。
4.写保护位寄存器中的WP为写保护位,当WP=1,写保护,当WP=0,未写保护;
当对日历、时钟寄存器或片内RAM进行写时WP应清零,当对日历、时钟寄存器或片内RAM进行读时WP一般置1

DS1302初始化代码

void Ds1302Init()
{
	uchar n;
	Ds1302Write(0x8E,0X00);		 //禁止写保护,就是关闭写保护功能  (写保护位地址,关闭)
	for (n=0; n<7; n++)//写入7个字节的时钟信号:分秒时日月周年
	{
		Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);	
	}
	Ds1302Write(0x8E,0x80);		 //打开写保护功能
}

BCD码

用4位 二进制数 来表示1位 十进制数 中的0~9这10个数码,是一种二进制的数字编码形式,用 二进制编码的十进制 代码。. BCD码这种编码形式利用了四个位元来储存一个十进制的数码,使 二进制 和 十进制 之间的转换得以快捷的进行。
二进制码转换为BCD码的方法:
4位二进制码大于1001时,加6(0110)
如:BCD码00001100的二进制码为:
0000 1100+6=0001 0010

读取时钟信息

void Ds1302ReadTime()
{
	uchar n;
	for (n=0; n<7; n++)   //读取7个字节的时钟信号:分秒时日月周年
	{
		TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);
	}		
}

 片内RAM

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

RST是复位/片选线,通过把RST输入驱动置高电平来启动所有的数据传送。RST输入有两种功能:

首先,RST接通控制逻辑,允许地址/命令序列送入移位寄存器;

其次,RST提供终止单字节或多字节数据的传送手段。当RST为高电平时,所有的数据传送被初始化,允许对DS1302进行操作。

如果在传送过程中RST置为低电平,则会终止此次数据传送,I/O引脚变为高阻态。上电运行时,在Vcc≥2.5V之前,RST必须保持低电平。只有在SCLK为低电平时,才能将RST置为高电平。

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

单字节读写

DS1302 是通过SPI串行总线跟单片机通信的,当进行一次读写操作时最少得读取两个字节,第一个字节是控制字节,就是一个命令,告诉DS1302是读还是写操作,是对RAM还是对CLOK寄存器操作。第二个字节就是要读或写的数据了。

单字节读写
只有在SCLK(时钟)为低电平时,才能将CE(P 35)置为高电平。所以在进行操作之前先将SCLK(P 36)置低电平,然后将CE置为高电平,接着开始在IO(P 34)上面放入要传送的电平信号,然后跳变SCLK。数据在SCLK上升沿时,DS1302读写数据,在SCLK下降沿时,DS1302放置数据到IO上。

对DS1302的操作主要步骤:

  1.去掉写保护;
  2.进行时间初始值的设置;
  3.加上写保护;
  4.不断的读取时间、日期信息并进行显示。

前三步工作只需要进行一次,可以放在初始化中进行。

涉及的操作:
写操作(写地址+写数据)、读操作(写地址+读数据)、显示时间和日期

 写函数代码        向DS1302命令(写地址+写数据)

void Ds1302Write(uchar addr, uchar dat)
{
	uchar n;
	RST = 0;	 //最开始将CE置为低电平
	_nop_();
	SCLK = 0;	//先将SCLK置低电平。
	_nop_();
	RST = 1; 	//然后将RST(CE)置高电平。
	_nop_();
	for (n=0; n<8; n++)	//开始传送八位地址命令,写数据
	{
		DSIO = addr & 0x01;	//数据从低位开始传送,取出最低位
		addr >>= 1;
		SCLK = 1;	//数据在上升沿时,DS1302读取数据
		_nop_();
		SCLK = 0;
		_nop_();
	}
	for (n=0; n<8; n++)	// 写入8位数据,读数据
	{
		DSIO = dat & 0x01;
		dat >>= 1;
		SCLK = 1;	//数据在上升沿时,DS1302读取数据
		_nop_();
		SCLK = 0;
		_nop_();	
	}		 
	RST = 0;	//传送数据结束
	_nop_();
}

读函数代码 读取一个地址的数据

uchar Ds1302Read(uchar addr)
{
	uchar n,dat,dat1;
	RST = 0;	//最开始CE置低电平
	_nop_();
	SCLK = 0;	//先将SCLK置低电平。
	_nop_();
	RST = 1;	//然后将RST(CE)置高电平。
	_nop_();
	for(n=0; n<8; n++)	//开始传送八位地址命令
	{
		DSIO = addr & 0x01;	//数据从低位开始传送
		addr >>= 1;
		SCLK = 1;	//数据在上升沿时,DS1302读取数据
		_nop_();
		SCLK = 0;	//DS1302下降沿时,放置数据
		_nop_();
	}
	_nop_();
	for(n=0; n<8; n++)	//读取8位数据
	{
		dat1 = DSIO;	//从最低位开始接收
		dat = (dat>>1) | (dat1<<7);
		SCLK = 1;
		_nop_();
		SCLK = 0;	//DS1302下降沿时,放置数据
		_nop_();
	}
	RST = 0;
	_nop_();	//以下为DS1302复位的稳定时间,必须的。
	SCLK = 1;
	_nop_();
	DSIO = 0;
	_nop_();
	DSIO = 1;
	_nop_();
	return dat;	
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

四相机设计实现全向视觉感知的开源空中机器人无人机

开源空中机器人 基于深度学习的OmniNxt全向视觉算法OAK-4p-New 全景硬件同步相机 机器人的纯视觉避障定位建图一直是个难题&#xff1a; 系统实现复杂 纯视觉稳定性不高 很难选到实用的视觉传感器 为此多数厂家还是采用激光雷达的定位方案。 OAK-4p-New 为了弥合这一差距…

突破续航瓶颈:数字样机技术引领新能源汽车复合制动新方向

随着我国经济快速发展和人民生活水平不断提升&#xff0c;汽车保有量截至2023年9月底就已达到了3.3亿&#xff0c;同比增长6.32%。庞大的汽车保有量对我国的环境和能源都产生了巨大的压力&#xff0c;具备节能环保优势的新能源汽车对于有效解决环境恶化和能源危机问题具有重要意…

基于股票日频 K 线的自动因子挖掘实践

遗传算法最初由美国密歇根大学的 J.Holland 提出&#xff0c;是一种通过模拟自然界生物进化的过程来搜索最优解的算法&#xff0c;应用于量子计算、电子设计、游戏比赛等多种场景。 以大家熟知的 python gplearn 为例&#xff0c;它就是一款基于遗传算法开发的数据分析工具&am…

考前96天 学习巩固 计算机、数学、英语

2024年12月24日到2025年3月29日共有 96​ 天 一、计算机基础 回顾&#xff1a; 三大思维&#xff1a; 数学 推理/理论 物理 证实/实验 计算机 构造/计算 本质——》抽象/自动化 计算复杂性&#xff1a;空间复杂性、时间复杂性 计算机系统的组成&#xff1a; 1️⃣硬件…

Artec Space Spider助力剑桥研究团队解码古代社会合作【沪敖3D】

挑战&#xff1a;考古学家需要一种安全的方法来呈现新出土的陶瓷容器&#xff0c;对比文物形状。 解决方案&#xff1a;Artec Space Spider, Artec Studio 效果&#xff1a;本项目是REVERSEACTION项目的一部分&#xff0c;旨在研究无国家社会中复杂的古代技术。研究团队在考古地…

云原生服务网格Istio实战

基础介绍 1、Istio的定义 Istio 是一个开源服务网格&#xff0c;它透明地分层到现有的分布式应用程序上。 Istio 强大的特性提供了一种统一和更有效的方式来保护、连接和监视服务。 Istio 是实现负载平衡、服务到服务身份验证和监视的路径——只需要很少或不需要更改服务代码…

《Cocos Creator游戏实战》非固定摇杆实现原理

为什么要使用非固定摇杆 许多同学在开发摇杆功能时&#xff0c;会将摇杆固定在屏幕左下某一位置&#xff0c;不会让其随着大拇指触摸点改变&#xff0c;而且玩家只有按在了摇杆上才能移动人物&#xff08;触摸监听事件在摇杆精灵上)。然而&#xff0c;不同玩家的大拇指长度不同…

智能座舱进阶-应用框架层-Jetpack主要组件

Jetpack的分类 1. DataBinding&#xff1a;以声明方式将可观察数据绑定到界面元素&#xff0c;通常和ViewModel配合使用。 2. Lifecycle&#xff1a;用于管理Activity和Fragment的生命周期&#xff0c;可帮助开发者生成更易于维护的轻量级代码。 3. LiveData: 在底层数据库更…

登山第十六梯:深度恢复——解决机器人近视问题

文章目录 一 摘要 二 资源 三 内容 一 摘要 深度感知是基于 3D 视觉的机器人技术的一个重要问题。然而&#xff0c;现实世界的主动立体或 ToF 深度相机经常会产生嘈杂且深度不完整&#xff0c;从而成为机器人性能的瓶颈。在这项工作中&#xff0c;提出了 一个基于学习的立体…

【Jenkins】持久化

文章目录 持续集成CI持续部署CD部署部署到linux服务器 持续集成好处&#xff1a; 持续集成CI 持续集成&#xff08;Continuous integration&#xff0c;简称CI&#xff09;指的是频繁地&#xff08;一天多次&#xff09;将代码集成到主干。 持续集成的目的就是让产品可以快速…

小红书飞书素材库 | AI改写 | 无水印下载 | 多维表格 | 采集同步 | 影刀RPA

小红书飞书素材库 | AI改写 | 无水印下载 | 多维表格 | 采集同步 | 影刀RPA 模板准备 进入【小红书】素材采集库_荷逸模板&#xff0c;点击使用模板 创建文档应用 在开发者后台 - 飞书开放平台创建 企业自建应用 (需要账号有相应的权限, 如果没有权限向管理员申请) 获取 Ap…

layui动态拼接生成下拉框验证必填项失效问题

利用 jQuery 动态拼接下拉框时&#xff0c;lay-verify"required" 失效了&#xff0c;有以下几种原因。 1. <form></form>标签 加入 layui 类&#xff0c;class"layui-form" 。提交按钮上加自动提交&#xff0c;lay-submit ""; 。需…

合合信息:探索视觉内容安全新前沿

2024年12月13日-15日&#xff0c;中国图象图形学学会在杭州召开。大会期间&#xff0c;来自合合信息的图像算法研发总监郭丰俊进行了主题为“视觉内容安全技术的前沿进展与应用”的演讲&#xff0c;介绍了视觉内容安全问题&#xff0c;并总结了现今的技术发展&#xff0c;对我很…

阿里云cdn稳定吗?

阿里云CDN&#xff08;内容分发网络&#xff09;是阿里云提供的一项全球加速服务&#xff0c;它的稳定性通常被认为是非常高的&#xff0c;尤其在国内市场。九河云给大家总结了阿里云CDN的稳定性情况&#xff1a; 1. 全球节点覆盖广泛 阿里云CDN在全球范围内拥有数百个加速节…

本地部署webrtc应用怎么把http协议改成https协议?

环境&#xff1a; WSL2 Ubuntu22.04 webrtc视频聊天应用 问题描述&#xff1a; 本地部署webrtc应用怎么把http协议改成https协议&#xff1f; http协议在安卓手机浏览器上用不了麦克风本&#xff0c;来地应用webrtc 本来是http协议&#xff0c;在安卓手机上浏览器不支持使…

Qt creator ,语言家功能缺失解决方法

1、找到工具->外部->配置 2、添加目录&#xff0c;双击命名语言家 3、在语言家目录下&#xff0c;添加工具 双击重命名lupdate&#xff0c;即更新翻译 %{CurrentDocument:Project:QT_INSTALL_BINS}\lupdate%{CurrentDocument:Project:FilePath}%{CurrentDocument:Projec…

用于UISystem的工具集

简介&#xff1a;上篇文章用于管理Unity中UGUI的工具系统UISystem-CSDN博客讲了UISystem&#xff0c;为了更加方便使用&#xff0c;我给他写了一个编辑器工具&#xff0c;下面展示代码和使用说明&#xff0c;具体详情不难看一下就看懂了。 一、代码部分 using QFramework; us…

onlyoffice连接器 二次开发 合同等制式模板化技术开发方案【三】

一、期望效果 目前曹瑞版本onlyoffice已经实现&#xff1a;书签模式 和 控件模式&#xff0c;用以支持该方案。 【图1】字段绑定 【图2】模板发起 【图3】接入表单 思路讲解&#xff1a; 业务系统开发中通常希望能够通过绑定form字段给word&#xff0c;从而达到双向同步效果&am…

WPF+MVVM案例实战与特效(四十五)- 打造优雅交互:ListBox 的高级定制与行为触发(侧边菜单交互面板)

文章目录 1、引言2、案例效果3、案例实现1、依赖安装2、文件创建3、代码实现1、依赖引用与上下文2、个性化视觉效果:自定义 ItemContainerStyle3、页面样式与布局完整代码4、ViewModel 逻辑实现5、子界面代码:3、实现效果4、源代码获取5、总结1、引言 在WPF应用程序开发中,…

【优选算法】复写零

链接&#xff1a;1089. 复写零 - 力扣&#xff08;LeetCode&#xff09; 算法原理&#xff1a; 解法&#xff1a;双指针算法 根据“异地”操作&#xff0c;然后优化成双指针下的“就地”操作 1.先找到最后一个“复写”的数 1.先判断 cur 位置的值 2.决定 dest 向后移动一步或…