DS1302简介

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

  • 每天的天数和闰年的天数可以自动调整
  • 可通过AM/PM指示决定采用24或12小时格式
  • 保持数据和时钟信息时功率小于 1mW
  • 宽范围的工作电压:2.0-5.5V
  • 读写时钟或RAM数据时有单字节或多字节(脉冲串模式)数据传送方式

硬件图

引脚 说明
X1/X2 32.768KHz 晶振管脚
VCC2 工作电源
GND 电源地
VCC1 后备电源
SCLK 时钟输出
I/O 数据输入输出脚
RST 复位信号/片选信号
  • VCC2双供电配置中的主电源供应管脚,VCC1连接到备用电源,在主电源失效时,保存时间和日期的数据。DS1302工作于VCC1和VCC2中的较大者,当VCC2比VCC1高0.2V时,VCC2给DS1302供电,当VCC1比VCC2高时,VCC1给DS1302供电。
  • CE输入CE信号在读写时必须保持高电平,此管脚内部有一个40KΩ的下拉电阻连接到地(先前的数据手册把CE修正为RET,管脚的功能没有改变)
  • I/O输入/推挽输出,I/O管脚是三线接口的双向数据管脚,此管脚内部有一个40KΩ的下拉电阻连接到地。
  • SCLK输入,用来同步串行接口上的数据动作。此管脚内部有一个40KΩ的下拉电阻连接到地。

图片1:DS1302内部结构图

图片2:常用工作电路图

时钟精确度

时钟精度取决于晶体的精度、容性负载与晶体振荡电路的校准精度以及容性负载之间的匹配。另外晶体振动频率漂移引起的温度变化也会增加误差。外围电路噪声和耦合振荡电路可能导致时钟运行较快。

控制寄存器-控制字命令

  • (位7)是写入禁止位,当位7为0时,禁止写入
  • (位6)为1时,片内RAM,为0时,日历、时钟寄存器选择位
  • (位1-5)输入输出的指定寄存器,用于选择进行读写的日历、时钟寄存器或片内RAM。对日历、时钟寄存器或片内RAM的选择,见下表日历/时钟寄存器。
  • (位0)在逻辑0时表示写操作(输出),在逻辑1时表示读操作(输入)

日历/时钟寄存器

  1. 秒寄存器
    读命令0x81,写命令0x80;
    寄存器内容:7位 CH为时钟暂停标志,当此位为1时,时钟振荡器暂停,DS1302进入漏电流小于100nA的低功耗备用模式。当此位为0时,时钟开始。(通过控制时钟振荡器是否被禁止,进而控制时钟的计时) 0-3位为秒的个位BCD码,4-6位为秒的十位BCD码。
  2. 分寄存器
    读命令0x83,写命令0x82;
    寄存器数据内容:0-3位为分个位BCD码,4~6位为分钟十位BCD码;7位无意义,默认0;
  3. 时寄存器
    读命令0x85,写命令0x84;
    寄存器数据内容:0~3位为小时个位的BCD码;4或5位为小时十位BCD码;6位无意义,默认0;7位,控制12/24小时制,为1时,12小时制,为0时,24小时制;
  4. 日寄存器
    读命令0x87,写命令0x86;
    寄存器数据内容:0-3位为日个位BCD码,4-5位为日十位BCD码,6~7位无意义,默认0;
  5. 月寄存器
    读命令0x89,写命令0x88;
    寄存器数据内容:0-3位为月个位的BCD码;4位为月十位BCD码;5-7位无意义,默认0;
  6. 周寄存器
    读命令0x8b,写命令0x8a;
    寄存器数据内容:0-3位为周的BCD码;4-7位无意义,默认0;
  7. 年寄存器
    读命令0x8d,写命令0x8c;
    寄存器数据内容:0-3位为年的BCD码;4-7位为年十位BCD码;

通讯时序图

  1. CE和时钟控制。
    将CE置高将开启数据传输。

  2. 向ds1302指定寄存器写一字节数据
    先将CE拉高开启数据传输通道,之后通过16个时钟周期,在每个时钟上升沿由低位到高位地传输数据位,前8个时钟周期传输写指令字节,后八个时钟周期传输要写入寄存器的内容字节,最后将时钟线、CE拉低,完成数据传输。

  3. 从ds1302指定寄存器读一字节数据
    先将CE拉高开启数据传输通道,之后在前8个时钟周期的每个上升沿由低位到高位传输读指令字节,(也就是先写入要读取的指令),从第8个时钟周期的下降沿开始,在每个时钟周期的下降沿ds1302由低位到高位地传输指定寄存器的内容字节,内容字节传输完毕后,最后将时钟线、CE拉低,完成数据读取。

程序

/*   发送一字节数据到DS1302  传入参数:要发送的字节
*/
void InputByte(unsigned char byte1)
{char i;Data_Dir_Config(0);     //设置引脚为推挽输出模式for(i=8;i>0;i--){DS1302_OUT(byte1&0x01);   //置发送引脚的电平来发送数据DS1302_CLK(1);           //时钟置1DS_nop();             //空指令延时DS1302_CLK(0);           //时钟置0byte1>>=1;             //移位字节}
}/* 读DS1302一个字节子程序  返回值:读出的字节
*/
uint8_t OutputByte(void)
{u8 i,ucdat=0;Data_Dir_Config(1);      //设置引脚为浮空输入模式for(i=8;i>0;i--)   {ucdat>>=1;  //进行移位if(DS1302_IN) ucdat|=0x80;   //获取输入电平的信号DS1302_CLK(1);DS_nop();DS1302_CLK(0);}return(ucdat); //返回8位字节
}/*向DS1302指定地址写一字节数据子程序
*/
void write_ds1302(unsigned char addr,unsigned char TDat)
{DS1302_RST(0);     //拉低(CE)片选    DS_nop();DS1302_CLK(0);     //先将CLK时钟置低电平DS_nop();DS1302_RST(1);        //拉高(CE)片选 表示准备传输数据InputByte(addr);   //写入数据地址    DS_nop();InputByte(TDat);   //写入数据DS1302_CLK(1);        //拉高时钟  DS_nop();DS1302_RST(0);     //拉低(CE)片选
}/*读DS1302地址子程序返回读出的字节
*/
unsigned char read_ds1302(unsigned char addr)
{unsigned char timedata;DS1302_RST(0);      //拉低(CE)片选DS_nop();DS1302_CLK(0);     //先将CLK时钟置低电平DS_nop();DS1302_RST(1);        //拉高(CE)片选 表示准备传输数据InputByte(addr);   //写入要读的数据地址timedata=OutputByte();  //读出一个字节并将数据保存到timedata中DS1302_CLK(1);      //拉高时钟电平DS_nop();DS1302_RST(0);     //拉低(CE)片选return(timedata);   //返回读出数据
}

实物效果

参考

  1. 通讯时序图部分参考 基于STM32的DS1302时钟模块驱动程序
  2. 日历时钟寄存器参考#DS1302#–拓展模块使用教程和心得(一):时钟模块DS1302
  3. DS1302中文手册

STM32使用库函数控制时钟芯片DS1302提供时间相关推荐

  1. 事无巨细,时钟芯片DS1302

    第13/15原创:事无巨细,时钟芯片DS1302 原文地址:: http://bbs.eeworld.com.cn/thread-99612-1-1.html 事无巨细,时钟芯片DS1302 我们继续 ...

  2. 电脑罗盘时钟代码_轻松吃透实时时钟芯片DS1302软硬件设计

    今天我们来讨论一款老掉牙的实时时钟芯片DS1302.什么是实时时钟(RealTime Clock, RTC)呢?为什么我们需要它呢?假设你使用单片机实现万年历应用,一般的做法是这样的:设置中断后判断1 ...

  3. 单片机外设系列之一时钟芯片DS1302

    标题 单片机外设之一(时钟芯片DS1302) 何为DS1302? DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片.它可以对年.月.日.周.时.分.秒进行计时,且具有 ...

  4. 基于STM32F1的时钟芯片DS1302驱动

    目录 DS1302.h源代码 DS1302.c源代码 DS1302.h源代码 /************************************************************ ...

  5. ds1302模块 树莓派_(16)给树莓派B+ 安装一个实时时钟芯片DS1302

    在这里首先感谢glgoo在google被墙的情况下提供搜索功能,还要感谢 http://wiringpi.com/ 以及github,尽管自己眼瞎,几经波折还是发现了尘封已久的少林"七十二绝 ...

  6. 51单片机15单片机 时钟芯片DS1302

    目录 前言 一.DS18B20芯片介绍 二.芯片引脚定义与应用电路 三.寄存器定义 四.命令字 五.数据流 六.时序图与数据读写 6.1 单字节写(Write) 6.2 单字节读(Read) 6.3 ...

  7. 普中51开发板利用1602LCD与1302时钟芯片来显示时间的程序

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 跟着B站江科大的单片机视频学了一段时间了,今天决定写一下学到的内容,方便与朋友们交流学习一下,有单片机学习群的朋友请留 ...

  8. FPGA:时钟模块设计-RTC实时时钟芯片DS1302

    前言 首先我要明确,这个RTC是在干什么,通过查阅DS1302芯片手册,我知道了,要想使用这块芯片,我需要用FPGA生成3个信号,然后用DS1302去实现具体功能,需要实现什么功能我先不用关心,现在需 ...

  9. 18.时钟芯片DS1302

    三线通信 (不称为一种通信协议,只是因为此芯片由三根线接在板子上) DS1302可以对年.月.日.周.时.分.秒进行计时,具有闰年补偿功能,工作电压为2.0V~5.5V,采用三线接口与CPU进行同步通 ...

最新文章

  1. 使用命令行创建AVD时的出错总结
  2. PYDay6- 内置函数、验证码、文件操作、发送邮件函数
  3. 中国陶瓷辊棒市场全景调查及供需格局预测报告2022-2028年版
  4. mysql show作用_mysql的show操作
  5. Thief in a Shop
  6. linux 使用timedatectl 修改时区和时间
  7. CF704B. Ant Man
  8. 推荐一款生信分析工具的集大成者
  9. server取出多个最小值 sql_SQL汇总查询及分组查询
  10. HW RIPv2认证
  11. 删数问题 山东理工oj2072(贪心)
  12. HTML+JS实现页面跳转
  13. asc和desc全称_MySQL数据排序asc、desc
  14. 高德地图 聚合效果
  15. Java 的package 機制 王森
  16. Android计算器——入门
  17. 更换新硬盘,重新装回正版win10的方法
  18. IEEE 754 32bit浮点标识
  19. ch.ethz.ganymed包ganymed-ssh2的使用
  20. php5.0 cms安装教程,MySQL_KingCMS5.0从安装到设置使用教程,1.首先到KingCMS官方下载KingCMS5.0 - phpStudy...

热门文章

  1. sklearn中的metrics.roc_auc_score评价指标
  2. Excel嵌入网页(一)
  3. 安利一个Visual Studio插件 Visual Assist 小番茄
  4. @GeneratedValue与@GenericGenerator区别
  5. 《传奇4》背后公司股价涨幅400%,秘密或在“区块链”?
  6. 高考英语68分,大一通过英语四六级,考研英语80分!做到这些,你也可以!
  7. 香港特区银行怎么开帐户?
  8. 英特尔带来服务器的作用是,[精彩观点]英特尔7400带来x86服务器虚拟化新实践
  9. win10python详细配置_Win10系统配置Python3.6+OpenGL环境详细步骤
  10. css中的图标字体的实现方案及原理和工具使用