实时时钟DS12C887调试

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实时时钟DS12C887调试首页论坛问答博客登录注册

yanqin的空间主页| 博客| 相册| 个人档案| | 开心网人人网新浪微博 EEPW微博查看文章

标题:实时时钟DS12C887调试2009-04-17 11:21:47实时时钟DS12C887 调试

1.实时时钟DS12C887 寄存器介绍:

DS12C887是带114字节RAM的实时时钟接口器件。它有MOTOROLA和

INTEL总线时序选择端。特殊寄存器有14个。从00H到09H单元为时钟、日历、闹钟单元。0AH、0BH、0CH、0DH是功能、状态寄存器。

闹钟单元:01H、03H、05H分别是秒、分、时闹钟设置寄存器。闹钟调协有

种用法:根据写入到三个闹钟寄存器的值产生中断;在各闹钟单元写入自由码(=0CH――0FFH)可产生周期性的闹钟中断。

时钟、日历单元:00H、02H、04H、06H、07H、08H、09H分别是秒、分、时、星期、日、月、年设置寄存器。设置值有两种:二进制和BCD码。

功能、状态寄存器:0AH、0BH、0CH、0DH是功能、状态寄存器。

0AH:提供时间更新标志、确定在何时正确读出时间;提供分频控制功能;可选择输出的方波频率及周期中断频率。

0BH:具有初始化设置功能,初始化时必需把相关位置1才能初始化时钟、日历寄存器;对相关位设置可使系统具有闹钟中断、周期中断、更新结束中断功能;可控制方波的输出;可控制时间的显示模式,并可自动执行夏令时制。

0CH:提供中断请求及中断标志以供CPU查询。

0DH:提供有效的RAM和时间标志。只可读不可写。应总读出为1,若为零表示内部锂电池耗尽。

2.芯片地址:DFxx选中芯片。

3.附调试程序:

汇编程序:

;该程序为设置DS12C887的时间为05年02月24日15时04分00秒并分别把秒、分、时、日、月、年送到片内RAM的30H至35H处显示。

显示

ORG 0000H

SJMP MAIN

ORG 0040H

MAIN: LCALL INI

WAIT: MOV DPTR,#0DF0AH ;读秒送到片内RAM的30H

MOVX A,@DPTR

JB ACC.7,WAIT

MOV DPL,#00H

MOV R0,#30H

MOVX A,@DPTR

MOV @R0,A

MOV DPL,#02H ;读分送到片内RAM的31H MOV R0,#31H

MOVX A,@DPTR

MOV @R0,A

MOV DPL,#04H ;读时送到片内RAM的32H MOV R0,#32H

MOVX A,@DPTR

MOV @R0,A

MOV DPL,#07H ;读日送到片内RAM的33H

MOV R0,#33H

MOVX A,@DPTR

MOV @R0,A

MOV DPL,#08H ;读月送到片内RAM的34H

MOV R0,#34H

MOVX A,@DPTR

MOV @R0,A

MOV DPL,#09H ;读年送到片内RAM的35H MOV R0,#35H

MOVX A,@DPTR

MOV @R0,A

STOP: NOP

SJMP STOP

INI: MOV DPTR,#0DF0AH ;DS12C887参数设置

MOV A,#70H

MOVX @DPTR,A

INC DPTR

MOV A,#8AH

MOVX @DPTR,A

MOV DPL,#00H

CLR A

MOVX @DPTR,A

MOV DPL,#02H

MOV A,#04H

MOVX @DPTR,A

MOV DPL,#04H

MOV A,#15H

MOVX @DPTR,A

MOV DPL,#07H

MOV A,#24H

MOVX @DPTR,A

MOV DPL,#08H

MOV A,#02H

MOVX @DPTR,A

MOV DPL,#09H

MOV A,#05H

MOVX @DPTR,A

MOV DPTR,#0DF0AH

MOV A,#26H

MOVX @DPTR,A

MOV DPL,#0BH

MOV A,#1AH

MOVX @DPTR,A

RET

END

上图为运行了上述程序后过10分钟后将LCALLINI指令屏蔽(即不再设置时间直接读取时间)后运行程序所得到的结果。可以看到片内RAM的30H至35H单元为27、15、15、24、02、05。这表示该时刻读出的时间为05年02月24日15时15分27秒。

C51程序:

#include

#include

#include

#include

#include

#define SECOND XBYTE [0XDF00]

#define SECALM XBYTE [0XDF01]

#define MINUTE XBYTE [0XDF02]

#define MINALM XBYTE [0XDF03]

#define HOUR XBYTE [0XDF04]

#define HOUALM XBYTE [0XDF05]

#define WEEK XBYTE [0XDF06]

#define DAY XBYTE [0XDF07]

#define MONTH XBYTE [0XDF08]

#define YEAR XBYTE [0XDF09]

#define AREG XBYTE [0XDF0A]

#define BREG XBYTE [0XDF0B]

#define CREG XBYTE [0XDF0C]

#define DREG XBYTE [0XDF0D]

main()

{ bit busy=0;

wait:busy=AREG^7;

if (busy)

{

DBYTE [0X30]=SECOND;

DBYTE [0X31]=MINUTE;

DBYTE [0X32]=HOUR;

DBYTE [0X33]=DAY;

DBYTE [0X34]=MONTH;

DBYTE [0X35]=YEAR;

}

else goto wait;

while(1)

{

}

}

本文引用通告地址:/articles/trackback/item/46072 类别:嵌入式 |

浏览(609) 引用(0) 如果您想出现在此位置,请您先【登录】!

thx583164431

kotami

huaa

chengang0103 网友评论:发表评论:姓名: [ 登陆 ]*姓名最长为50字节内容:

验证码:看不清?

相关文档
最新文档