51单片机--时钟芯片ds1302

1.ds1302的性能指标

1)可以计算2100年之前的秒、分、时、日、星期、月、年,并且可以调整闰年。
2)内部有31个字节静态RAM,供用户访问
3)串行数据传送方式(SPI3线接口
4)工作电压:2.0~5.5v
5) 工作电流:2v时,小于300nA(功耗低)
6)时钟或RAM数据的读写,有两种传送方式:单字节传送、多字节传送
7)主电源和负电源双电源供电(备份电源可以用电池或大电容实现)

2.SPI

1)spi的中文意思是“串行外围接口”
2)spi的应用场景:EEPROM,FLASH,实时时钟,AD转换器,数字信号处理器,数字信号解码器
3)spi接口是在CPU和外围低速器件之间进行同步串行数据传输。在主器件的移位脉冲下,数据按位传输,高位在前,低位在后,全双工通信,数据传输速度总体比IIC快,速度可达到几Mbps。
4)spi接口工作方式:主从工作方式,通常是1个主器件及1个或多个从器件。包括4种信号:MOSI(主器件数据输出,从器件数据输入),MISO(主器件数据输入,从器件数据输出),SCLK(时钟信号,由主器件产生),/CS(从器件使能信号,由主器件控制)
5)补充:spi接口的内部硬件原理,首先它有一个时钟,这个时钟控制移位寄存器来移位,,,,,,,,,,,,,,,,
6)缺点:没有应答机制,不能确定是否接收到数据

3.ds1302硬件

在这里插入图片描述X1和X2接晶振
复位引脚CE,低电平有效
SCLK:串行时钟输入引脚
vcc1工作电源引脚
vcc2备用电源引脚(接入电源断电时,备用电池供电)

4.ds1302的寄存器及片内RAM

ds1302内部包括1个控制寄存器,12个寄存器(7个与日历、时钟相关,存放的数据是BCD码形式)和31个RAM
1)控制寄存器
用于存放ds1302的控制命令字,
ds1302的复位引脚回到高电平后写入的第一个字就是控制命令,控制着ds1302的读写过程**。在这里插入图片描述在这里插入图片描述下图是对控制字节的配置
D6=0,是时钟、日历寄存器
在这里插入图片描述D6=1,是片内31个RAM

在这里插入图片描述下面是日历、时钟寄存器
在这里插入图片描述在这里插入图片描述对于小时寄存器,D7为12/24小时的选择位。D7=1,即12小时制。D7=0,即24小时制。
在12小时模式下,D5=1是上午。D5=0是下午。D4为小时的时位。
在24小时模式下,D5和D4是小时的时位

对于秒寄存器,其CH位是时钟暂停位,为1则时钟暂停,为0则时钟启动。

写保护寄存器,WP为写保护位,WP=1写保护,WP=0未写保护。
对日历、时钟寄存器、片内RAM写时,WP清零。
对日历、时钟寄存器、片内RAM读时,WP置1。

片内RAM

在这里插入图片描述IO输入输出
在这里插入图片描述请添加图片描述

代码的实现

(1)
main()
在这里插入图片描述
初始化时钟芯片
处理数据
显示数据

(2)
初始化
在这里插入图片描述首先看一下Ds1302write(0x8E,0x00);
在这里插入图片描述它是通过配置CE SCLK IO的高低电平(即时序)来实现写入数据的。
请添加图片描述那么Ds1302write(0x8E,0x00);的参数代表什么意义呢?
在这里插入图片描述对于0x8E
需要看一下写保护寄存器的配置
若想对该寄存器实现写操作,
则要配置控制命令为1000 1110用16进制表示成0x8E。
若想对该寄存器实现读操作(不可写),
则要配置控制命令为1000 1111用16进制表示成0x8F。
这里提到的控制命令是指“ds1302的复位引脚回到高电平后写入的第一个字就是控制命令,控制着ds1302的读写过程**。”
ds1302的复位引脚回到高电平后写入的第二个字就是具体的数据
也就是说第一个字节是寄存器的地址,第二个字节是寄存器的模式
若想配置“写保护寄存器”,首先输入0x8E。
紧接着配置寄存器
配置寄存器时,按下图要求配置
在这里插入图片描述写保护寄存器,WP为写保护位,WP=1写保护,WP=0未写保护。
对日历、时钟寄存器、片内RAM写时,WP清零。
对日历、时钟寄存器、片内RAM读时,WP置1。
所以配置的数据应该为0x00
这就解释了Ds1302write(0x8E,0x00);的两个参数
到这里就完成了关闭写保护(即可以向寄存器写值)
关闭写保护之后,就要向具体的“分-秒-时-日-月-周-年”寄存器写入数据。
分-秒-时-日-月-周-年一共是7份数据
这就解释了为什么要循环7次
在这里插入图片描述代码中写入的是 Ds1302Write(WRITE_RTC_ADDR[n],TIME[n]);
WRITE_RTC_ADDR[n]是寄存器地址
TIME[n]是具体的值
uchar code WRITE_RTC_ADDR[7] = {0x80, 0x82, 0x84, 0x86, 0x88, 0x8a, 0x8c};
uchar TIME[7] = {0, 0, 0x15, 0x23, 0x09, 0x04, 0x21};

在这里插入图片描述对于各寄存器地址
注意,写的时候D0配置为0
写入时
秒:1000 0000即0x80
分:1000 0010即0x82
时:1000 0100即0x84
日:1000 0110即0x86
月:1000 1000即0x88
周:1000 1010即0x8a
年:1000 1100即0x8c

读取时
秒:1000 0001即0x81
分:1000 0011即0x83
时:1000 0101即0x85
日:1000 0111即0x87
月:1000 1001即0x89
周:1000 1011即0x8b
年:1000 1101即0x8d
在这里插入图片描述日期
在这里插入图片描述

  • 3
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值