DS1302实时时钟

1.芯片简介

DS1302可以对年,月,日,周,时,分,秒进行计时,还有闰年补偿以及不同月份天数不同的功能。

单片机定时器计时缺点:

(1)精度不高

(2)占用单片机的CPU时间

(3)不能掉电继续运行,用这个芯片掉电不丢失数据,会继续运行,下次开启,是正确时间!!

(DS1302时钟芯片会带有一个备用电池,如果掉电,会自动切换到备用电池,继续进行工作)

RTC:实时时钟,是一种集成电路,通常称为时钟芯片(DS1302是其中一种)

DS3231 DS12C887

2.DS1302封装类型

(1)直插封装(DIP)直接有引脚

(2)贴片封装(SO) 

3.贴片芯片引脚定义

(1)VCC2是主电源(即和单片机的电源连在一起)

注意:具有涓细电流充电功能,即在主电源VCC2有电时候,会对备用电池充电(可充电电池)

(2)VCC1是备用电源,断电时候,继续供电。连接到备用电池(电池正极接VCC1,负极接GND)

(3)GND:地(低电平)

(4)X1、X2:32.768KHz晶振(有关实时时钟的芯片,接的晶振都是32.768KHz,方便易用,精度较高)

注意:经过内部电路处理,能输出一个1Hz的标准频率(精度很高)

(5)CE:芯片使能(高电平使能)

(6)I/O:数据输入/输出

(7)SCLK:串行时钟(上升沿触发移位)

注意:利用以上三个引脚,可以将单片机内部时钟读出,从而进行显示。同理,可以进行时钟写入

(读写)

4.内部结构(31*8)

<有31个寄存器>

注意:内部有一些寄存器,寄存器里面存放的就是我们的时钟数据,通过读取显示,写入改变时钟信息

(1)内部的这些寄存器都是特殊寄存器,都有特殊功能。比如,表示秒的寄存器,就是计秒的功能,会在59的时候清零等。

CE:芯片不使能,时钟也在工作。这个引脚只控制,是否允许访问或者修改实时时钟数据

(CE使能,让我们可以读取和写入我们所需要的实时时钟数据)

注意:WP(写入使能):置1,写入操作无效。

(2)地址命令字节(在哪写入 在哪读出)

1.作用:(1)在哪写入什么 (2)在哪读取什么

在哪体现地址,写入(通过什么写入),什么:数据

例如:在秒寄存器的地址,写入我们设置的秒的数据。

在秒寄存器的地址,读取秒寄存器的数据

命令字:是一个字节有8位

最高位7:固定为1

第6位:操作RAM,置1;操作CK杠(时钟),置0

从第1位到第5位是我们要操作的寄存器的地址:要对哪个寄存器写入或者读取(秒,分,时,年等等)

秒地址是 00000。依次类推:分是00001

第0位:选择写入(置0)还是读取(置1)

想读月的数据

10 00100 1

上面的读写对应的81h 80h(秒)都是对地址命令字节8位的赋值

!!!!时序图!!!!

CE:在操作过程中要置1,操作结束置0

SCLK:时钟上升沿写入数据,时钟下降沿读出数据

(1)读取:在时钟上升沿 I/O口的数据将被写入(从而进行操作);在时钟的下降沿:DS1302会将所需要的时钟数据输出。

(2)写入:在时钟上升沿,I/O口数据写入(对具体时钟进行操作);在时钟上升沿:DS1302将我们需要写入的时钟数据写入。

注意:SPI:时钟上升沿写入数据,时钟下降沿读取数据。输入和输出分开了

通过最低位进行判断写入或者读出:置1是读出,置0是写入

注意:SCLK,CE,I/O的地址命令字节由单片机控制,输出或者输入的数据是DS1302控(D0~D7)

74HC595 进行串行输入是高位~低位

DS1302 进行串行输入是低位~高位

DS1302

(1)CE置1

(2)I/O口发R/W杠

(3)时钟上升沿

如此即可将命令字的最低位写入了数字(0/1)

注意:当读出时候,在下降沿,将I/O口释放,单片机不再操作,由DS1302来控制I/O口输出数据

单片机控制时钟,单片机给个下降沿,DS1302输出一位数据(从低到高)

当写入的时候,在上升沿,给I/O口数据,通过上升沿,来进行数据写入。

注意:在读出数据时,第一步要写入命令字节,但是我们注意到,写入命令字节时(前8个脉冲)

的最后一个脉冲下降沿结束变成了读出数据的第一个下降沿,并不希望这样;因为这样会让这里这个脉冲,分不清是在写入命令字还是读出数据。导致在写入未结束的时候,已经读出数据了

解决:我们将时钟调换位置,先给0,再给1,以上升沿为结束,这样,在写入结束时,还未开始读取。

从而在红线包裹之前结束,此时不会读取数据;然后在读取数据时候,以下降沿为结束。

5.BCD码

BCD码:是以四位二进制来表示1位十进制的;使用高四位表示十位的数,低四位表示个位的数

在DS1302内部寄存器,存储数据不是以二进制进行存储,而是以BCD码的形式进行存储

注意:在LCD 显示的数据,即为我们读取的BCD码,我们要将BCD码转变成十进制再进行表示

(BCD码的高四位和低四位,都只能表示0~9,再超出即不合法)

9变为16的原因:由于我们在读出寄存器的数据之后,显示在LCD1602上面会转成十进制(将二进制转为十进制);但是DS1302上面的寄存器不是二进制,而是BCD码,所以是将bcd码作为二进制码进行转变。

BCD码:                                                                                   (二进制转十进制)

9:0000 1001   (显示会将BCD码看成二进制进行转化)          9

10:0001 0000                                                                           16

在后面的LCD1602显示,以十六进制显示就正确了(不会越界出16)

由于  0000  1001的BCD码以16进制显示

0 9  十六进制

0001 0000  BCD码

1 0  十六进制

0010 0000  BCD码

2 0  十六进制

BCD码本身就是十进制的 ,所以不会超出十六进制的范围

  • 22
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值