DS1302时钟芯片简介
DS1302是DALLAS公司推出的涓流充电时钟芯片,内含一个实时时钟/日历和31字节静态RAM,可以通过串行接口与单片机进行通信。实时时钟/日历电路提供秒、分、时、日、星期、月、年的信息,每个月的天数和闰年的天数可自动调整,时钟操作可通过AM/PM标志位决定采用24或12小时时间格式。DS1302与单片机之间能简单地采用同步串行的方式进行通信,仅需三根I/O线:复位(RST)、I/O数据线、串行时钟(SCLK)。时钟/RAM的读/写数据以一字节或多达31字节的字符组方式通信。DS1302工作时功耗很低,保持数据和时钟信息时,功耗小于1mW。
DS1302的内部结构
DS1302的外部引脚功能说明如图3所示:
图3 DS1302封装图 | X1,X2 | 32.768kHz晶振引脚 |
GND | 地 | |
RST | 复位 | |
I/O | 数据输入/输出 | |
SCLK | 串行时钟 | |
VCC1 | 电池引脚 | |
VCC2 | 主电源引脚 |
DS1302的内部结构如图4所示,主要组成部分为:移位寄存器、控制逻辑、振荡器、实时时钟以及RAM。虽然数据分成两种,但是对单片机的程序而言,其实是一样的,就是对特定的地址进行读写操作。
图4 DS1302的内部结构图
DS1302含充电电路,可以对作为后备电源的可充电电池充电,并可选择充电使能和串入的二极管数目,以调节电池充电电压。不过对我们目前而言,**需要熟悉的是和时钟相关部分的功能,对于其它参数请参阅数据手册。
DS1302的工作原理
DS1302工作时为了对任何数据传送进行初始化,需要将复位脚(RST)置为高电平且将8位地址和命令信息装入移位寄存器。数据在时钟(SCLK)的上升沿串行输入,前8位**访问地址,命令字装入移位寄存器后,在之后的时钟周期,读操作时输出数据,写操作时输出数据。时钟脉冲的个数在单字节方式下为8+8(8位地址+8位数据),在多字节方式下为8加**多可达248的数据。
DS1302的寄存器和控制命令
对DS1302的操作就是对其内部寄存器的操作,DS1302内部共有12个寄存器,其中有7个寄存器与日历、时钟相关,存放的数据位为BCD码形式。此外,DS1302还有年份寄存器、控制寄存器、充电寄存器、时钟突发寄存器及与RAM相关的寄存器等。时钟突发寄存器可一次性顺序读写除充电寄存器以外的寄存器。日历、时间寄存器及控制字如表1所示:
寄存器名称 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
1 | RAM/CK | A4 | A3 | A2 | A1 | A0 | RD/W | |
秒寄存器 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | |
分寄存器 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | |
小时寄存器 | 1 | 0 | 0 | 0 | 0 | 1 | 0 | |
日寄存器 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | |
月寄存器 | 1 | 0 | 0 | 0 | 1 | 0 | 0 | |
星期寄存器 | 1 | 0 | 0 | 0 | 1 | 0 | 1 | |
年寄存器 | 1 | 0 | 0 | 0 | 1 | 1 | 0 | |
写保护寄存器 | 1 | 0 | 0 | 0 | 1 | 1 | 1 | |
慢充电寄存器 | 1 | 0 | 0 | 1 | 0 | 0 | 0 | |
时钟突发寄存器 | 1 | 0 | 1 | 1 | 1 | 1 | 1 |
表1:日历、时钟寄存器与控制字对照表
**后一位RD/W为“0”时表示进行写操作,为“1”时表示读操作。
DS1302内部寄存器列表如表2所示:
寄存器名称 | 命令字 | 取值范围 | 各位内容 | ||||||||
写 | 读 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | ||
秒寄存器 | 80H | 81H | 00-59 | CH | 10SEC | SEC | |||||
分寄存器 | 82H | 83H | 00-59 | 0 | 10MIN | MIN | |||||
小时寄存器 | 84H | 85H | 01-12或00-23 | 12/24 | 0 | A | HR | HR | |||
日期寄存器 | 86H | 87H | 01-28,29,30,31 | 0 | 0 | 10DATE | DATE | ||||
月份寄存器 | 88H | 89H | 01-12 | 0 | 0 | 0 | 10M | MONTH | |||
周寄存器 | 8AH | 8BH | 01-07 | 0 | 0 | 0 | 0 | 0 | DAY | ||
年份寄存器 | 8CH | 8DH | 00-99 | 10YEAR | YEAR |
表2:DS14302内部主要寄存器分布表
DS1302内部的RAM分为两类,一类是单个RAM单元,共31个,每个单元为一个8位的字节,其命令控制字为COH~FDH,其中奇数为读操作,偶数为写操作;再一类为突发方式下的RAM,此方式下可一次性读写所有的RAM的31个字节,命令控制字为FEH(写)、FFH(读)。
我们现在已经知道了控制寄存器和RAM的逻辑地址,接着就需要知道如何通过外部接口来访问这些资源。单片机是通过简单的同步串行通讯与DS1302通讯的,每次通讯都**由单片机发起,无论是读还是写操作,单片机都**先向DS1302写入一个命令帧,这个帧的格式如表1所示,**高位BIT7固定为1,BIT6决定操作是针对RAM还是时钟寄存器,接着的5个BIT是RAM或时钟寄存器在DS1302的内部地址,**后一个BIT表示这次操作是读操作抑或是写操作。
物理上,DS1302的通讯接口由3个口线组成,即RST,SCLK,I/O。其中RST从低电平变成高电平启动一次数据传输过程,SCLK是时钟线,I/O是数据线。具体的读写时序参考图5,但是请注意,无论是哪种同步通讯类型的串行接口,都是对时钟信号敏感的,而且一般数据写入有效是在上升沿,读出有效是在下降沿(DS1302正是如此的,但是在芯片手册里没有明确说明),如果不是**确定,则把程序设计成这样:平时SCLK保持低电平,在时钟变动前设置数据,在时钟变动后读取数据,即数据操作总是在SCLK保持为低电平的时候,相邻的操作之间间隔有一个上升沿和一个下降沿。
图5 DS1302的命令字结构
硬件原理图
程序流程图