表1 DS12C887的存储功能
| 地 址 |
功 能 |
取值范围十进制数 |
取值范围 |
| 二进制 |
BCD码 |
| 0 |
秒 |
0~59 |
00~3B |
00~59 |
| 1 |
秒闹铃 |
0~59 |
00~3B |
00~59 |
| 2 |
分 |
059 |
00~3B |
00~59 |
| 3 |
分闹铃 |
0~59 |
00~3B |
00~59 |
| 4 |
12小时模式 |
0~12 |
01~0C AM, 81~8C PM |
01~12AM, 81~92PM |
| 24小时模式 |
0~23 |
00~17 |
00~23 |
| 5 |
时闹铃,12小时制 |
1~12 |
01~0C AM, 81~8C PM |
01~12AM, 81~92PM |
| 时闹铃,24小时制 |
0~23 |
00~17 |
00~23 |
| 6 |
星期几(星期天=1) |
1~7 |
01~07 |
01~07 |
| 7 |
日 |
1~31 |
01~1F |
01~31 |
| 8 |
月 |
1~12 |
01~0C |
01~12 |
| 9 |
年 |
0~99 |
00~63 |
00~99 |
| 10 |
控制寄存器A |
|
|
|
| 11 |
控制寄存器B |
|
|
|
| 12 |
控制寄存器C |
|
|
|
| 13 |
控制寄存器D |
|
|
|
| 50 |
世纪 |
0~99 |
NA |
19,20 |
3 应用
在各种设备、家电、仪器、工业控制系统中,可以很容易地用DS12C887来组成时间获取单元,以实现各种时间的获取。图2是用8031单片机和 DS12C887构成的时间获取电路图,其中DS12C887的基地址为7F00H,相应的程序采用C51语言编写(以Intel工作模式为例)。
由8031单片机和DS12C887构成的时间获取电路的初始化程序如下:
XBYTE[0x7F00+0x0B]=0x82;
XBYTE[0x7F00+0x0A]=0xA0;
XBYTE[0x7F00+0x0A]=0x20;
XBYTE[0x7F00+0x0B]=0x02;
/*所有的中断禁止,24小时制,BCD码模式*/
以下均获取时间程序:
unsigned char data t-century;
unsigned char data t-year;
unsigned char data t-month;
unsigned char data t-date;
unsigned char data t-week;
unsigned char data t-hour;
unsigned char data t-minute;
unsigned char data t-second;
if((XBYTE[7F00+0x0A]&0x80)!=0){
t-century=XBYTE[0x7F00+0x32];/*读取世纪*/
t-year=XBYTE[Ox7F00+0x09];/*读取年份*/
t-month=XBYTE[Ox7F00+0x08];/*读取月份*/
t-date=XBYTE[Ox7F00+0x07];/*读取日期*/
t-week=XBYTE[Ox7F00+0x06];/*读取星期几*/
t-hour=XBYTE[Ox7F00+0x04];/*读取小时*/
t-minute=XBYTE[DS12887+0x02];/*读取分钟*/
t-second=XBYTE[Ox7F00+0x00];}/*读取秒*/

4 结束语
Dallas公司的时钟日历芯片DS12C887功能丰富,使用简单,可能性高,是时间产生电路的良好选择。