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

这篇具有很好参考价值的文章主要介绍了时钟芯片DS1302时序分析、读写代码解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、DS1302芯片原理图分析

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

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

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

2、芯片寄存器地址定义

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

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

3、命令字解析

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

4、读写时序分析

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

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;
}

到了这里,关于时钟芯片DS1302时序分析、读写代码解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • DS1302时钟模块

                                                                 DS1302结构原理图 DS1302涓流充电计时芯片实时时钟/日历和31字节的静态RAM,通过IO口与微机处理器通讯,该实时时钟/日历提供年月日和时分秒星期,还具备月份闰平年自动校正。其信息与外部的传输由CE、I

    2024年02月05日
    浏览(41)
  • DS1302实时时钟

    实时时钟就是一个可以用来计时的芯片,Y3是一个晶振,提供一个时钟基准给DS1302,让DS1302每一秒走时一次。有的实时时钟不需要外接晶振,直接在内部集成了,但蓝桥杯板载的有。 使用的是3线SPI协议,与前面的单总线和IIC协议不一样 VCC1:备用电源,可以在板子断电是依然

    2024年02月05日
    浏览(42)
  • 【mcuclub】时钟模块DS1302

      编号 名称 功能 1 VCC2 双供电配置中的主电源供应引脚。DS1302工作于 VCC1和VCC2中较大者.当VCC2比VCC1高0.2V 时,VCC2 给 DS1302供电。当VCC1比VCC2高时, VCC1给DS1302供电 2 X1 32.768kHz晶振引脚 3 X2 4 GND 电源地 5 CE 使能引脚。输入信号,在读、写数据期间,必须为高。该引脚有两个功能:第

    2024年04月09日
    浏览(42)
  • 51单片机——DS1302时钟

    目录 1.前言 1.1 实验现象 2. DS1302的介绍 2.1 DS1302的引脚定义以及应用电路 2.2 DS1302内部结构 2.21  DS1302内部特殊寄存器 2.22 时序 2.3 BCD码 3.源码 3.1 main.c 3.2 DS1302.c 3.3 DS1302.h 3.4 LCD1602.c 3.5 Delay.c 3.6 Delay.h 之前我们已经使用了定时器做过了简易的时钟了,为什么还要用DS1302制作时钟

    2024年01月16日
    浏览(51)
  • 『51单片机』 DS1302时钟

    🚩 WRITE IN FRONT 🚩     🔎 介绍:\\\"謓泽\\\"正在路上朝着\\\"攻城狮\\\"方向\\\"前进四\\\" 🔎 🏅 荣誉:2021|2022年度博客之星物联网与嵌入式开发TOP5|TOP4、2021|2222年获评百大博主、华为云享专家、阿里云专家博主、掘金优秀创作者、全网粉丝量7w+、全网访问量100w+🏅 🆔 本文章内容由 謓泽

    2024年02月08日
    浏览(54)
  • 实时时钟芯片DS1307的使用及驱动代码

    DS1307实时时钟芯片的介绍及驱动代码 目录 一、DS1307是什么? 二、DS1307的功能 三、DS1307的寄存器 四、代码 1.读出数据 2.写入数据 3.时间初始化设置 4.获取当前时间 五、注意事项 总结 DS1307是一款基于IIC总线接口的实时时钟芯片,可以独立于MCU工作,芯片具有备用电源自动切

    2024年02月05日
    浏览(42)
  • 51单片机——DS1302可调时钟

    目录 一、功能介绍 二、主要模块介绍 2.1 DS1302模块 2.1.1 DS1302芯片介绍 2.1.2  DS1302的使用 三、程序汇总 3.1测试文件test.c 3.2 LCD1602模块程序 3.2.1 LCD1602.h 3.2.2 LCD1602.c 3.3 DS1302模块程序 3.3.1 DS1302.h 3.3.2 DS1302.c 3.4 独立按键模块程序 3.4.1 Independentkey.h 3.4.2 Independentkey.c 3.5 T0定时器模

    2024年02月02日
    浏览(71)
  • 【单片机】13-实时时钟DS1302

    (rtc for real time clock) (1)时间点和时间段的概念区分 (2)单片机为什么需要时间点【一定的时间点干什么事情】 (3)RTC如何存在于系统中(单片机内部集成 or 单片机外部扩展【DS1302】) 1.数据手册 DS1302中文数据手册 - 豆丁网 2. SPI数字接口 访问 SPI通信协议【DS1302也使用

    2024年02月07日
    浏览(47)
  • stm32-DS1302时钟模块驱动

    DS1302是时钟芯片 DS1302的寄存器地址定义如下:   单字节读写时序如下图,均为上升沿触发:  由于DS1302时钟芯片不是常用的SPI协议,与SPI协议很像,所以需要初始化普通GPIO口手工实现该协议通信。 设置分别连接DS1302的CE、SCLK、Data口的GPIO,PB8PB9PB10: 打开gpio.h文件,定义结

    2024年02月02日
    浏览(41)
  • DS1302芯片介绍

        低功耗时钟芯片DS1302可以对年、月、日、时、分、秒进行计时,且具有闰年补偿等多种功能。     DS1302的性能特性:     ·实时时钟,可对秒、分、时、日、周、月以及带闰年补偿的年进行计数;     ·用于高速数据暂存的31×8位RAM;     ·最少引脚的串行I/O;     ·

    2024年02月02日
    浏览(72)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包