
关键词 时钟控制寄存器 时标寄存器 状态寄存器 更新周期编程
随着2000年的即将来临,“千年虫”问题成为困扰当今世界的一大难题。过去采用两位数表示年度的日历系统将要用四位数来表示,因此有关的计算机操作系统和应用软件都要作相应的修改。据此,美国Dallas公司推出两款数字时钟芯片DS12887/DS12C887,两款时钟芯片都将在1999年12月31日23时59分59秒时顺利地跳到2000年1月1日零时,并能实现2000年2月29日的闰年提示,是时钟芯片DS1287的增强品种,结构上相当于MC146818的改进型。芯片都采用24引脚双列直插式封装,其引脚接口逻辑和内部操作方式与MC146818基本一致,所不同的是DS12887/DS12C887芯片的晶体振荡、振荡电路、充电电路和可充电锂电池等一起封装在芯片的上方,组成一个加厚的集成电路模块,因此,DS12887/DS12C887时钟片无需MC146818的电源电位检测端(PS),电路通电时其充电电路便自动对可充电电池充电,充足一次电可供芯片时钟运行半年之久,正常工作时可保证时钟数据十年内不会丢失。此外,片内通用的RAM为MC146818的两倍以上。DS12887/DS12C887内部有专门的接口电路,从而使得外部电路的时序要求十分简单,使它与各种微处理器的接口大大简化。使用时无需外围电路元件,只要选择引脚MOT电平,即可和不同计算机总线连接。
1、 主要技术特点
DS12887/DS12C887具有下列主要技术特点:
(1) 具有完备的时钟、闹钟及到2100年的日历功能,可选择12小时制或24小时制计时,有AM和PM、星期、夏令时间操作,闰年自动补偿等功能。
(2) 具有可编程选择的周期性中断方式和多频率输出的方波发生器功能。
(3) DS12887内部有14个时钟控制寄存器,包括10个时标寄存器,4个状态寄存器和114bit作掉典保护用的低功耗RAM。
(4) 由于该芯片具有多种周期中断速率时钟中断功能,因此可以满足各种不同的待机要求,最长可达24小时,使用非常方便。
(5) 时标可选择二进制或BCD码表示。
(6) 工作电压:+4.5~5.5V。
(7) 工作电流:7~15mA。
(8) 工作温度范围:0~70℃。
2、 DS12887/DS12C887的引脚排列
DS12887/DS12C887的引脚排列见图1所示。图2为DS12887/DS12C887的内部电路结构框图。芯片各引脚功能如下: MOT:计算机总线选择端;SQW:方波输出,速率和是否输出由专用寄存器A、B的预置参数决定;AD0~AD7:地址/数据(双向)总线,由AS的下降沿锁存8位地址;R/W:读/写数据;AS:地址锁存信号端;DS:数据读信号端;CS:选通信号端,低电平有效;IRQ;中断申请,由专用寄存器决定;RESET
:复位端;NC:空引脚。
5、 DS12887/DS 12C887的编程方法
5.1 DS12887/DS12C887初始化方法
DS12887/DS12C887采取连续工作制,一般无须每次都初始化,即使是系统复位时也如此。但初始化时,首先应禁止芯片内部的更新周期操作,所以先将DS12887/DS12C887状态寄存器B中的SET位置“1”,然后初始化00H~09H时标参数寄存器和状态寄存器A,此后再通过读状态寄存器C,清除寄存器C中的周期中断标志位PF,报警中断标志位AF,更新周期结束中断标志位UF。通过读寄存器口D中的VRT位,读状态寄存器口后VRT位将自动置“1”,最后将状态寄存器B中的SET位置“0”,芯片开始计时工作。
5.2 闹钟单元的使用方法
DS12887/DS12C887共有3个闹钟单元,分别为时、分、秒闹钟单元。在其中写入闹钟时间值并且在时钟中断允许的情况下每天到刻就会产生中断申请信号。但这种方式每天只提供一次中断信号。另一种方式是在闹钟单元写入“不关心码”,在时闹钟单元写入C0H~FFH之间的数据,可每小时产生一次中断;在时、分闹钟单元写入C0H~FFH之间的数据,可每分钟产生一次中断;而时、分、秒闹钟单元全部写入FFH,则每秒钟产生一次中断。但这种方式也只能在整点、整分或整秒产生一次中断。但控制系统要求的定时间隔不是整数时,则应该通过软件来调整实现。
5.3 DS12887/DS12C887的编程
图3所示的是ATC52单片机与DS12887/DS12C887的接口电路,片选地址CS=#0DDXXH。DS12887/DS12C887状态寄存器的参数设置如下:状态寄存器A置为20H,它表示采用的时钟频率为32.678kHz(00100000),禁止脚SQW输出。状态寄存器B置为22H,它表示允许报警中断,禁止其他中断,置24(00100010)小时模式,时标寄存器内容用BCD码表示,禁止方波输出和夏令时服务。如果要求定时间隔为1秒到59分钟的中断申请,那么时报警寄存器置FFH,这就表示了该报警时标处于不关心状态。下面给出了DS12887/DS12C887的有关程序。
5.3.1 DS12887/DS 12C887初始化程序
Ttime:MOV DPTR ,#0DD0BH;寄存器B中的Rest位置“1”,禁止芯片内部的更新周期
MOV A,#0A2H
MOV @DPTR,A
;初始化10bit时标寄存器程序,输入当前时间:1999年2月6日,星期6,12:00:00
MOV DPTR,#0D00H
MOV A,#00H
MOVX @DPTR,A;秒时标单元
INC DPTR
MOV A,#0FFH;秒时标报警单元送不关心码
MOVX @DPTR,A
INC DPTR
MOVA,#00H
MOVX @DPTR,A
INC DPTR
MOV A,#0FFH;分时标报警单元送不关心码
MOVX @DPTR,A
INC DPTR
MOVA,#0CH ;小时时标单元送12
MOVX @DPTR,A
INC DPTR
MOC A,#OFFH ;小时时标单元报警单元
不关心码
MOVX @DPTR,A
INC DPTR
MOV A,#06H ;星期时标单元送6
MOVX @DPTR,A
INC
DPTR
MOV A,#06H ;日期时标单元送6
MOVX @DPTR,A
INC DPTR
MOV A,#02H ;月时标单元送2
MOVX @DPTR,A
INC DPTR
MOV A,#63H ;年时标单元送99
MOVX @DPTR,A
MOV DPTR,#0DD0EH
MOV A,#13H ;年度高两位送19
MOVX @DPTR,A
MOV DPTR,#0DD0AH
MOV A,#20H ;初始化状态寄存器A
MOV @DPTR,A
MOV DPTR,#0DD0CH ;清状态寄存器D的URT位置“1”
MOVX A,@DPTR
INC DPTR
MOVX A,@DPTR;状态寄存器D的URT位置‘1’
MOV DPTR ,#0DD0BH
MOV A,#22H ;初始化状态寄存器B
MOV @DPTR,A
MOV IE, #81H ;C52开中断
RET
5.3.2 判别芯片是否处于更新周期子程序(采用查询方法)
XIN :MOV DPTR,#0DD0AH
MOVA,@DPTR
JBC ACC.7,XIN ;查询UIP位
SETB 20H ;设可读时标寄存器标志位
RET
5.3.3 中断服务子程序
INT1:ALCALL XIN
JB 20H,INTG
AJMP INT1
INTG:………… ;读当前时标寄存器
………… ;检出是否溢出
………… ;溢出处理
MOV DPTR,#0DD0CH ;清中断标志寄存器
MOVX A,@DPTR
RETI
3、 DS12887/DS 12C887内部寄存器的功能
因DS12887和DS12C887结构功能上类似,现以DS12887为例说明如下:CPU通过读DS12887的内部时标寄存器得到当前的时间和日历,也可通过选择二进制码或BCD码初始化芯片的10个时标寄存器。其114bit非易失性静态RAM可供用户使用,对于没有RAM的单片机应用系统,可在主机掉电时来保存一些重要的数据。DS12887的4个状态寄存器用来控制和指出DS12887模块的当前工作状态,除数据更新周期外,程序可随时读写这4个寄存器,各寄存器的功能和作用如下。
3.1 DS12887内部RAM各专用寄存器地址功能
表1为DS12887内部RAM和各专用寄存器地址分布表,其中,地址00H~03H单元取值范围是00H~3BH(10进制为 0~59);04H~05H单元按12小时制取值范围是上午(AM)01H~0CH(1~12),下午(PM)81H~8CH(81~92)按24小时制取值范围是00H~17H(1~23);06H单元取值范围是00H~07H(0~7);07H单元取值范围01H~1FH(1~31);08H单元取值范围是01H~0CH(1~12);09H单元的取值范围是00H~63H(0~99)。DS12887的RAM和各专用寄存器的访问如下实现,若片选地址DS=#0DDXXH,则芯片内部RAM 和寄存器和地址为#0DD00H~#0DD7FH。应指出的是,尽管DS12887的专用时标年寄存器只有一个,但通过软件编程可利用其内部的不掉电的RAM区的一个字节实现年度的高两位显示,所以,DS12887跨越2000年的计时不成问题。
表1 DS12887内部RAM和各专用寄存器地址
地址单元用途地址单元用途
地址00H秒 地址01H 秒闹
地址02H 分 地址03H 分闹
地址04H 时 地址05H 时闹
地址06H 星期 地址07H 日(两位数)
地址08H
月(两位数) 地址09H 年(两位数)
地址0AH 寄存器A 地址0BH 寄存器B
地址0CH 寄存器C 地址0CH 寄存器D
0EH~7EH 不掉电RAM区,共114字节
