文章目录

  • 参考链接
  • 概述
  • 引脚与内部结构
    • 引脚定义
    • 常用电路
    • 内部寄存器及RAM分布
  • 工作时序
  • 例程(51单片机)

参考链接

CSDN-1
CSDN-2
博客园

概述

  DS1302时钟芯片是DALLAS 公司推出的涓流充电时钟芯片,是基于上一代芯片DS1202且与DS1202相兼容。首先来看看它的特性。

  总结来说:

  • 内部含有一个实时时钟/日历31字节的静态RAM
  • 通过串行接口与单片机通信,使用引脚较少。
  • 实时时钟/日历可以提供秒、分、时、日、周、月、年等信息,且每月的天数和闰年的天数都可以自动调整。时钟可以设置为24或12小时格式。【牛批!】
  • 具有双电源,一个主,一个备用(这也是相比于DS1202的改进之处),据说功耗很低。

引脚与内部结构

引脚定义


  其中CE引脚有一些也被称为RST复位引脚,但功能是一样的。

常用电路


  一般如果不需要备用电源VCC1可以不接。

内部寄存器及RAM分布

  前面提到,DS1302中,有寄存器(共12个,其中7个与时钟有关)和31个字节的RAM,它们的地址及内部数据对应如下表所示

  • 前两列代表寄存器读和写时的命令字,相当于是一个地址标识【后面有详解】,BIT7-BIT0为寄存器各位的内容及其代表的含义,最后一列为寄存器中具有数值含义的值的范围。
  • 10 Seconds代表秒的十位数,其他类比。(所以这些用来表示时钟的寄存器属于BCD码
  • 第一个秒寄存器的CH位为0时正常工作,为1时时钟停振,进入低功耗状态。
  • 小时寄存器 BIT 7位用来选择是12小时制还是24小时制。BIT7 = 0时为24小时制,此时BIT5、BIT4组成小时的十位;当BIT7=1时,为12小时制,BIT4为小时的十位,BIT5指示AM还是PM(0为AM,上午;1为PM,下午)
  • 倒数第二个寄存器为写保护寄存器,其中的WP位为1时,有写保护,DS1302只能读不能写。因此在对DS1302写入数据时,要把WP位清零。
  • 最后一个寄存器为涓细电流充电设置寄存器,当主电源掉电时,DS1302会马上调用备用电源供电,该寄存器就是设置备用电源的。只有当四个TCS位为1010时,才会启动涓细电流充电。而两个DS位两个RS位是用来设置充电的二极管数量和电阻阻值的,具体翻阅英文手册。

RAM
  和寄存器一样,31个字节的RAM也有它独立的读写地址,如下图所示。

工作时序

  了解完了内部结构,接下来就是它的工作时序了,可以说是使用单片机控制最为重要的一环。
  根据DS1302的概述,我们可以总结出它的使用方法:将各种数据写入DS1302的寄存器,以设置它当前的时间以及格式。然后DS1302会按照设置情况运转,如果需要制作电子钟,就用单片机将其寄存器内的数据读出显示即可。
  因此关键在于写入数据以及读出数据两个过程。其时序图如下图所示。

  • 从图中我们可以看出,每次写入/读出数据,都必须先写入一个命令字节,其命令字节在内部寄存器中已有完整记录。而且每次只能写入/读出一个字节,即单字节写入/读出。
  • 在写入命令字时,我们可以发现都是上升沿时IO引脚写入数据,在数据段写入时,是下降沿IO引脚锁存数据;数据段读入数据时,是上升沿锁存数据。

扩展:其他寄存器和RAM
  在DS1302中,还有一个寄存器是用来设置时钟脉冲串的,其地址为BFH(读),BEH(写),设置该寄存器时,可以实现寄存器数据的连续读写,即写入一个命令字,之后连续写入多个字节数据。和单字节写入正好相对,属于另一种写入方式,但一般很少用。还有一个是RAM读写脉冲串设置,功能和时钟脉冲串设置寄存器一样,地址是FFH(读),FEH(写),设置该字节,也可以实现RAM的多字节连续写入。

例程(51单片机)

#include "reg52.h"
#include "intrins.h"
typedef unsigned char uchar;
typedef unsigned int uint;   //类型定义
//---DS1302写入和读取时分秒的地址命令---//
//---秒分时日月周年 最低位读写位;-------//
uchar code READ_RTC_ADDR[7] = {0x81, 0x83, 0x85, 0x87, 0x89, 0x8b, 0x8d};
uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};//---DS1302时钟初始化2016年5月7日星期六12点00分00秒。---//
//---存储顺序是秒分时日月周年,存储格式是用BCD码---//
uchar TIME[7] = {0, 0, 0x12, 0x07, 0x05, 0x06, 0x16};/*******************************************************************************
* 函 数 名         : Ds1302Write
* 函数功能         : 向DS1302命令(地址+数据)
* 输    入         : addr,dat
* 输    出         : 无
*******************************************************************************/
void Ds1302Write(uchar addr, uchar dat)
{uchar n;RST = 0;_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_();
}/*******************************************************************************
* 函 数 名         : Ds1302Read
* 函数功能         : 读取一个地址的数据
* 输    入         : addr
* 输    出         : dat
*******************************************************************************/
uchar Ds1302Read(uchar addr)
{uchar n,dat,dat1;RST = 0;_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;
}/*******************************************************************************
* 函 数 名         : Ds1302Init
* 函数功能         : 初始化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);         //打开写保护功能
}/*******************************************************************************
* 函 数 名         : Ds1302ReadTime
* 函数功能         : 读取时钟信息
* 输    入         : 无
* 输    出         : 无
*******************************************************************************/
void Ds1302ReadTime()
{uchar n;for (n=0; n<7; n++)//读取7个字节的时钟信号:分秒时日月周年{TIME[n] = Ds1302Read(READ_RTC_ADDR[n]);}
}

注意时钟引脚上升沿和下降沿的设定

【嵌入式模块】DS1302 时钟定时芯片相关推荐

  1. 【嵌入式模块】常用扩展芯片及数据手册总结

    文章目录 前言 一.74HC165 二.74HC595 工作原理 实战演练 三.MAX7219/MAX7221 参考链接 概述 工作原理介绍 点阵LED控制例程 四.PCA9685 参考链接 概述 引 ...

  2. Ds1302时钟+独立按键校正时间

    计算机专业的学生一枚,为了将来的大四的生活先做个小准备. 这不,为了面试一个物联网中心,简单做一个:按键控制的Ds1302时钟,通过数码管显示. 多接触硬件的感觉也挺好. 不过,51编程费劲,Ardu ...

  3. ds1302模块 树莓派_Arduino控制DS1302时钟芯片(ds1302引脚图及功能和应用电路)

    DS1302应用电路 应用电路一: DS1302的电路一个重点就是时钟电路,它所使用的晶振是一个32.768k的晶振,晶振外部也不需要额外添加其他的电容或者电阻电路了.时钟的精度,首先取决于晶振的精度 ...

  4. 单片机课程设计——《基于AT89S52单片机和DS1302时钟芯片的电子时钟(可蓝牙校准)》...

    引言 本设计以AT89S52单片机为控制核心,时钟芯片DS1302提供时钟源,配合LCD1602液晶显示模块,组成基本硬件系统,同时利用HC-05嵌入式蓝牙串口通讯模块,可在手机端进行日期.时间的校准 ...

  5. 单片机课程设计——《基于AT89S52单片机和DS1302时钟芯片的电子时钟(可蓝牙校准)》... 1

    引言 本设计以AT89S52单片机为控制核心,时钟芯片DS1302提供时钟源,配合LCD1602液晶显示模块,组成基本硬件系统,同时利用HC-05嵌入式蓝牙串口通讯模块,可在手机端进行日期.时间的校准 ...

  6. 【C51单片机学习笔记--DS1302时钟芯片蜂鸣器I2C总线AT24C02存储器】

    C51单片机学习笔记–DS1302时钟芯片&&蜂鸣器&&I2C总线&&AT24C02存储器 文章目录 一.DS1302时钟芯片介绍 二.DS1302时钟 ...

  7. 基于51单片机、DS1302时钟模块的电子闹钟设计

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一.设计原理 1.DS1302介绍 2.闹钟音乐播放原理 二.程序设计 1.DS1302.h 2.ds1302.c 3.mu ...

  8. STM32F103操作DS1302时钟芯片串口显示(标准库和HAL库)

    目录 DS1302的性能指标 DS1302的寄存器及片内RAM 标准库实现 HAL库实现 源码链接 单片机型号:STM32F103C8T6 在日常生活中,很多情况下会需要使用时间,单片机中虽然也是有定 ...

  9. 51单片机进阶案例(1)——基于MATLAB GUI的单片机串口与PC的通信实现实时时钟和双向可调时钟功能(利用DS1302时钟芯片和LCD1602液晶屏)

    目录 一.案例描述 二.实现功能 三.51单片机部分实现 3.1 实时时钟的实现 3.2 串口通信的实现 3.2.1 接收数据 3.2.2 发送数据 四.MATLAB部分实现 4.1 GUI界面 4. ...

  10. 基于51单片机的DS1302涓流充电计时芯片详细学习(时钟制作)

    目录 前言 一.初学者需要了解DS1302的一些基本特性 二.脉冲串模式数据传输 1.单字节写入 2.单字节读取 3.BCD码的转换 三.理论存在实践开始(代码模块) 1.DS1302时钟模块原理图 ...

最新文章

  1. uvalive3209City Game
  2. stm32延时us寄存器_STM32延时函数的四种方法
  3. node.js HelloWord
  4. k8s创建pod加入容器_K8S架构原理及其工作流程
  5. java ee cdi_Java EE CDI Producer方法教程
  6. 编写Play 2的模块,第1部分:使工作正常
  7. 母版中menu控件上传后出现脚本错误
  8. SpringBoot连接远程云服务器的Redis并且让Redis后台运行
  9. pythonreduce()函数、sorted()函数、reversed_cmp函数、类和对象
  10. 如何将html转换成url,HTML URL
  11. STK航空仿真(五):坐标系
  12. 一键在线生成朋友圈转发点赞截图教程
  13. 如何将pdf压缩到最小?怎么将pdf文档压缩至更小?
  14. JAVA互联网架构师VIP项目实战(完整)
  15. Yapi的安装与使用
  16. 5336-90-3,9-ACRIDINECARBOXYLIC ACID,9-吖啶羧酸
  17. 关于DSP系统时钟的一些理解
  18. Vue前端实战——外卖商家
  19. 前端国密加解密使用方法SM2、SM3、SM4
  20. dhcp服务器自动分配地址思科,cisco dhcp服务器设置方法

热门文章

  1. 湘潭大学计算机学院考研喜报,喜报:数学与信息学院考研学子喜讯频传(2019年)...
  2. Adobe Audition 2020 for Mac安装不了怎么办?Au下载安装教程来啦 内附系统要求
  3. C++判断路径是否存在,若不存在则创建路径
  4. Android实现中英文切换
  5. java 的qq 语音文件怎么打开,用手机java的QQ可以和电脑上的QQ进行语音通话吗?
  6. 如何彻底关闭Windows更新
  7. CAD 图层颜色更换程序-VLISP源码(免开图层控制中心)
  8. 石英晶振的电路组成与设计
  9. Python3 语音识别谷歌验证码
  10. Ubuntu 谷歌浏览器下载