0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

DS1302涓流充电计时芯片特征

科技绿洲 来源:单片机实例设计 作者:单片机实例设计 2023-09-11 14:41 次阅读

1.芯片简介

DS1302 涓流充电计时芯片包含一个实时时钟/日历和 31 字节的静态 RAM.通过简单的串行接口微处理器通讯.这个实时时钟/日历提供年月日,时分秒信息.对于少于 31 天的月份月末会自动调整,还有闰年校正.由于有一个 AM/PM 指示器,时钟可以工作在 12 小时制或者24小时制。

图片

主要特点如下

  • 实时时钟计算年、月、日、时、分、秒、星 期,直到 2100 年,并有闰年调节功能 ,具有31 x 8 位 通用暂存 RAM。
  • 2.0V 至 5.5V 宽电压范围操作 ,在2.0V时工作电流小于300nA 。
  • 读写时钟或 RAM 数据时有单字节或多字节(脉冲串模式)数据传送方式。引脚电平与 TTL 兼容 (VCC = 5V)。

2.DS1302引脚定义

使用同步串行通讯简化了 DS1302 与微处理器的接口。与时钟/RAM 通讯只需要三根线: CE, I/O (数据线), and SCLK (串行时钟). 数据输出输入时钟/RAM 一次1字节或者在脉冲串中多达 31 字节。除了 DS1202 的基本计时功能以外, DS1302 有额外特点比如,双管脚主电源和备用电源,可编程涓流充电器 VCC1,还附加 7 字节的暂存器。

图片

3.DS18B20驱动程序

(1)DS1302.h

#ifndef __DS1302_H__
#define __DS1302_H__


#include < reg52.h >
#include< intrins.h >


sbit SCK=P1^4;    
sbit SDA=P1^5;    
sbit RST=P1^6;
//复位脚
#define RST_CLR  RST=0//电平置低
#define RST_SET  RST=1//电平置高




//双向数据
#define IO_CLR  SDA=0//电平置低
#define IO_SET  SDA=1//电平置高
#define IO_R  SDA  //电平读取




//时钟信号
#define SCK_CLR  SCK=0//时钟信号
#define SCK_SET  SCK=1//电平置高




#define ds1302_sec_add      0x80    //秒数据地址
#define ds1302_min_add      0x82    //分数据地址
#define ds1302_hr_add      0x84    //时数据地址
#define ds1302_date_add      0x86    //日数据地址
#define ds1302_month_add    0x88    //月数据地址
#define ds1302_day_add      0x8a    //星期数据地址
#define ds1302_year_add      0x8c    //年数据地址
#define ds1302_control_add    0x8e    //控制数据地址
#define ds1302_charger_add    0x90            
#define ds1302_clkburst_add    0xbe


extern unsigned char time_buf1[8];//空年月日时分秒周
extern unsigned char time_buf[8] ;//空年月日时分秒周
/*------------------------------------------------
           向DS1302写入一字节数据
------------------------------------------------*/
void Ds1302_Write_Byte(unsigned char addr, unsigned char d);
/*------------------------------------------------
           从DS1302读出一字节数据
------------------------------------------------*/
unsigned char Ds1302_Read_Byte(unsigned char addr) ;
/*------------------------------------------------
           向DS1302写入时钟数据
------------------------------------------------*/
void Ds1302_Write_Time(void) ;
/*------------------------------------------------
           从DS1302读出时钟数据
------------------------------------------------*/
void Ds1302_Read_Time(void)  ;
/*------------------------------------------------
                DS1302初始化
------------------------------------------------*/
void Ds1302_Init(void);


#endif

(2)DS1302.c

#include "ds1302.h"


unsigned char time_buf1[8] = {20,9,3,13,18,51,00,6};//空年月日时分秒周
unsigned char time_buf[8] ;                         //空年月日时分秒周
/*------------------------------------------------
           向DS1302写入一字节数据
------------------------------------------------*/
void Ds1302_Write_Byte(unsigned char addr, unsigned char d)
{


  unsigned char i;
  RST_SET;  

  //写入目标地址:addr
  addr = addr & 0xFE;     //最低位置零
  for (i = 0; i < 8; i ++) 
      { 
    if (addr & 0x01) 
        {
      IO_SET;
      }
    else 
        {
      IO_CLR;
      }
    SCK_SET;
    SCK_CLR;
    addr = addr > > 1;
    }

  //写入数据:d
  for (i = 0; i < 8; i ++) 
     {
    if (d & 0x01) 
        {
      IO_SET;
      }
    else 
        {
      IO_CLR;
      }
    SCK_SET;
    SCK_CLR;
    d = d > > 1;
    }
  RST_CLR;          //停止DS1302总线
}
/*------------------------------------------------
           从DS1302读出一字节数据
------------------------------------------------*/


unsigned char Ds1302_Read_Byte(unsigned char addr) 
{


  unsigned char i;
  unsigned char temp;
  RST_SET;  


  //写入目标地址:addr
  addr = addr | 0x01;//最低位置高
  for (i = 0; i < 8; i ++) 
      {

    if (addr & 0x01) 
       {
      IO_SET;
      }
    else 
        {
      IO_CLR;
      }
    SCK_SET;
    SCK_CLR;
    addr = addr > > 1;
    }

  //输出数据:temp
  for (i = 0; i < 8; i ++) 
      {
    temp = temp > > 1;
    if (IO_R) 
       {
      temp |= 0x80;
      }
    else 
       {
      temp &= 0x7F;
      }
    SCK_SET;
    SCK_CLR;
    }

  RST_CLR;  //停止DS1302总线
  return temp;
}


/*------------------------------------------------
           向DS1302写入时钟数据
------------------------------------------------*/
void Ds1302_Write_Time(void) 
{

    unsigned char i,tmp;
  for(i=0;i< 8;i++)
      {                  //BCD处理
    tmp=time_buf1[i]/10;
    time_buf[i]=time_buf1[i]%10;
    time_buf[i]=time_buf[i]+tmp*16;
      }
  Ds1302_Write_Byte(ds1302_control_add,0x00);      //关闭写保护 
  Ds1302_Write_Byte(ds1302_sec_add,0x80);        //暂停 
  //Ds1302_Write_Byte(ds1302_charger_add,0xa9);      //涓流充电 
  Ds1302_Write_Byte(ds1302_year_add,time_buf[1]);    //年 
  Ds1302_Write_Byte(ds1302_month_add,time_buf[2]);  //月 
  Ds1302_Write_Byte(ds1302_date_add,time_buf[3]);    //日 
  Ds1302_Write_Byte(ds1302_day_add,time_buf[7]);    //周 
  Ds1302_Write_Byte(ds1302_hr_add,time_buf[4]);    //时 
  Ds1302_Write_Byte(ds1302_min_add,time_buf[5]);    //分
  Ds1302_Write_Byte(ds1302_sec_add,time_buf[6]);    //秒
  Ds1302_Write_Byte(ds1302_day_add,time_buf[7]);    //周 
  Ds1302_Write_Byte(ds1302_control_add,0x80);      //打开写保护 
}


/*------------------------------------------------
           从DS1302读出时钟数据
------------------------------------------------*/
void Ds1302_Read_Time(void)  
{ 
         unsigned char i,tmp;
  time_buf[1]=Ds1302_Read_Byte(ds1302_year_add);    //年 
  time_buf[2]=Ds1302_Read_Byte(ds1302_month_add);    //月 
  time_buf[3]=Ds1302_Read_Byte(ds1302_date_add);    //日 
  time_buf[4]=Ds1302_Read_Byte(ds1302_hr_add);    //时 
  time_buf[5]=Ds1302_Read_Byte(ds1302_min_add);    //分 
  time_buf[6]=(Ds1302_Read_Byte(ds1302_sec_add))&0x7F;//秒 
  time_buf[7]=Ds1302_Read_Byte(ds1302_day_add);    //周 




  for(i=0;i< 8;i++)
     {           //BCD处理
    tmp=time_buf[i]/16;
    time_buf1[i]=time_buf[i]%16;
    time_buf1[i]=time_buf1[i]+tmp*10;
     }
}


/*------------------------------------------------
                DS1302初始化
------------------------------------------------*/
void Ds1302_Init(void)
{

  RST_CLR;      //RST脚置低
  SCK_CLR;      //SCK脚置低
    Ds1302_Write_Byte(ds1302_sec_add,0x00);         
}
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 电压
    +关注

    关注

    45

    文章

    5088

    浏览量

    114426
  • 微处理器
    +关注

    关注

    11

    文章

    2133

    浏览量

    81423
  • 计时芯片
    +关注

    关注

    0

    文章

    6

    浏览量

    8125
  • DS1302芯片
    +关注

    关注

    0

    文章

    3

    浏览量

    1719
收藏 人收藏

    评论

    相关推荐

    DS1302涓流充电时钟保持芯片的原理与应用

    DS1302涓流充电时钟保持芯片的原理与应用DS1302 是DALLAS 公司推出的涓流
    发表于 12-12 16:36

    关于ds1302的使用

    怎么使用ds1302涓流充电功能,
    发表于 01-26 14:48

    涓流充电,带31个字节RAM,时钟芯片GM1302,兼容DS1302,数据手册和参考源代码

    `涓流充电,带31个字节RAM,时钟芯片GM1302,兼容DS1302,数据手册和参考源代码`
    发表于 12-10 14:03

    何为DS1302时钟芯片

    标题 单片机外设之一(时钟芯片DS1302)何为DS1302?DS1302是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟
    发表于 12-08 08:15

    DS1302时钟芯片描述

    一.描述DS1302时钟芯片是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片。它可以对年、月、日、周、时、分、秒进行计时
    发表于 01-17 07:37

    DS1302基本介绍

    )模式读/写操作简单说明写入数据读取数据涓细电流充电充电原理图充电控制字节代码示例写保护开关BCD码和十进制之间的转换十进制转BCDBCD转十进制参考文献DS1302基本介绍
    发表于 01-17 06:21

    DS1302的中文手册

    DS1302 涓流充电计时芯片包含一个实时时钟/日历和 31 字节的静态 RAM.通过简单的串行接口与微处理器通讯.这个实时时钟/日历提供年
    发表于 09-28 07:52

    DS1302涓流充电时钟保持芯片的原理与应用

    摘要:本文概括介绍了DS1302时钟芯片的特点和基本组成,通过实例详细说明了有关功能的应用软件。关于DS1302各寄存器的详细位控功能请参考DALLAS(达拉斯)公司的相应产品资料。
    发表于 07-17 23:54 144次下载

    ds1302引脚图管脚图

    ds1302引脚图 DS1302 是DALLAS 公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31 字节静态RAM 通过简单的串行
    发表于 01-14 13:21 9106次阅读
    <b class='flag-5'>ds1302</b>引脚图管脚图

    DS1302涓流充电时钟保持芯片的原理及应用

    DS1302涓流充电时钟保持芯片的原理及应用
    发表于 01-24 17:21 18次下载

    关于DS1302典型应用原理图

    DS1302是一款涓流充电时钟芯片DS1302与单片机的连接也仅需要3条线:CE引脚、SCLK串行时钟 引脚、I/O串行数据引脚,Vcc2
    发表于 10-18 10:43 3.2w次阅读
    关于<b class='flag-5'>DS1302</b>典型应用原理图

    DS1302涓流充电计时实时时钟芯片的详细原版数据手册免费下载

    DS1302涓流充电计时芯片包含实时时钟/日历和31字节的静态RAM。它通过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分钟、小
    发表于 09-28 15:16 0次下载
    <b class='flag-5'>DS1302</b><b class='flag-5'>涓流</b><b class='flag-5'>充电</b><b class='flag-5'>计时</b>实时时钟<b class='flag-5'>芯片</b>的详细原版数据手册免费下载

    DS1302涓流充电计时芯片的数据手册免费下载

    DS1302 涓流充电计时芯片包含一个实时时钟/日历和31 字节的静态RAM.通过简单的串行接口与微处理器通讯。这个实时时钟/日历提供年月日
    发表于 07-02 16:33 8次下载
    <b class='flag-5'>DS1302</b><b class='flag-5'>涓流</b><b class='flag-5'>充电</b><b class='flag-5'>计时</b><b class='flag-5'>芯片</b>的数据手册免费下载

    DS1302涓流充电计时芯片的数据手册

    DS1302涓流充电计时芯片包含一个RTC/日历和31个字节的静态RAM。它通过一个简单的串行接口与微处理器通信。RTC/日历提供秒、分钟、
    发表于 08-08 08:00 3次下载
    <b class='flag-5'>DS1302</b><b class='flag-5'>涓流</b><b class='flag-5'>充电</b><b class='flag-5'>计时</b><b class='flag-5'>芯片</b>的数据手册

    DS1302涓流充电计时芯片的中文数据手册免费下载

    DS1302 涓流充电计时芯片包含一个实时时钟/日历和 31 字节的静态 RAM.通过简单的串行接口与微处理器通讯。这个实时时钟/日历提供年
    发表于 06-01 17:42 19次下载
    <b class='flag-5'>DS1302</b><b class='flag-5'>涓流</b><b class='flag-5'>充电</b><b class='flag-5'>计时</b><b class='flag-5'>芯片</b>的中文数据手册免费下载