DS1302

模块功能

提供年、月、日、时、分、秒的计时。

引脚定义

应用电路

VCC1、2:分别是备用电源和主电源,备用电源提供非易失性存储功能。
X1和X2表示晶振:32.768KHZ,用于提供时钟信号,晶振的核心是石英晶体,通过改变其形状、尺寸、切割方式而产生不同的频率。
CE:Chip Enable,芯片使能。
I/O:数据输入输出
SCLK:串行时钟

内部结构

晶振提供时钟信号,RAM存储时间信息并提供通用寄存器。通过CE、I/O、SCLK接口与RAM交互。

在哪儿、读/写?

一个字节中,最低位控制读写、第6位选择RAM or CK(上面加一横表示低电平有效)

WP表示Write Protect,置1时不可写入。
TCS是备用电池的设置。

时序定义

CE全程置1;
I/O上升沿写入单片机、单片机中的数据每个下降沿到I/O口处。
第一个字节确认读出或写入操作、确认地址(在哪儿操作)。
第二个字节操作读出数据或者继续写入数据。

通过for循环搭配SCLK信号,串行读入或者写出数据。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
void DS1302_WriteByte(unsigned char Command, unsigned char Data)
{

unsigned char i;

DS1302_CE = 1;

for (i = 0; i < 8; i++)
{
DS1302_IO = Command & (0x01<<i);
DS1302_SCLK = 1;
DS1302_SCLK = 0;
}

for (i = 0; i < 8; i++)
{
DS1302_IO = Data & (0x01<<i);
DS1302_SCLK = 1;
DS1302_SCLK = 0;
}

DS1302_CE = 0;

}

unsigned char DS1302_ReadByte(unsigned char Command)
{
unsigned char i, Data = 0x00;

DS1302_CE = 1;

for (i = 0; i < 8; i++)
{
DS1302_IO = Command & (0x01<<i);
DS1302_SCLK = 0;
DS1302_SCLK = 1;
}

for (i = 0; i<8 ;i++)
{
DS1302_SCLK = 1;
DS1302_SCLK = 0;
if (DS1302_IO) {Data |= (0x01<<i);}
}

DS1302_CE = 0;
DS1302_IO = 0;

return Data;

}

参考来源:DS1302 Trickle-Charge Timekeeping Chip; B站江协科技

-------------本文结束感谢您的阅读-------------