问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

DS1302实时时钟芯片使用详解:从原理到代码实现

创作时间:
作者:
@小白创作中心

DS1302实时时钟芯片使用详解:从原理到代码实现

引用
CSDN
1.
https://blog.csdn.net/m0_75014814/article/details/143833688

DS1302数据手册的使用

功能特点

DS1302是一款实时时钟芯片,具有以下特点:

  • 工作电压:2V-5.5V
  • 通信协议:3线接口(CE、IO、SCLK)
  • 计时:秒、分、小时、月日期、月、星期、年(闰年补偿器期至2100年)

原理图接线说明

框图:

板子实际接线:

注意:X1,X2连接了32.768KHz的晶振,6pf电容起振

DS1302使用说明

地址/命令字节

说明:

  • bit7: 1表示DS1302工作,0表示DS1320不工作
  • bit6: 1表示指定RAM数据,0表示指定clock/calend数据
  • bit5-1: 指定输入或输出的寄存器
  • bit0:0表示写入,1表示读出

数据读写

DS1302数据在clock的下降沿输出,在clock的上升沿向DS1302输入数据。

图四:说明数据的写入与读出,都是读写command后紧跟着data,上电时,CE必须为0,当VCC>2v时,CE=1;

数据低位先行!!!

操作步骤

说明:DS1302储存的数据是BCD(二进制编码的十进制),而我们常使用DEC。所以要进行DEC-BCD和BCD-DEC的转换.

BCD(Binary-Coded Decimal)

  • 定义:BCD,即二-十进制代码,是一种二进制的数字编码形式,用于二进制和十进制之间的快捷转换。它利用四个位元(bit)来储存一个十进制的数码。
  • 编码方式:在BCD编码中,每个十进制数字(0-9)都被表示为一个四位的二进制数。例如,十进制数5被表示为二进制的0101。

DEC-BCD转换

两位DEC需要两个BCD码,一个BCD码是4位,也就是每进一位需要乘2^4,相当于左移4位,先取出DEC的十位,再乘16(左移4位)得到BCD的十位,

DEC再%10得到BCD的个位。

DECToBCD(dec)    (dec/10*16)+(dec%10)

BCD-DEC转换

与上面类似:bcd/16得到高4位乘10变成十位,bcd%16得到低4位即DEC的个位。

BCDToDEC(bcd)  (bcd/16*10)+(bcd%16 )

操作步骤

  1. 关闭写保护,根据RTC表,应该是对0X8E这个寄存器,写0x00 。否则数据无法写入
  2. 操作要写入的寄存器,奇数为读取,偶数为写入。
  3. 关闭写保护,0X8E,0X80。

设置DS1302初始时分秒的代码

注意:注意传入参数顺序为,年月日,时分秒,不要忘了DECToBCD

void DS1302_Init(u8 hour,u8 min,u8 sec)
    //注意传入参数顺序为,年月日,时分秒
{
    Write_Ds1302(0x8e,0x00);//关闭写保护
    Write_Ds1302(0x84,DECToBCD(hour));//时
    Write_Ds1302(0x82,DECToBCD(min));//分
    Write_Ds1302(0x80,DECToBCD(sec));//秒
    Write_Ds1302(0x8e,0x80);//打开写保护
}

读取DS1302的时分秒

注意:不要忘了BCDToDEC,DS1302为12MHZ正常显示

void DS1302_Process(void)
{
    hour=BCDToDEC(Read_DS1302(0X85));
    min=BCDToDEC(Read_DS1302(0X83));
    sec=BCDToDEC(Read_DS1302(0X81));
}
© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号