STC51入门笔记(郭天祥C语言)—第十一节:使用DS12C887时钟芯片设计高精度时钟

项目实现功能: 使 用开发板板扩展时钟芯片 DS12C887 设计一个时钟, 要求如下:

( 1 ) 在 1602 液晶上显示年、月、日、星期、时、分、秒, 并且按秒实时更新显示。
( 2 ) 具有闹铃设定及到时报警功能, 报警响起时按任何键可取消报警。
( 3 ) 能够使用板上的按键随时调节各个参数, 按键可设计 4 个有效键, 分别为功能选择键、数值增大键、数值减小键和闹钟查看键。
( 4 ) 每次有键按下时, 蜂鸣器都以短“滴"声报警。
( 5 ) 利用 DS12C887 自身掉电可继续走时的特性, 设计实现断电时间不停、再次上电时时间仍然准确显示在液晶上的功能。

      读者可先根据项目实现功能自行尝试编写程序,当遇到困难时再参考本例中的源代码, 认真反省为何自己没有找到合适的解决办法。如果可能, 建议读者详细阅读DS12C887 的数据手册, 进 一步挖掘它的其他特性, 设计出更有意义的功能。

一、时钟芯片概述:

       在许多电子设备中,通常会进行一些与时间有关的控制,如果用系统的定时器来设计时钟的话,偶然的掉电或晶振的误差都会造成时间的错乱,更糟糕的是,若完全用程序设计时钟还会占用大量的系统资源,从而严重影响系统的其他功能。为此,很多芯片制造公司都设计出了各种各样的实时时钟芯片。
       常见的时钟芯片有两种。
       一种是体积非常小的表贴式元件,通常用在高端小型手持式仪器或设备中,如手机、PDA、MP4播放器、GPS导航仪等。这种芯片在使用时需要外接备份电池和外部晶振,电池用来保持主系统在意外掉电时为时钟芯片供电,外部晶振用来提供时钟芯片所必须的振荡来源,标准频率为32.768kHz,这种芯片体积小、所以引脚也很少,操作起来非常方便,比如,DALLAS公司生产的串行实时时钟芯片DS1302,    DS1337,    DS1338,    DS1390和并行的DS1558等,大家可上美芯官方网站查看更多型号,其中我们日常用的较多的是DS1302。
       另一种体积相对较大,一般为直插式,它的内部集成有可充电锥电池,同时内部还集成了32.768kHz的标准晶振,一旦设定好时间,即使系统的主电源掉电,该时钟芯片仍然可以靠它内部集成的悝电池走数年,当系统重新上电时,又可为锤电池重新充电,这样一来可以非常有效地保持时间的连续性,使用时非常方便。这类芯片如DALLAS公司生产DS12887,DS12887A,DS12B887,DS12C887等。本例讲解的芯片是具有代表性且综合性能较高的DS12C887时钟芯片。

二、DS12C887  时钟芯片介绍:

       DS12C887时钟芯片能够自动产生世纪、年、月、日、时、分、秒等时间信息,其内部有世纪寄存器,从而利用硬件电路解决“千年”问题。DS12C887    中自带锥电池,外部掉电时,其内部时间信息还能够保持10年之久。对千一天内的时间记录,有    12小时制和24小时制两种模式。在12小时制模式中,用    AM和PM区分上午和下午;芯片内部时间的存储方式也有两种,一种用二进制数表示,另一种是用BCD码表示。DS12C887时钟芯片中带有128BRAM,其中11BRAM用来存储时间信息;4BRAM用来存储DS12C887的控制信息,称为控制寄存器;113B    通用RAM供用户使用。此外,用户还可对DS12C887进行编程以实现多种方波输出,并可对其内部的三路中断通过软件进行屏蔽。该芯片内部有一个精密的温度补偿电路用来监视Vee的状态,如果检测到主电源故障,该器件可以自动切换到备用电源供电。VBAeKUP引脚用于支持可充电电池或超级电容,内部包括一个始终有效的涓流充电器。DS12C887可以通过一个多路复用的单字节接口访问,该接口支持Intel和Motorola模式。DS12C887将它自已与石英晶体和电池集成在一起。
       DS12C887特性描述如下:

  • 为充电电池或超级电容提供涓流充电。
  • RTC 计算秒、分、时、星期、日、月、年信息, 具 有润年补偿, 有 效 期至 2099 年。
  • 用二进制数或 BCD 码表示时间。
  • 具有 AM,   PM 标示的 12 小时或 24 小时模式。
  • 夏时制选择。
  • 可选择Intel 或 Motorola 总线时序。
  • 三路中断可分别通过软件屏蔽与检测。
  • 闹钟可设置为每秒一次至每星期一次。
  • 周期可设置在 122μs      500ms 之间。
  • 时钟终止刷新周期标志。
  • 可编程的方波输出信号。
  • 自动电源失效检测和切换电路。
  • 可选的工业级温度范围。

      DS12C887时钟芯片的引脚排列如下图所示,与单片机典型接口如下下图所示。各引脚功能说明如下:

STC51入门笔记(郭天祥C语言)---第十一节:使用DS12C887时钟芯片设计高精度时钟

STC51入门笔记(郭天祥C语言)---第十一节:使用DS12C887时钟芯片设计高精度时钟
1(MOT)—总线操作时序选择端。它有两种总线工作模式,即Motorola和Intel模式。当MOT接Vcc时,选用Motorola模式;当MOT接GND或悬空时,选用Intel模式。本文主要讨论Intel模式。
2,3,16,20,22(NC)—空引脚。
4~11(AD0~AD7)—复用地址数据总线。该总线采用时分复用技术,在总线周期的前半部分,出现在AD0~AD7上的是地址信息,可用以选通DS12C887内的RAM,总线周期的后半部分出现在AD0~AD7上的是数据信息。

12,24(GND,Vcc)一系统电源接入端。其中Vcc接+5V输入,GND接地,当Vcc输入为+5V时,用户可以访问DS12C887内RAM中的数据,并可对其进行读/写操作;当Vee的输入小于+4.25V时,禁止用户对内部RAM进行读/写操作,此时用户不能正确获取芯片内的时间信息;当Vcc的输入小于+3V时,DS12C887会自动将电源切换到内部自带的梩电池上,以保证内部的电路能够正常工作。
13(c/s/)—芯片片选端。低电平有效。
14(AS)—地址选通输入端。在进行读/写操作时,AS的上升沿将AD0~AD7上出现的地址信息锁存到DS12C887上,而下一个下降沿清除AD0~AD7上的地址信息,不论CS是否有效,DS12C887都将执行该操作。
15(R/W)—读/写输入端。该引脚也有两种工作模式,当MOT接Vcc时,R/W_工作在Motorola模式。此时,该引脚的作用是区分读操作还是写操作,R/W_高电平时为读操作,R/W_低电平时为写操作;当MOT接GND时,该引脚工作在Intel模式,此时该引脚作为写允许输入,即WriteEnable,此信号的上升沿锁存数据。
17(DS)—数据选择或读输入脚。该引脚有两种工作模式,当MOT接Vcc时,选用Motorola工作模式,此时,每个总线周期的后一部分的DS为高电平,称为数据选通。在读操作中,DS的上升沿使DS12C887将内部数据送往总线AD0~AD7上,以供外部读取。在写操作中,DS的下降沿将使总线AD0~AD7上的数据锁存在DS12C887中。当MOT接GND时,选用Intel工作模式,此时该引脚是读允许输入引脚,即ReadEnable。
18(RESET)—芯片复位引脚。低电平有效,通常将该引脚接Vcc即可。
19(I/R/Q/)一中断请求输出。低电平有效,用做处理器的中断申请输入。只要引起中断的状态位置位,并且相应中断使能位也置位,I/R/Q/将一直保持低电平,处理器程序通常读取C寄存器来清除I/R/Q/引脚输出,RESET引脚也会清除未处理的中断。没有中断发生时,I/R/Q/为高阻状态,可将多个中断器件接到一条I/R/Q/总线上,只要它们均为漏极开路输出即可。I/R/Q/引脚为漏极开路输出,需要使用一个外接上拉电阻与Vcc相连。
23(SQW)一方波输出引脚。当供电电压Vcc大于4.25V时,SQW引脚可输出方波,

此时,用户可以通过对控制寄存器编程来得到13种方波信号的输出。
DS12C887时钟芯片各寄存器定义如下表所示。

STC51入门笔记(郭天祥C语言)---第十一节:使用DS12C887时钟芯片设计高精度时钟

1、控制寄存器A:

       UIP—更新(UIP)位,用来标志芯片是否即将进行更新。当UIP=1时,更新即将开始;当UIP=0时,表示至少在244μs内芯片不会更新,此时,时钟、日历和闹钟信息可以通过读/写相应的字节获得并设置。UIP位为只读位且不受复位信号(RESET)的影响。通过把寄存器B中的SET位设置为1,可以禁止更新并将UIP位清0。
       DV2,DV1,    DV0—这三位用来开/关晶体振荡器和复位分频器。
       当[DV0,DV1,DV2]=[010]时,晶体振荡器开启且保持时钟运行。
       当[DV0,DV1,DV2]=[11X]时,晶体振荡器开启,但分频保持复位状态。
       RS3,RS2,RS1,RS0—速率选择位。这4个速率选择位用来选择15级分频器的13种分频之一,或禁止分频器输出。按照所选择的频率产生方波输出(SWQ引脚)和/或一个周期性中断。用户可进行如下操作:
(1) 设置周期中断允许位(PIE);
(2) 设置方波输出允许位(SQWE);
(3) 两位同时设置为有效,并且设置频率;
(4) 两者都禁止。
       下表为周期性中断率和方波中断频率表,该表列出了可通过RS寄存器选择的周期中断的频率和方波的频率。这 4 个可读/写位不受复位信号的影响。

2、控制寄存器B:

SET—SET=0,芯片更新正常进行;SET=1,芯片更新被禁止。SET位可读/写,并不受复位信号的影响。
PIE—PIE=0,禁止周期中断输出到IRQ;PIE=1,允许周期中断输出到IRQ。
AIE—AIE=0,禁止闹钟中断输出到IRQ;AIE=1,允许闹钟中断输出到蔽5。
UIE—UIE=0,禁止更新结束中断输出到IRQ;UIE=1,允许更新结束中断输出到IRQ。此位在复位或设置SET位为高时清0。
SQWE—SQWE=0,SQW引脚为低电平;SQWE=1,SQW输出设定频率的方波。
DM—DM=0,设置寄存器存储数据格式为BCD码格式;DM=1,设置寄存器存储数据格式为二进制数格式,此位不受复位信号影响。
24/12—为1,24小时制;为0,12小时制。
DSE一夏令时允许标志。在四月的第一个星期日的1:59:59AM,时钟调到3:00:00AM;在十月的最后一个星期日的1:59:59AM,    时钟调到1:00:    00AM。

3、控制寄存器C:

IRQF—中断请求标志。
当以下4种情况中有一种或几种发生时,IRQF置高:
F=PIE=1F=AIE=1
F=UIE=1    `
RQF=PFIE+AFIE+UFIE
IRQF—旦为高,IRQ脚输出低电平。
所有标志位在读寄存器C或复位后清0。
PF—周期中断标志。
AF—闹钟中断标志。
UF—更新中断标志。

4、控制寄存器D:

VRT—VRT=0,表示内置电池能量耗尽,,此时RAM中数据的正确性就不能保证了。

5、时序图分析:

Mototola和Intel模式总线读/写时序图下面三个图。

STC51入门笔记(郭天祥C语言)---第十一节:使用DS12C887时钟芯片设计高精度时钟

STC51入门笔记(郭天祥C语言)---第十一节:使用DS12C887时钟芯片设计高精度时钟

STC51入门笔记(郭天祥C语言)---第十一节:使用DS12C887时钟芯片设计高精度时钟

6、操作时需要注意的5个问题:

(1)  本章仅介绍了DS12C887时钟芯片的主要内容,具体操作时要求读者务必到其官方网站下载完整资料仔细阅读。
(2)  有一点要特别申明,大家在自己连接电路时,首先要确认自己连接好的电路是绝对正确的,否则无论如何修改程序也难以得出预期的结果。
(3)  按键可按如下方式设置:功能键为S2、数值增大键为S13、数值减小键为S17、闹钟查看键为S4。
(4)  存储器数据格式有两种模式:BCD码和二进制数。为方便操作,我们设置为二进制数模式,通过设置寄存器B中的DM=1来选择二进制数模式。
(5)  DS12C887时钟芯片在出厂时内部振荡器均为关闭状态,这是为了避免在开始使用前消耗捚电池能量。寄存器A的第4~6位为010时,打开振荡器并使计时链可用。为11X组合时,(DV2=1,DV1=1,DV0=X)打开振荡器,但振荡器的计时链保持为复位状态。这三位的其他组合方式均使振荡器关闭。因此,在首次操作DS12C887芯片时,必须首先设置这三位的状态。

 

三、如何用实验板扩展本实验/h1>

       DS12C887 是一款纯数字式的芯片,只 要它与单片机的1/0 口直接相连就可以操作它了, 连接 TX- IC 实验板时需要准备一小块面包电路板,一些杜邦线。DS12C887 实物图如下图左所示, 杜邦线如下图右所示, 电路板如下下图所示:

STC51入门笔记(郭天祥C语言)---第十一节:使用DS12C887时钟芯片设计高精度时钟

STC51入门笔记(郭天祥C语言)---第十一节:使用DS12C887时钟芯片设计高精度时钟

STC51入门笔记(郭天祥C语言)---第十一节:使用DS12C887时钟芯片设计高精度时钟

四、原理图分析:

STC51入门笔记(郭天祥C语言)---第十一节:使用DS12C887时钟芯片设计高精度时钟

五、程序代码:

主函数

来源:Sumjess

声明:本站部分文章及图片转载于互联网,内容版权归原作者所有,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2019年5月7日
下一篇 2019年5月8日

相关推荐