DS1302 原理及操作方法

DS1302 原理及操作方法

  • DS1302 特征
  • 典型连接电路和结构简图
  • 引脚说明
  • 地址/命令字节
  • 读写操作地址
  • 读写发送的时序
  • 代码阐述

DS1302 特征

DS1302 原理及操作方法_第1张图片

  1. 实时时钟显示秒、分钟、小时、月、月、日、周、年的秒、分钟、小时,最多可获得2100年的飞跃补偿。
  2. 31 x 8电池支持通用RAM。
  3. 最小针数系列I/O。
  4. 2.0V至5.5V全面运作。
  5. 2.0V时使用少于300nA。
  6. 单字节或多字节(突发模式)数据传输,用于读取或写入时钟或RAM数据。
  7. 8PinDIP或可选的8Pin,所以表面安装。
  8. 简单的3线接口。
  9. TTL兼容(V CC=5V)。
  10. 可选工业温度范围:-40°C至85°C。
  11. DS1202兼容。
  12. 承销商实验室(UL®认可)
    建议大家去看DS1302的芯片手册。

典型连接电路和结构简图

DS1302 原理及操作方法_第2张图片DS1302 原理及操作方法_第3张图片
可以看到DS132由电源控制,输入移位寄存器,命令和控制逻辑,延时时钟,31×8 RAM和晶振输入模块构成。

引脚说明

DS1302 原理及操作方法_第4张图片 值得注意的是当使用有源晶振时,只接X1引脚,而X2引脚悬空。
Vcc2 为主供电。 在没有主电源的情况下,VCC1连接到备份源,以维护时间和日期。 DS1302是从较大的VCC1或VCC2运行的。 当VCC2大于VCC1时 0.2V,VCC2为DS1302供电。 当VCC2小于VCC1时,VCC1为DS1302供电。

地址/命令字节

DS1302 原理及操作方法_第5张图片 当对DS1320进行读操作时,需要发送地址字节,而进行写操作时,则需要发送地址和命令字节。
A4 A3 A2 A1 A0 是表示的是DS1320内部地址编号,如 下一部分的读写操作地址。81H — 10000001B 对应上图的地址字节。第1位因为是读操作,所以为1,第1位到第5位表示地址为00000,第六位为RAM/CK,这里我们选择时钟,第七位固定为1。可以对照下一部分的读写操作地址联系一下。

读写操作地址

DS1302 原理及操作方法_第6张图片
大家可能疑惑的是10 Seconds 是什么意思?其实就是十位。例如:58 — 十位为 5 各位为 8。
写保护寄存器
WP:0允许写入,1禁止写入。
涓流充电寄存器
慢充电寄存器,用于管理对备用电源的充电
TCS:当4位TCS=1010时,才允许使用涓流充电寄存器,其他任何状态都将禁止使用涓流充电器。
DS:两DS位用于选择连接在VCC2和VCC1间的二极管数目。

读写发送的时序

DS1302 原理及操作方法_第7张图片
时序图分析:找开始点,结束点和转折点。
在最下面有参考的 bilibili网址,老师讲的特别好,所以就不再赘述。

代码阐述

我们这里用蓝桥杯竞赛提供的底层驱动参考代码。
.h 文件声明函数

#ifndef __DS1302_H
#define __DS1302_H

void Write_Ds1302(unsigned char temp);
void Write_Ds1302_Byte( unsigned char address,unsigned char dat );
unsigned char Read_Ds1302_Byte( unsigned char address );
#endif
#include 
#include 
 
sbit SCK=P1^7;     
sbit SDA=P2^3;		
sbit RST = P1^3;   // DS1302复位												

void Write_Ds1302(unsigned  char temp) 
{
	unsigned char i;
	for (i=0;i<8;i++)     	
	{ 
		SCK=0;
		SDA=temp&0x01;
		temp>>=1; 
		SCK=1;
	}
}   

void Write_Ds1302_Byte( unsigned char address,unsigned char dat )     
{
 	RST=0;	_nop_();
 	SCK=0;	_nop_();
 	RST=1; 	_nop_();  
 	Write_Ds1302(address);	
 	Write_Ds1302(dat);		
 	RST=0; 
}

unsigned char Read_Ds1302_Byte ( unsigned char address )
{
 	unsigned char i,temp=0x00;
 	RST=0;	_nop_();
 	SCK=0;	_nop_();
 	RST=1;	_nop_();
 	Write_Ds1302(address);
 	for (i=0;i<8;i++) 	
 	{		
		SCK=0;
		temp>>=1;	
 		if(SDA)
 		temp|=0x80;	
 		SCK=1;
	} 
 	RST=0;	_nop_();
 	SCK=0;	_nop_();
	SCK=1;	_nop_();
	SDA=0;	_nop_();
	SDA=1;	_nop_();
	return (temp);			
}

需要特别注意的是,在写地址和数据前需要对总线初始化

RST=0;	_nop_();
 	SCK=0;	_nop_();
 	RST=1;	_nop_();

同时结束读操作时,需要对总线进行如下操作。

RST=0;	_nop_();
 	SCK=0;	_nop_();
	SCK=1;	_nop_();
	SDA=0;	_nop_();
	SDA=1;	_nop_();

如若没有则传输错误。

参考文献
DS1302芯片手册
https://www.bilibili.com/video/av37386236

你可能感兴趣的:(DS1302 原理及操作方法)