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文章
5600浏览量
115704 -
微处理器
+关注
关注
11文章
2258浏览量
82405 -
计时芯片
+关注
关注
0文章
6浏览量
8691 -
DS1302芯片
+关注
关注
0文章
3浏览量
1773
发布评论请先 登录
相关推荐
涓流充电,带31个字节RAM,时钟芯片GM1302,兼容DS1302,数据手册和参考源代码
`涓流充电,带31个字节RAM,时钟芯片GM1302,兼容DS1302,数据手册和参考源代码`
发表于 12-10 14:03
DS1302基本介绍
)模式读/写操作简单说明写入数据读取数据涓细电流充电充电原理图充电控制字节代码示例写保护开关BCD码和十进制之间的转换十进制转BCDBCD转十进制参考文献DS1302基本介绍
发表于 01-17 06:21
DS1302涓流充电时钟保持芯片的原理与应用
摘要:本文概括介绍了DS1302时钟芯片的特点和基本组成,通过实例详细说明了有关功能的应用软件。关于DS1302各寄存器的详细位控功能请参考DALLAS(达拉斯)公司的相应产品资料。
发表于 07-17 23:54
•144次下载
关于DS1302典型应用原理图
DS1302是一款涓流充电时钟芯片,DS1302与单片机的连接也仅需要3条线:CE引脚、SCLK串行时钟 引脚、I/O串行数据引脚,Vcc2
发表于 10-18 10:43
•3.4w次阅读
ds1302是什么接口,DS1302时钟芯片接口分析详解
DS1302是达拉斯公司出品的一款实时时钟芯片。主要是针对年、月、日、周、时、分、秒进行计时,且具有闰年补偿等多种功能。这篇文章主要就是说DS1302的到底是属于什么接口的,同时分析详
发表于 10-19 14:34
•1.5w次阅读
DS1302涓流充电计时实时时钟芯片的详细原版数据手册免费下载
DS1302涓流充电计时芯片包含实时时钟/日历和31字节的静态RAM。它通过一个简单的串行接口与微处理器通信。实时时钟/日历提供秒、分钟、小
发表于 09-28 15:16
•0次下载
DS1302涓流充电计时芯片的数据手册免费下载
DS1302 涓流充电计时芯片包含一个实时时钟/日历和31 字节的静态RAM.通过简单的串行接口与微处理器通讯。这个实时时钟/日历提供年月日
发表于 07-02 16:33
•8次下载
DS1302涓流充电计时芯片的数据手册
DS1302涓流充电计时芯片包含一个RTC/日历和31个字节的静态RAM。它通过一个简单的串行接口与微处理器通信。RTC/日历提供秒、分钟、
发表于 08-08 08:00
•3次下载
DS1302涓流充电时钟芯片的中文资料和源代码免费下载
DS1302 是DALLAS 公司推出的涓流充电时钟芯片内含有一个实时时钟/日历和31 字节静态RAM可通过简单的串行接口与单片机进行通信
发表于 10-30 16:58
•18次下载
DS1302涓流充电计时芯片的中文数据手册免费下载
DS1302 涓流充电计时芯片包含一个实时时钟/日历和 31 字节的静态 RAM.通过简单的串行接口与微处理器通讯。这个实时时钟/日历提供年
发表于 06-01 17:42
•19次下载
评论