实时时钟DS12C887调试
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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字节内容:
验证码:看不清?