DS1302电子时钟
DS1302如上图所示,它是由美国DALLAS公司推出的具有涓细电流充电能力的低功耗实时时钟芯片, DS1302是一种高性能、低功耗的实时时钟芯片,附加31字节静态RAM,采用SPI三线接口与CPU进行通信,并可采用突发方式一次传送多个字节的时钟信号和RAM数据。实时时钟可提供秒、分、时、日、星期、月和年,一个月小与31天时可以自动调整,且具有闰年补偿功能。工作电压宽达2.5~5.5V。采用双电源供电(主电源和备用电源),可设置备用电源充电方式,提供了对后备电源进行涓细电流充电的能力。
各个引脚功能
1 脚 VCC2 是主电源正极的引脚, 2 脚 X1 和 3 脚 X2 是晶振输入和输出引脚, 4 脚 GND是负极, 5 脚 CE 是使能引脚,接单片机的 IO 口, 6 脚 I/O 是数据传输引脚,接单片机的 IO
口, 7 脚 SCLK 是通信时钟引脚,接单片机的 IO 口, 8 脚 VCC1 是备用电源引脚。
Vcc2:主电源; Vcc1:备份电源。
当Vcc1>Vcc2+0.2V时,由Vcc1向DS1302供电,当Vcc1< Vcc2时,由Vcc2
向DS1302供电。SCLK:串行时钟,输入,控制数据的输入与输出;
I/O:三线接口时的双向数据线;
CE:输入信号,在读、写数据期间,必须为高。该引脚有两个功能:
第一,CE开始控制字访问移位寄存器的控制逻辑;其次,CE提供结束单字节或多字节数据传输的方法。
1、 DS1302 是一个实时时钟芯片,可以提供秒、分、小时、日期、月、年等信息,并且还有软件自动调整的能力,可以通过配置 AM/PM 来决定采用 24 小时格式还是 12 小时格式。
2、DS1302有关日历和时钟的寄存器有12个,我们最常用的有7个
这里数据格式为BCD码,是用十六进制来表示十进制。例如,十六进制数0x13的值为整数19,但BCD码表示的是整数13。后续需要转换。
1、CH为0时,时钟振荡停止;CH为1时,时钟开始运行。
2、控制寄存器I(8EH和8FH)的位7(WP)为写保护位
WP为0时,可对任何的时钟或RAM寄存器进行写操作;
WP为1时,禁止对任一寄存器进行写操作
3、读取一个地址的数据
unsigned char Ds1302Read(unsigned char addr)
{
unsigned char n,dat,dat1;
SCLK=0;//先将SCLK置低电平。
_nop_();
RST=1;//然后将RST(CE)置高电平。
_nop_();
for(n=0;n<8;n++)//开始传送八位地址命令
{
DSIO=addr&0x01;//数据从低位开始传送
addr>>=1;
SCLK=1;//数据在上升沿时,DS1302读取数据
_nop_();
SCLK=0;//DS1302下降沿时,放置数据
_nop_();
}
_nop_();
for(n=0;n<8;n++)//读取8位数据
{
dat1=DSIO;//从最低位开始接收
dat=dat>>1;
dat|=dat1<<7;
SCLK=1;
_nop_();
SCLK=0;//DS1302下降沿时,放置数据
_nop_();
}
RST=0;
_nop_(); //以下为DS1302复位的稳定时间,必须的。
SCLK=1;
_nop_();
DSIO=0;
_nop_();
DSIO=1;
_nop_();
return dat;
}
4、向DS1302命令(地址+数据)
void Ds1302Write(unsigned char addr,unsigned dat)
{
unsigned char n;
SCLK=0;//先将SCLK置低电平。
_nop_();
RST=1; //然后将RST(CE)置高电平。
_nop_();
for(n=0;n<8;n++)//开始传送八位地址命令
{
DSIO=addr&0x01;//数据从低位开始传送
addr>>=1;
SCLK=1;//数据在上升沿时,DS1302读取数据
_nop_();
SCLK=0;
_nop_();
}
for(n=0;n<8;n++)//写入8位数据
{
DSIO=dat&0x01;
dat>>=1;
SCLK=1;//数据在上升沿时,DS1302读取数据
_nop_();
SCLK=0;
_nop_();
}
RST=0;//传送数据结束
_nop_();
}