CPU通过读的内部时标寄存器得到当前的时间和日历,也可通过选择二进制码或BCD码初始化芯片的10个时标寄存器。其中114B的非易失性静态RAM可供用户使用,对于没有RAM的单片机应用系统,可在主机掉电时来保存一些重要的数据。DS12887的4个状态寄存器用来控制和指出DSl2887模块当前的工作状态,除数据更新周期外,程序可随时读写这4个寄存器。下面介绍各寄存器的功能和作用。
1.DS12887内部RAM各专用寄存器的功能
表9-1是DS12887内部RAM和各专用寄存器地址分配表。其中,地址00H~03H单元的取值范围是00H~3BH(十进制0~59);04 H~05 H单元按12小时制的取值范围是上午(AM)01H~0CH(1~12),下午(PM)81H~8CH(81~92),按24小时制的取值范围是00H~17H(0~23);06 H单元的取值范围是00 H~07H(0~7);07 H单元的取值范围是01H~1FH(1~31);08单元的取值范围是01H~0CH(1~12);09H单元的取值范围是00 H~63 H(0~99)。
表9-1 DS12887内部RAM和专用寄存器地址
注 0EH~7FH是不掉电RAM区,共114B。
对DS12887内部RAM和各专用寄存器的访问可如下实现:若片选地址CS=#C000H,则芯片内部RAM和寄存器的地址为#C000H~#C07FH。应指出,尽管DS12887的专用时标年寄存器只有一个,但通过软件编程可利用其内部的不掉电RAM区的一个字节实现年度的高两位显示。DSl2887可跨越2000年的计时。
2.各寄存器的作用
(1)寄存器A
寄存器A各位不受复位的影响,各位的格式见表9-2。其中:
1)UIP更新周期标志位。该位为1时,表示芯片正处于或即将开始更新周期,此时不准读/写时标寄存器;该位为0时,表示至少在44μs后才开始更新周期,此时程序可以读芯片内时标寄存器,该位是只读位。
2)DV0、DV1、DV2:芯片内部振荡器RTC控制位。当芯片解除复位状态,并将010写入DV0、DV1、DV2后,另一个更新周期将在500ms后开始。因此,在程序初始化时可用这3位精确地使芯片在设定的时间开始工作。DS12887固定使用32768Hz的内部晶体。所以,DV0=0,DV1=1,DV2=0,即只有010的一种组合选择即可启动RTC。
3)RS3、RS2、RS1、RS0:周期中断可编程方波输出速率选择位。对这些位进行不同的组合可以产生不同的输出。程序可以通过设置寄存器B的SQWF和PIE位控制是否允许周期中断和方波输出。寄存器A输出速率选择位见表9-2。
(2)寄存器B
寄存器B允许读/写,主要用于控制芯片的工作状态。寄存器B的控制字的格式见表9-3。其中:
1)SET:当该位为0时,芯片处于正常工作状态,每秒产生一个更新周期来更新时标寄存器;该位为1时,芯片停止工作,程序在此期间可初始化芯片的各个时标寄存器。
2)PIE、AIF、UIE:分别为周期中断、报警中断、更新周期结束中断允许位。各位为1时,允许芯片发出相应的中断。
3)SQWF:方波输出允许位。SQWF=1,按寄存器A输出速率选择位所确定的频率方波;SQWF=0,脚SQWF保持低电平。
4)DM:时标寄存器用十进制BCD码表示或用二进制表示格式选择位。DM=0时,为十进制BCD码;DM=1时,为二进制码。(www.daowen.com)
5)24/12:24/12小时模式设置位。24/12=1时,为24小时工作模式;24/12=0时,为12小时工作模式。
表9-2 控制寄存器A各位的格式及输出速率选择
表9-3 寄存器B/C/D的控制字的格式
6)DSE:夏令时服务位。DSE=1,夏时制设置有效,夏时制结束可自动刷新恢复时间;DES=0,无效。
(3)寄存器C
该寄存器的特点是,程序访问该寄存器后,该寄存器的内容将自动清0,从而使IRQF标志位变为高电平,否则,芯片将无法向CPU申请下一次中断。寄存器C的控制字的格式见表9-3。其中:
1)IRQF:中断申请标志位。该位的逻辑表达式为:IRQF=PF·PIE+AF·ALE+UF·UIE。当IRQF位变为1时,引脚变为低电平引起中断申请。
2)PF、AF、UF:这3位分别为周期中断、报警中断、更新周期结束中断标志位。只要满足各中断的条件,相应的中断标志位将置1。
3)位3~位0:未定义的保留位。读出值始终为0。
(4)寄存器D
寄存器D为只读寄存器。
寄存器D的控制字的格式见表9-3。其中:
1)VRT:芯片内部RAM与寄存器内容有效标志位。该位为1时,指芯片内部RAM和寄存器内容有效。读该寄存器后,该位将自动置1。
2)BIT6~BIT0:保留位。读出的数值始终为0。
3.DSl2887的中断和更新周期
DS12887处于正常工作状态时,每秒钟将产生一个更新周期。芯片处于更新周期的标志是寄存器A中的UIP值为1。在更新周期内,芯片内部时标寄存器中的数据处于更新阶段。故在该周期内,微处理器不能读时标寄存器的内容,否则将得到不确定数据。更新周期的基本功能主要是刷新各个时标寄存器中的内容,同时秒时标寄存器内容加l,并检查其他时标寄存器内容是否有溢出,如有溢出则相应进位日、月、年。更新周期的另外一个功能是,检查3个时、分、秒报警时标寄存器的内容是否与对应时标寄存器的内容相符。如果相符,则寄存器C中的AF位置1。如果报警时标寄存器的内容为C0H~FFH之间的数据,则为不关心状态。
为了采样时标寄存器中的数据,器件提供了两种避开在更新周期内访问时标寄存器的方法。第一种方法是利用更新周期结束发出的中断。可以编程且允许在每次更新周期结束后发生中断申请,提醒CPU将有998ms左右的时间去获取有效的数据,在中断之后的998ms时间内,程序可先将时标数据读到芯片内部的不掉电静态RAM中。因为芯片内部的静态RAM和状态寄存器是可随时读写的,在离开中断服务子程序前应清除寄存器C中的IRQF位。另一种方法是,利用寄存器A中的UIP位来指示芯片是否处于更新周期。在UIP位由低变高244μs后,芯片将开始其更新周期。所以,若检测到UIP位为低电平时,则利用244μs的间隔时间去读取时标信息;如检测到UIP位为1。则可暂缓读数据,等到UIP位变成低电平后再去读数据。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。