时钟芯片DS1302时序分析、读写代码解析

2023-05-16

1、DS1302芯片原理图分析

在这里插入图片描述

引脚名称功能
X1、X2外接32.768kHz 晶振,用于内部计时
SCLK和主控通信的时钟线
I/O数据输入输出引脚
CE使能引脚
VCC1接电池供电,保证主板掉电时间能继续走
VCC2主板的电源供电

(1)DS1302芯片的通信接口是SPI协议接口,只有一根数据线,所以是半双工通信;
(2)SPI协议可参考博客:《SPI协议详解(Standard SPI、Dual SPI和Queued SPI)》;

2、芯片寄存器地址定义

在这里插入图片描述

(1)与DS1302通信的大致过程:发送命令码表示本次的操作,发送要读取或者写入的数据;
(2)比如:要读取秒就先发送0x81命令码,然后从数据线上接收8bit数据来获取秒数;要写入秒就先发送0x80命令码,然后往数据线上依次写8bit数据来设置秒;
(3)在DS1302中,时间是以8421BCD码进行保存的,简单一点可以理解成低4bit表示一个含义,高4bit表示一个含义;

3、命令字解析日期在芯片内的保存格式

不同的bit含义
bit7必须是逻辑 1. 如果是 0,则禁止对 DS1302写入
bit60表示读写日期,1表示操作DS1302内部31字节的RAM
bit5-bit1寄存器地址
bit00表示写入,1表示读取

4、读写时序分析在这里插入图片描述

(1)起始条件:使能线从低变高,在整个通讯期间使能线必须保持高电平;
(2)先发送命令字,表示此次是什么操作;
(3)从数据线写入/读取数据;
总结:CE线变高表示通信周期的开始;在每个上升沿,DS1302从数据线读取数据;在每个下降沿,DS1302往数据线写入数据;

5、写芯片寄存器的函数

// 向ds1302的内部寄存器addr写入一个值value
void ds1302_write_reg(unsigned char addr, unsigned char value)
{
	unsigned char i = 0;
	unsigned char dat = 0;

	// 第1部分: 时序起始
	SCLK = 0;
	delay();
	RST = 0;
	delay();
	RST = 1;  		// SCLK为低时,RST由低变高,意味着一个大的周期的开始
	delay();
	// 第2部分: 写入第1字节,addr
	//在每个上升沿之前,把要发送给DS1302的数据放到数据线上
	for (i=0; i<8; i++)
	{
		dat = addr & 0x01;	 	// 从低位开始传输的
		DSIO = dat;	 			// 把要发送的bit数据丢到IO引脚上去准备好
		SCLK = 1;		 		 // 制造上升沿,让DS1302把IO上的值读走
		delay();				// 读走之后,一个小周期就完了
		SCLK = 0;				// 把SCLK拉低,是为了给下一个小周期做准备
		delay();
		addr >>= 1;	   			// 把addr右移一位
	}
	// 第3部分: 写入第2字节,value
	for (i=0; i<8; i++)
	{
		dat = value & 0x01;	 	// SPI是从低位开始传输的
		DSIO = dat;	 			// 把要发送的bit数据丢到IO引脚上去准备好
		SCLK = 1;		 		// 制造上升沿,让DS1302把IO上的值读走
		delay();				// 读走之后,一个小周期就完了
		SCLK = 0;				// 把SCLK拉低,是为了给下一个小周期做准备
		delay();
		value = value >> 1;	   	// 把addr右移一位
	}
	// 第4部分: 时序结束
	SCLK = 0;				  	// SCLK拉低为了后面的周期时初始状态是对的
	delay();
	RST = 0;					// RST拉低意味着一个大周期的结束
	delay();
}

6、读芯片寄存器的函数

// 从ds1302的内部寄存器addr读出一个值,作为返回值
unsigned char ds1302_read_reg(unsigned char addr)
{
	unsigned char i = 0;
	unsigned char dat = 0; 		// 用来存储读取到的一字节数据的
	unsigned char tmp = 0;

	// 第1部分: 时序起始
	SCLK = 0;
	delay();
	RST = 0;
	delay();
	RST = 1;  		// SCLK为低时,RST由低变高,意味着一个大的周期的开始
	delay();
	// 第2部分: 写入要读取的寄存器地址,addr
	//在每个上升沿之前,把要发送给DS1302的数据放到数据线上
	for (i=0; i<8; i++)
	{
		dat = addr & 0x01;	 	// 从低位开始传输的
		DSIO = dat;	 			// 把要发送的bit数据丢到IO引脚上去准备好
		SCLK = 1;		 		// 制造上升沿,让DS1302把IO上的值读走
		delay();				// 读走之后,一个小周期就完了
		SCLK = 0;				// 把SCLK拉低,是为了给下一个小周期做准备
		delay();
		addr >>= 1;	   			// 把addr右移一位
	}
	// 第3部分: 读出一字节DS1302返回给我们的值
	dat = 0;
	for (i=0; i<8; i++)
	{
	// 在前面向ds1302写入addr的最后一个bit后,ds1302就会将读取到的寄存器值
	// 的第一个bit放入到IO引脚上,所以我们应该先读取IO再制造下降沿然后继续
	// 读取下一个bit
		tmp = DSIO;
		dat |= (tmp << i);		// 读出来的数值是低位在前的
		SCLK = 1;  				// 由于上面SCLK是低,所以要先拉到高
		delay();
		SCLK = 0;				// 拉低SCLK制造一个下降沿,让DS1302往数据线放下一个数据
		delay();
	}
	// 第4部分: 时序结束
	SCLK = 0;				  	// SCLK拉低为了后面的周期时初始状态是对的
	delay();
	RST = 0;					// RST拉低意味着一个大周期的结束
	delay();

	// 第5部分:解决读取时间是ff的问题,如果读取时间没有FF乱码,可不加
	DSIO = 0;

	return dat;
}

推荐

给大家推荐一个学校嵌入式知识的网站,博主在大学时候学习嵌入式知识、找工作的时候都在用这个网站,网站里有C语言、Linux等等的笔试题、面试常问问题等等知识,无论是学习基础知识、面试刷题、交流工作经验都是不错的选择。大家一起进步,欢迎留言交流。
链接:学习神器跳转
在这里插入图片描述
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

时钟芯片DS1302时序分析、读写代码解析 的相关文章

  • 时钟芯片DS1302时序分析、读写代码解析

    1 DS1302芯片原理图分析 引脚名称功能X1 X2外接32 768kHz 晶振 xff0c 用于内部计时SCLK和主控通信的时钟线I O数据输入输出引脚CE使能引脚VCC1接电池供电 xff0c 保证主板掉电时间能继续走VCC2主板的电
  • DS1302时钟芯片(SPI协议)

    DS1302时钟芯片 DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片 它可以对年 月 日 周 时 分 秒进行计时 xff0c 且具有闰年补偿等多种功能 可以把该芯片看成一个小型的单片机 xff0c 其内部
  • 【mcuclub】时钟模块DS1302

    一 实物图 二 原理图 编号名称功能1VCC2双供电配置中的主电源供应引脚 DS1302工作于 VCC1和VCC2中较大者 当VCC2比VCC1高0 2V 时 xff0c VCC2 给 DS1302供电 当VCC1比VCC2高时 VCC1给
  • 1.0 DS1302-外部RTC

    一 综述 DS1302是美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片 xff0c 因为应用非常广泛 xff0c 结果就导致了大量的国产仿制品 xff0c GC1302是一款国产DS1302仿制芯片 xff0c 使用方法
  • DS1302时钟芯片介绍及使用教程

    1 芯片简介 DS1302 涓流充电计时芯片包含一个实时时钟 日历和 31 字节的静态 RAM 通过简单的串行接口与微处理器通讯 这个实时时钟 日历提供年月日 时分秒信息 对于少于 31 天的月份月末会自动调整 还有闰年校正 由于有一个 A
  • ds1302时钟芯片工作原理引脚电路图及功能

    资源获取码 xff1a aaaa DS1302时钟实用仿真图 上面仿真图功能描述 xff1a 1 能读取DS1302数据 xff0c 并显示在数码管上面 2 带按键设置功能 xff0c 可以设置DS1302时分秒数据 3 带倒计时功能 xf
  • 时钟芯片DS1302异常

    异常现象 xff1a DS1302时间不走时 xff0c 秒位是一个大于60的错误数字 分析原因 xff1a DS1302受到干扰 xff0c 软件仿真发现DS1302的秒寄存器最高位被置为1 xff08 为时钟停止位 xff09 解决方法
  • FPGA学习-UART串口发送单字节(UART时序分析+真正的FPGA设计看图写代码)

    首先看UART发送时序图 xff1a 要发送一个完整字节 xff0c 需要 1位起始位 43 8位数据位 43 1位停止位 xff0c 图上的第11位 xff0c 是确认一个字节发送完的一位 重点是每一位之间的发送时间需要保持一致 xff0
  • 基于stm32f103zet6的DS1302学习

    由于硬件出了问题 xff0c 也就是外部低速晶振没用 xff0c 震不起来 xff0c 然后查看了网上的帖子 xff0c STM32的RTC果然口碑不怎么样 xff0c 所以果断换DS1302 xff0c 在移植的过程中还算顺利 xff0c
  • Arduino驱动DS1302显示时钟

    Arduino驱动DS1302显示时钟 前言电气参数经典应用电路接线程序实验结果 前言 目前有许多流行的串行时钟电路 xff0c 例如 DS1302 xff0c DS3231 xff0c DS1307 xff0c PCF8485 等 它们由
  • 理解FPGA中的亚稳态

    一 前言 大家应该经常能听说到亚稳态这个词 亚稳态主要是指触发器的输出在一段时间内不能达到一个确定的状态 过了这段时间触发器的输出随机选择输出0 1 这是我们在设计时需要避免的 本文主要讲述了FPGA中的亚稳态问题 可以帮助大家更好地理解亚
  • 时序分析 30 金融资产预测 - 蒙特卡洛模拟

    金融资产预测 蒙特卡洛模拟 商业经营活动中经常需要预测其收入 成本和利润 企业中的金融团队很可能会被要求构建金融模型进行场景分析 例如在不同的假设的情况下分析最好的情况 正常情况和最差的情况 这样做的目的主要是为管理层提供在不同的市场情况下
  • 从CMOS到触发器(二)

    1 双稳态器件 双稳态器件是指稳定状态有两种 一种是0 一种是1的器件 双稳态器件是存储器件的基本模块 双稳器件的的一种电路结构是 交叉耦合反相器 结构 如下图所示 连个反相器连在一起 这就构成了一个双稳态器件 为什么是双稳态呢 我们现在就
  • STM32F103操作DS1302时钟芯片串口显示(标准库和HAL库)

    目录 DS1302的性能指标 DS1302的寄存器及片内RAM 标准库实现 HAL库实现 源码链接 单片机型号 STM32F103C8T6 在日常生活中 很多情况下会需要使用时间 单片机中虽然也是有定时器但并不能较为准备的实现计时功能 而且
  • [嵌入式开发模块]DS3231时钟芯片 驱动程序

    刚刚写完DS3231时钟芯片的驱动程序 这里开源出来供大家使用 需要的自取 先简单介绍下这个芯片 然后直接给驱动代码以及示例代码 DS3231简介 简介 DS3231是一款低成本 高精度I2C实时时钟 RTC 具有集成的温补晶体振荡器 TC
  • 深入讲解set_multicycle_path多周期约束---实战篇

    设计一个FIFO并且在VIVADO中进行时序约束和时序分析 1 demo背景 设计一个异步的FIFO 2 FIFO时钟的周期约束 create clock period 2 500 name fifo wr clk waveform 0 1
  • 时序基本介绍——Jitter与Skew区别

    在时序分析当中 有些基础概念还是要认真了解的 时钟抖动 Clock Jitter 和时钟偏移 Clock Skew 经常容易混淆 时序设计中 对于时钟的要求是非常严格的 因此FPGA中也有专用的时钟管脚 对应着专用的时钟区域BUFG BUF
  • 跨时钟域信号传输(一)——控制信号篇

    1 跨时钟域与亚稳态 跨时钟域通俗地讲 就是模块之间有数据交互 但是模块用的不是同一个时钟进行驱动 如下图所示 左边的模块1由clk1驱动 属于clk1的时钟域 右边的模块2由clk2驱动 属于clk2的时钟域 当clk1比clk2的频率高
  • 时序分析基本概念之线负载模型的选择方式

    对于跨越边界的net 我们除了选用合适的wire load model以外 还需要选择合理的wire load mode wire load mode主要有三种top enclosed 和segmented 这三种模式所选取的wire lo
  • 输入延时(Input Delay)与输出延时(Output Delay)

    一 设置输入延时 Input Delay 1 不同的路径需要使用不同的约束 2 输入延时的定义 由下图可以看出Input Delay是以上游芯片的时钟发送沿为参考 上游的输出数据到达FPGA的外部输入端口之间的延迟 输入延迟 input d

随机推荐

  • 使用Python和C++的写数据结构和算法

    使用Python和C 43 43 的写数据结构和算法 1 数据结构和算法简介2 数据结构2 1 堆栈2 2 队列2 3 散列表2 4 二叉树2 5 线性搜索2 6 二进制搜索2 7 递归2 8 递归二进制搜索2 9 QuickSort2 1
  • Hive与Hbase的区别与联系

    一 概念 1 xff0c Hive hive是基于Hadoop的一个数据仓库工具 xff0c 用来进行数据提取 转化 加载 xff0c 这是一种可以存储 查询和分析存储在Hadoop中的大规模数据的机制 hive数据仓库工具能将结构化的数据
  • ros 命名空间

    文章目录 全局命名空间相对名称私有名称节点命名空间 全局命名空间 rosout前面的反斜杠 表明该节点名称属于全局命名空间 之所以叫做全局名称因为它们在任何地方 xff08 包括代码 命令行工具 图形界面工具等的任何地方 xff09 都可以
  • DenseNet及torchvision中的实现

    ResNets Highway Networks Stochastic depth DenseNet他们的共同的特点是 They create short paths from early layers to later layers 他们
  • Xmanager5用Xstart连接CentOS7

    今天安装了Xmanager5 xff0c 原本已经有了Xshell5 xff0c 没有冲突 xff0c 测试Xftp Xshell使用上均无问题 到了Xstart却出错了 xff0c 客户端设置完后点击运行 xff0c 出现报错 查找了许多
  • CAN总线入门学习(一)

    今天带着大家学习 xff0c CAN总线 1 概要 本资料是面向 CAN 总线初学者的 CAN 入门 对 CAN 是什么 CAN 的特征 标准规格下的位置分布等 CAN 的概要及 CAN 的协议进行了说明 2 使用注意事项 本资料对博世 B
  • java调用接口

    long dateStr 61 System currentTimeMillis 1000 String url 61 34 34 创建参数 JSONObject jsonObject 61 new JSONObject jsonObjec
  • 英特尔NUC 11板载USB3.0座子接口定义

    规格书没有座子PIN定义 xff0c 于是我找技术支持提供了定义
  • 宝塔配置Workerman

    map span class token variable http upgrade span span class token variable connection upgrade span span class token punct
  • px4飞控和机载电脑通信:机载电脑接收飞控的自定义px4消息

    机载电脑接收飞控的自定义px4消息 mavros功能包能够实现px4飞控和机载电脑之间的实时通信 而对于大部分的消息通信mavros都已经有相应接口可以调用 xff0c 例如 xff1a 位置 期望位置 速度 四元素等消息都可以通过C 43
  • px4飞控和机载电脑通信:飞控接收机载电脑的自定义mavlink消息

    前面一篇讲了机载电脑怎么接受飞控的px4消息 这一篇讲解如何飞控怎么接收从机载电脑传过来的消息 分成两部分 机载电脑发送消息 飞控接收消息 pixhawk版本 pixhawk4 px4版本 1 11 2 ros版本 1 14 10 机载电脑
  • 多无人机通信-路由器实现

    多无人机通信 多无人机之间相互通信是实现编队飞行的基础 而想要实现通信就需要组建网络 在网络之间实现数据信息的互相传输 按结构分成两大类 中心节点网络和无中心节点网络 我们这里所用的路由器就是中心节点网络 所有的数据的传输都要经过中心节点
  • js做文件分片上传

    js做文件分片上传 分片上传视频 xff0c 图片 xff0c 音频 xff0c 转base64 64 Layout 61 null lt DOCTYPE html gt lt html gt lt head gt lt meta name
  • 锐捷交换机基本配置命令

    锐捷交换机基本配置命令 锐捷交换机 xff0c 忘记colsole口的en密码 xff0c 重启交换机 xff0c 立即按ctrl 43 c xff0c 进入bootloader 菜单 xff0c 再按ctrl 43 q xff0c 然后输
  • 驱动设计思想(机制、策略、分离、分层)

    1 机制和策略 1 机制就是提供什么功能 xff0c 策略就是怎么使用这些功能 在编写驱动时需要在编程时间和驱动的灵活性之间取一个可接受的折中 xff0c 驱动提供机制 xff0c 尽量不提供策略 xff0c 策略让上层应用去做 2 机制和
  • debian重启没办法进入图形界面

    在遇到重启有时候没办法进入图形界面的情况下 xff0c 你可以考虑是自己电脑或者服务器显卡的问题 xff0c 如果你进入了命令行的界面 xff0c 执行 etc init d kdm restart 可以重新启动图形界面的话那么就可以肯定时
  • linux线程详解:线程概念、线程调度、线程安全、线程模型

    1 线程与进程的区别 1 线程是轻量级的进程 xff0c 是程序执行流的最小单位 xff1b 2 进程是资源分配的最小单位 xff0c 线程是调度的最小单位 xff1b 3 进程可以创建线程 xff0c 线程不可以创建进程 xff1b 4
  • ARM架构的中断机制详解(S5PV210芯片)

    1 中断介绍 1 中断是指计算机运行过程中 xff0c 出现某些意外情况需主机干预时 xff0c 机器能自动停止正在运行的程序并转入处理新情况的程序 xff0c 处理完毕后又返回原被暂停的程序继续运行 2 中断是为了实现宏观上的并发 比如我
  • USB接口WIFI(MT7601芯片)的驱动源码移植过程详解(驱动源码编译、wpa_supplicant工具交叉编译、文件系统移植)

    1 MT7601的移植步骤 1 确认你的WT7601网卡硬件是正常的 xff1b 2 修改驱动源码 xff0c 依赖内核源码树编译并加载 xff1b 3 交叉编译wpa supplicant工具 xff0c 移植到根文件系统里 xff1b
  • 时钟芯片DS1302时序分析、读写代码解析

    1 DS1302芯片原理图分析 引脚名称功能X1 X2外接32 768kHz 晶振 xff0c 用于内部计时SCLK和主控通信的时钟线I O数据输入输出引脚CE使能引脚VCC1接电池供电 xff0c 保证主板掉电时间能继续走VCC2主板的电