DS12887/ DS12C887 的编程方法
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”,芯片开始计时工作。
2 闹钟单元的使用方法
DS12887/DS12C887 共有 3 个闹钟单元 ,分别为时、 分、 秒闹钟单元。在其中写入闹钟时间值并且在时钟中断允许的情况下每天到该时刻就会产生中断申请信号。但这种方式每天只提供一次中断信号。另一种方式是在闹钟单元中写入 “不关心码”,在时闹钟单元写入 C0H~FFH之间的数据 ,可每小时产生一次中断;在时、 分闹钟单元写入 C0H~FFH之间的数据 ,可每分钟产生一次中断;而时、分、 秒闹钟单元全部写入 FFH ,则每秒钟产生一次中断。但这种方式也只能在整点、 整分或每秒产生一次中断。但控制系统要求的定时间隔不是整数时 ,则应该通过软件来调整实现。
3 DS12887/ DS12C887 的编程
图所示的是 AT89C51 单片机与 DS12887/DS12C887 的接口电路 ,片选地址 CS = # 0DDXXH。DS12887/ DS12C887 状态寄存器的参数设置如下:状态寄存器A 置为 20H ,它表示采用的时钟频率为32. 678kHz ,禁止脚 SQW输出。状态寄存器B 置为22H ,它表示允许报警中断 ,禁止其他中断 ,置 24 小时模式 ,时标寄存器内容用 BCD 码表示 ,禁止方波输出和夏令时服务。如果要求定时间隔为 1 秒至59分钟的中断申请 ,那么时报警寄存器置 FFH ,这就表示了该报警时标处于不关心状态。下面给出了DS12887/ DS12C887的有关程序。
3. 1 DS12887/ DS12C887 初始化程序
t TIME: MOV DPTR , # 0DD0BH ;寄存器 B 中的 Rest 位置 “1” ,禁止芯片内部的更新周期
MOV A , # 0A2H
MOV @DPTR ,A;初始化 10bit 时标寄存器程序 ,输入当前时间:1999 年 2 月6 日 ,星期 6 ,12 :00 :00
MOV DPTR , # 0DD00H
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
MOV A , # 0CH ;小时时标单元送 12
MOVX @DPTR ,A
INC DPTR
MOV A , # 0FFH ;小时时标单元报警单元送不关心码
MOVX@DPTR ,A
INC DPTR
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 ;年度高两位送 19MOVX @DPTR ,A
MOV DPTR , # 0DD0AH
MOV A , # 20H ;初始化状态寄存器 A
MOV @DPTR ,AMOV DPTR , # 0DD0CH
MOVX A , @DPTR ;清状态寄存器 C
INC DPTR
MOVX A , @DPTR ;状态寄存器 D 的 URT位置 “1”
MOVDPTR , # 0DD0BH
MOV A , # 22H ;初始化状态寄存器B
MOV @DPTR ,A
MOV IE , # 81H ;89C511 开中断
RET
3. 2 判别芯片是否处于更新周期子程序(采用查询方法)
XIN :MOV DPTR , # 0DD0AH
MOVA , @DPTR
JBC ACC. 7 ,XIN ;查询 UIP位
SETB 20H ;设可读时标寄存器标志位
RET
3. 3 中断服务子程序
INT1 : ALCALL XIN
JB 20H , INTG
AJMP INT1
INTG: ………… ;读当前时标寄存器
………… ;检出是否溢出
………… ;溢出处理
MOV DPTR , # 0DD0CH;清中断标志寄存器
MOVX A , @DPTR
RETI