单片机RTC及时钟芯片的时间到底从哪一年起始?

这篇具有很好参考价值的文章主要介绍了单片机RTC及时钟芯片的时间到底从哪一年起始?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、前言

实时时钟RTC在嵌入式系统中是常用的功能,有的单片机有RTC功能,也有专用的RTC芯片,如DS1302、DS1307等。但RTC的“年寄存器”长度有限,一般不会包含所有年份,都是从0开始,到某个数字结束。这个开始的年份“0”到底是哪一年呢?很多人说是1970年1月1日开始,真是这样吗?
没有调查就没有发言权,本文笔者将测试多种单片机,使用内部RTC功能,以及专用的RTC芯片,考证单片机RTC及常用时钟芯片的时间到底从哪一年起始。
要讨论RTC等等时间从哪一年开始,需要用到历法知识,我们需要在特殊的时间点检验RTC的时间是如何变化的,比如闰年的闰月2月28日23:59:59秒之后,时间变成了哪一天。

二、实验测试

1.STM32F103系列内部RTC功能

在STM32F103单片机内部RTC实时时钟驱动程序中,我们讨论了STM32F103C8T6单片机内部RTC功能,该功能只有一个计数器,每1秒加1,没有年月日及时间寄存器,读取计数器的值后,需要使用软件计算出时间,才能实现日历、时钟功能,软件算法需要考虑历法中的闰年等特殊情况,因此,可得出结论:STM32F103系列内部RTC没有具体的起始时间,起始时间由软件算法确定;在前述的博文中,选择用UTC时间戳(以1970年1月1日00:00:00为开始时间),可以使程序通用性更强。

2.STM32F407系列内部RTC功能

该型号芯片是STM32具有完整RTC功能的代表,先看F407数据手册中关于RTC的描述:
单片机RTC及时钟芯片的时间到底从哪一年起始?,单片机,嵌入式,单片机,mcu
这与F103不同,RTC具有完整的时间、日历寄存器,再看各寄存器的大小:
单片机RTC及时钟芯片的时间到底从哪一年起始?,单片机,嵌入式,单片机,mcu
单片机RTC及时钟芯片的时间到底从哪一年起始?,单片机,嵌入式,单片机,mcu
我们只需要关心年份寄存器的大小即可,由红框中的描述可知,年份只能表示2位十进制数,即0~99。日期寄存器上电复位值为0x0000 2101,对应00年1月1日星期1,还有时间寄存器(详见手册)复位值为0x0000 0000,对应时间为00:00:00。
接下来,我们使用STM32F407VGT6,首次上电后,不进行RTC的初始化配置,直接读取寄存器,通过串口输出,看看时间如何:
单片机RTC及时钟芯片的时间到底从哪一年起始?,单片机,嵌入式,单片机,mcu

可看出时间确实是从00年1月1日00时00分00秒,星期一开始的,与手册一致。把时间设置为00-02-28 23:59:50,星期几忽略,看10秒后时间如何变化:
单片机RTC及时钟芯片的时间到底从哪一年起始?,单片机,嵌入式,单片机,mcu
时间变成了2月29日,看来是把00年当作闰年处理;再把时间设置为01-02-28 23:59:50,星期几忽略,看10秒后时间如何变化:
单片机RTC及时钟芯片的时间到底从哪一年起始?,单片机,嵌入式,单片机,mcu
时间变为3月1日,是平年。
测试发现,00~99之间可被4整除的年份都被当作闰年,其他年份为平年,不再贴图。

3.瑞萨R5F100内部RTC功能

R5F100FE是瑞萨RL78/G13系列较常用的芯片,对RTC功能的描述如下:
单片机RTC及时钟芯片的时间到底从哪一年起始?,单片机,嵌入式,单片机,mcu
手册中直接说最长计数达到99年,再看年计数寄存器的描述:
单片机RTC及时钟芯片的时间到底从哪一年起始?,单片机,嵌入式,单片机,mcu
这就比较明朗了,年是从00开始,最多到99,而且认为年份可整除4是闰年,与STM32F407相同。根据手册的描述,复位时,寄存器初始化为00年1月1日00:00:00,星期日(手册中说明,星期寄存器初始化为0,对应星期日):
单片机RTC及时钟芯片的时间到底从哪一年起始?,单片机,嵌入式,单片机,mcu
同样,把时间设置为00-02-28 23:59:50,星期几忽略,看10秒后时间如何变化:
单片机RTC及时钟芯片的时间到底从哪一年起始?,单片机,嵌入式,单片机,mcu
时间变为2月29日,即00年当做闰年处理;再把时间设置为01-02-28 午夜,时间如何变化:
单片机RTC及时钟芯片的时间到底从哪一年起始?,单片机,嵌入式,单片机,mcu
时间变为3月1日,是平年。
测试发现,00~99之间可被4整除的年份都被当作闰年,其他年份为平年,不再贴图。

4.时钟芯片DS1302

DS1302手册中描述如下,带闰年补偿功能,可到2100年:
单片机RTC及时钟芯片的时间到底从哪一年起始?,单片机,嵌入式,单片机,mcu
再看相关寄存器,年寄存器只能表示BCD码格式的2位数,00~99年,如下图:
单片机RTC及时钟芯片的时间到底从哪一年起始?,单片机,嵌入式,单片机,mcu
笔者的这份手册中,没有说明各寄存器的初始值是多少,我们通过读取寄存器的值来查看,和前述方法一样,不做任何设置,直接读取寄存器,通过串口输出:
单片机RTC及时钟芯片的时间到底从哪一年起始?,单片机,嵌入式,单片机,mcu
可知DS1302在首次上电复位时,寄存器被初始化为00年1月1日00:00:00,星期一,与STM32F407相同。接下来,把时间设置为00-02-28 23:59:50,星期几忽略,看时间如何变化:
单片机RTC及时钟芯片的时间到底从哪一年起始?,单片机,嵌入式,单片机,mcu
时间变成了2月29日,与STM32F407、R5F100FE一样,是把00年当作闰年处理;再把时间设置为01-02-28 23:59:50,星期几忽略,看时间如何变化:
单片机RTC及时钟芯片的时间到底从哪一年起始?,单片机,嵌入式,单片机,mcu
时间变为3月1日,是平年。
测试发现,和STM32F407、R5F100FE一样,00~99之间可被4整除的年份都被当作闰年,其他年份为平年,不再贴图。

5.时钟芯片DS1307

D31307是IIC接口的设备,除此之外,与DS1302有非常多的相似之处,都有闰年补偿功能,可计时到2100年,以下是DS1307的主要寄存器:
单片机RTC及时钟芯片的时间到底从哪一年起始?,单片机,嵌入式,单片机,mcu可看出,寄存器除了地址不同外,其他基本功能类似;在手册中有明确的说明,首次上电,寄存器被初始化为00年1月1日00:00:00,星期一,如下:
单片机RTC及时钟芯片的时间到底从哪一年起始?,单片机,嵌入式,单片机,mcu单片机RTC及时钟芯片的时间到底从哪一年起始?,单片机,嵌入式,单片机,mcu
同样,把时间设置为00-02-28 23:59:50,星期几忽略,时间会切换为2月29日:
单片机RTC及时钟芯片的时间到底从哪一年起始?,单片机,嵌入式,单片机,mcu
经测试,DS1307与DS1302、STM32F407以及R5F100FE一样,将00~99之间可被4整除的年份都被当作闰年,其他年份为平年,不再贴图。

三、总结

1.文中用到的设备,初始年份大多为00年,即四位年份yyyy格式的后两位,且当作闰年处理,如果是指1970年的话,1970年不是闰年;无论是单片机还是RTC专用芯片,没有一个手册中提到1970年1月1日这个时间,因此,说RTC功能的起始时间是1970-01-01 00:00:00的,不准确,也没有依据;认为单片机的RTC及时钟芯片时间从1970年1月1日00:00:00开始,是因为这个时间点是Unix时间戳的起始时间,在很多计算机系统和编程语言中被广泛使用;但RTC和时钟芯片的实际初始时间可能会因不同的硬件设备、制造商或系统设计而有所差异,因寄存器大小的限制,一般只计时0~99年的范围,而起始时间,实际上可由使用者自己规定;
2.对于类似STM32F103C8T6这样,RTC功能只有一个计数器,没有年月日时分秒这种时间寄存器的,需要由软件算法配合来计时,起始时间可以任意;
3.对于计时范围00~99年的设备,每4年为一个闰年,在前后100年范围内可用,但要注意的是,并不是每个整百年都是闰年,例如,2000年是闰年,但是1900年、2100年就不是闰年,因此这种情况不能单纯的将年份加1900或者2000处理,而是要经过特殊处理,可以看出,这些器件都是为本世纪设计的;如果时间来到下一世纪2100年,这些芯片没有升级换代,有程序员把00年直接当做2100年而且没经过特殊处理,是会出问题的;当然,有摩尔定律在,70多年后,这种情况是不会发生的,因为那时候这些芯片应该不存在了;
4.以上结论仅基于所述的种类有限的设备,经过测验得出,可能以偏概全了;如果有人做过更深入的研究,或者是做芯片相关功能设计的,欢迎批评指正。文章来源地址https://www.toymoban.com/news/detail-814538.html

到了这里,关于单片机RTC及时钟芯片的时间到底从哪一年起始?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 51单片机实验三:数码管显示时钟 按键调节时间时闪烁提示

    51单片机实验三:数码管显示时钟 按键调节时间时闪烁提示

    功能效果:1.时分秒的动态显示。2.用三个按键实现时分秒的修改,调节的数字闪烁提示。  

    2024年02月11日
    浏览(19)
  • C51单片机的电子时钟(数码管显示+独立按键模块修改及暂停时间)

    C51单片机的电子时钟(数码管显示+独立按键模块修改及暂停时间)

    IMG_1120 通过查看这三个原理图我们可以得知控制K1、K2、K3及K4是通过P31、P30、P32及P33来实现的,控制8个数码管是P22、P23及P24来实现, 控制发光二极管则由P00-P07来实现。 代码分为三部分分别为main.c、key.h、key.c scankey()函数的主要代码,通过软件入手提高系统的可靠性,防止外

    2024年02月05日
    浏览(10)
  • 关于单片机的时钟浅谈及STM32F103/F030单片机的内外时钟切换问题

    关于单片机的时钟浅谈及STM32F103/F030单片机的内外时钟切换问题

    本文主要讲解单片机的时钟系统的相关知识,并进行超频测试,同时介绍如何在STM32F0单片机上进行内外时钟的切换,在不使用外部晶振或者外部晶振不启动时自动切换内部时钟的方法。 问题来源于群里的一次问答: 诚然,当使用固件库时,把外部晶振摘掉,系统确实会自动

    2024年02月15日
    浏览(10)
  • 51单片机数字时钟

    51单片机数字时钟

    我们学单片机,一般都会写数字时钟编程。它能帮助我们: a. 能够系统性地总结掌握的知识,将单元模块知识有机的结合在一起。 b. 能够充分协调好硬件与软件之间的相互结合,合理设计硬件电路。 c. 掌握单片机 C 语言判断语句、分支语句以及子程序调用等编程知识。

    2024年02月11日
    浏览(11)
  • 单片机数字时钟/闹钟

    单片机数字时钟/闹钟

    1.设计概述: 由单片机 AT89C51芯片和动态数码显示管为核心,辅以必要的电路,构成一个数字时钟。 时钟显示方式为:时-分-秒。时钟计时周期为24小时,显满刻度为“23时59分59秒”。 具有调整功能。设置有三个按键,分别对时、分、秒进行调整校对。 外加可当闹钟使用,闹钟

    2024年02月11日
    浏览(8)
  • 单片机原理与应用课程设计-基于51单片机的时钟日历

    单片机原理与应用课程设计-基于51单片机的时钟日历

    摘 要 本课程设计是基于51单片机的日历时钟设计。作为嵌入式系统中常用的控制器,单片机在各种电子设备和系统中广泛应用。日历时钟作为一个常见的功能模块,在现代生活中具有重要意义。因此,设计一个基于51单片机的日历时钟,不仅有助于我们掌握单片机编程技术和

    2024年02月20日
    浏览(47)
  • 单片机-定时器时钟

    单片机-定时器时钟

    89C52RC 1.定时器0,lcd1602显示时间。    main.c

    2024年02月11日
    浏览(12)
  • 51单片机实时时钟显示

    51单片机+DS1302+DS18B20+LCD12864 用的IIC通信,写的一个ds3231时钟模块的程序,可更改时间,下面是.h文件里面的部分代码 #ifndef __ds3231_h #define _ ds3231_h #include reg51.h #define uchar unsigned char #define uint unsigned int extern uchar day2,Htemp2,Mtemp2,Stemp2; //星期,时分秒 extern ucharYtemp2,Mtemp2,Dtemp2,Ttem

    2024年02月09日
    浏览(14)
  • 基于单片机的电子时钟

    基于单片机的电子时钟

    点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/87453487 源码获取 本次设计由于前期我们已经完成了单片机最小系统的制作,为了节省时间,故利用已有资源,选择用单片机最小系统来实现数字钟的制作。采用的是以单片机芯片为核心,辅以必

    2024年02月04日
    浏览(8)
  • 51单片机——DS1302时钟

    51单片机——DS1302时钟

    目录 1.前言 1.1 实验现象 2. DS1302的介绍 2.1 DS1302的引脚定义以及应用电路 2.2 DS1302内部结构 2.21  DS1302内部特殊寄存器 2.22 时序 2.3 BCD码 3.源码 3.1 main.c 3.2 DS1302.c 3.3 DS1302.h 3.4 LCD1602.c 3.5 Delay.c 3.6 Delay.h 之前我们已经使用了定时器做过了简易的时钟了,为什么还要用DS1302制作时钟

    2024年01月16日
    浏览(8)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包