简介
DS1302是一个时钟芯片,可以记录时间日历,包括年、月、日、时、分、秒、星期,并能自动计算闰年,很多对时间敏感的设备都有该设备,该设备可以有主备两个电源输入,主电源用外接电源供电,备电源接电池,保证在断电的情况下,时钟芯片可以正常工作,重新上电后时间正确。
主要性能指标
(1)DS1302实时时钟具有能计算2100年之前的秒、分、时、日、日期、星期、月、年的能力,还有闰年调整的能力。
(2)内部含有31个字节静态RAM,可提供用户访问。
(3)采用串行数据传送方式,使得管脚数量最少,简单SPI 3线接口。
(4)工作电压范围宽:2.0~5.5V。
(5)工作电流:2.0V时,小于300nA。
(6)时钟或RAM数据的读/写有两种传送方式:单字节传送和多字节传送方式。
(7)采用8脚DIP封装或SOIC封装。
(8)与TTL兼容,Vcc=5V。
(9)可选工业级温度范围:-40C~+85C。
(10)具有涓流充电能力。
(11)采用主电源和备份电源双电源供应。
(12)备份电源可由电池或大容量电容实现。
引脚功能
X1、X2:32.768KHz晶振接入引脚。
GND:地。
RST:复位引脚,低电平有效,操作时高电平。
I/O:数据输入/输出引脚,具有三态功能。
SCLK:串行时钟输入引脚。
Vcc1:工作电源引脚。
Vcc2:备用电源引脚。 接入电池断电时提供1302电源
寄存器及片内RAM
DS1302内部有一个控制寄存器,12个日历时钟寄存器和31个RAM.
-
控制寄存器
控制寄存器于存放DS1302的控制命令,DS1302的RST引脚回到高电平后写入的第一个字节就是控制命令,用于对DS1302的读写过程进行控制,具体格式如下:
D7:固定为1
D6:RAM/CK位,=1片内RAM,=0日历、时钟寄存器选择位。
D5~D1:地址位,用于选择进行读写的日历、时钟寄存器或片内RAM。对日历、时钟寄存器或片内RAM的选择见表。
D0: 读写选择,=0写,=1读
下图为每个寄存器的地址:
根据上面的地址和控制位,RST回复高电平后,首先写入控制字节,确定要操作的寄存器和读写操作。然后根据再发送第二个字节,实现读写操作。第二个字节的内容每个寄存器个不相同,下一小节内容就是将每个寄存器的内容。 -
日历时钟寄存器
本小节是介绍日历时钟寄存器的内容,结合控制寄存器一起,即可以实现对日历时钟寄存器的读写操作。
日历时钟寄存器中存放的数据是使用BCD码形式,即每4个bit存放一个十进制数字,进0000至1001分别代表0至9,即存放0x23表示十进制数23.
续
说明:
(1)数据都以BCD码形式。
(2)小时寄存器的D7位为12小时制/24小时制的选择位,当为1时选12小时制,当为0时选24小时制。当12小时制时,D5位为1是上午,D5位为0是下午,D4为小时的十位。当24小时制时,D5、D4位为小时的十位。
(3)秒寄存器中的CH位为时钟暂停位,当为1时钟暂停,为0时钟开始启动。
(4)写保护寄存器中的WP为写保护位,当WP=1,写保护,当WP=0未写保护,当对日历、时钟寄存器或片内RAM进行写时WP应清零,当对日历、时钟寄存器或片内RAM进行读时WP一般置1。
(5)慢充电寄存器的TCS位为控制慢充电的选择,当它为1010才能使慢充电工作。DS为二极管选择位。DS为01选择一个二极管,DS为10选择二个二极管,DS为11或00充电器被禁止,与TCS无关。RS用于选择连接在VCC2与VCC1之间的电阻,RS为00,充电器被禁止,与TCS无关,电阻选择情况见表.
片内RAM
DS1302片内有31个RAM单元,对片内RAM的操作有两种方式:单字节方式和多字节方式。当控制命令字为C0H-FDH时为单字节读写方式,命令字中的D5~D1用于选择对应的RAM单元,其中奇数为读操作,偶数为写操作。
当控制命令字为FEH、FFH时为多字节操作(表中的RAM突发模式),多字节操作可一次把所有的RAM单元内容进行读写。FEH为写操作,FFH为读操作。
在控制指令字输入后的下一个SCLK时钟的上升沿时,数据被写入DS1302,数据输入从低位即位0开始。同样,在紧跟8位的控制指令字后的下一个SCLK脉冲的下降沿读出DS1302的数据,读出数据时从低位0位到高位7。
DS1302是通过SPI串行总线跟单片机通信的,当进行一次读写操作时最少得读写两个字节,第一个字节是控制字节,就是一个命令,告诉DS1302是读还是写操作,是对RAM还是对CLOK寄存器操作。第二个字节就是要读或写的数据了。
单字节读写:只有在SCLK为低电平时,才能将CE置为高电平。所以在进行操作之前先将SCLK置低电平,然后将CE置为高电平,接着开始在IO上面放入要传送的电平信号,然后跳变SCLK。数据在SCLK上升沿时,DS1302读写数据,在SCLK下降沿时,DS1302放置数据到IO上