实时时钟DS1302

本文详细介绍了DS1302实时时钟的工作原理、接线方法、时序图解读和编程实践,包括读写时序、SPI接口、时钟格式、BCD码转换等内容,并提供了编程实例,讲解了如何通过SPI接口与单片机进行通信,读取和设置DS1302的时间。
摘要由CSDN通过智能技术生成

1 RTC有关的背景知识

1.1 什么是实时时钟(rtc for real time clock)

(1)时间点和时间段的概念区分。

(2)单片机为什么需要时间点。

(3)RTC如何存在于系统中(单片机内部集成 or 单片机外部扩展)。

1.2 DS1302介绍

(1)数据手册。

(2)SPI数字接口访问。

(3)内部存着一个时间点信息(年月日时分秒星期几),可以读写,上电自动走表。

1.3 RTC学习的关键点

(1)SPI接口及其相关概念:3线or4线、同步、主从、串行等。

(2)时序的理解和编程实现。

2 原理图和接线

2.1 原理图分析

(1)DS1302引脚介绍。

(2)原理图中跳线设计对接线的影响。

这里写图片描述

2.2 接线

(1)正确的接线要点:
JP595断开,是为了让P3.4在控制DS1302的时候,不影响74HC595工作;
JP1302接上,是为了让P3.4能够控制到DS1302;
J11断开,是为了让P3.5在控制DS1302的时候,不影响NE555模块的工作。

(2)详解接线设置的原理和必要性:
正常的产品一般不会这么设计,正常产品一般接线都是确定的,一般不会复用。
开发板来说,主要是为了学习,所以会放很多个模块,所以这时候GPIO就不够用,这时候就需要复用设计。一个引脚接多个模块就会互相影响(有2种可能:一个是A模块工作时B模块莫名其妙的工作,二是有时候B模块会影响到A模块正常工作)。对于复用引脚的情况,接线的关键是确认目标模块接线ok时还不影响其他模块。

3 数据手册

DS1302 涓流充电计时芯片包含一个实时时钟/日历和 31 字节的静态 RAM,通过简单的串行接口与微处理器通讯。这个实时时钟/日历提供年月日,时分秒信息。对于少于 31 天的月份月末会自动调整,还有闰年校正。由于有一个 AM/PM 指示器,时钟可以工作在 12 小时制或者 24小时制。

使用同步串行通讯简化了 DS1302 与微处理器的接口。与时钟/RAM 通讯只需要三根线: CE,I/O (数据线), and SCLK (串行时钟).。数据输出输入时钟/RAM 一次 1字节或者在脉冲串中多达 31 字节,DS1302 被设计工作在非常低的电能下,在低于 1μW 时还能保持数据和时钟信息。

串行计时器的主要元素:移位寄存器,控制逻辑,振荡器,实时时钟,还有 RAM。

这里写图片描述

4 时序图的读法

4.1 时序图关键点

(1)横轴代表时间,纵轴是同一时间点各个通信线的状态。

(2)静态与动态2个角度去看。

(3)注意SCLK的边沿处。

这里写图片描述

4.2 结合示例代码来理解时序

/*******************************************************************************
* 函 数 名         : Ds1302Write
* 函数功能         : 向DS1302命令(地址+数据)
* 输    入         : addr,dat
* 输    出         : 无
*******************************************************************************/

void Ds1302Write(uchar addr, uchar dat)
{
    uchar n;
    RST = 0;
    _nop_();

    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_();
}

/**********************
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值