为什么无法读取DS12887的时间?

[复制链接]
查看11 | 回复1 | 2011-4-21 14:48:57 | 显示全部楼层 |阅读模式
我的思路是初始化DS12887,小时为09,然后读取小时存储器,把值付给P1口,看看P1口电压的变化。却显示全是低电平或高电平。
这是程序:仿真后A中的值是09
ORG 0000H
JMP START
ORG 0030H
START: ;CLR P2.0

;SETB P1.3



MOV SP,#60H

LCALL RTCINIT
MAIN:LCALL RTCREAD

MOV A,32H
;小时的地址

MOV P1,A

MOV R1,#10

LCALL DELAY

JMP MAIN
;--------DS12887初始化子程序--------------
RTCINIT:

MOV
DPTR,#800AH

MOV
A,#70H

MOVX @DPTR,A
INC
DPTR
MOV
A,#8AH
;BCD计数
MOVX @DPTR,A

MOV
DPL,#00H

CLR
A

MOVX @DPTR,A

MOV
DPL,#02H

CLR
A

MOVX
@DPTR,A

MOV
DPL,#04H
MOV
A,#09H ;HONOUR

MOVX @DPTR,A

MOV
DPL,#07H

MOV
A,#06H
;DATE

MOVX @DPTR,A

INC
DPTR

MOV
A,#03H
;MONTH

MOVX @DPTR,A

INC
DPTR

MOV
A,#10H ;YEAR ,2006

MOVX @DPTR,A

INC
DPTR

MOV
A,#26H ;DV2~DV0

MOVX @DPTR,A

INC
DPTR

MOV
A,#1AH
;B寄存器

MOVX @DPTR,A
;时钟开始运行

RET
;--------------------- 查询法读取时间和日历子程序
;---------DS12887读取时间子程序------------------------
RTCREAD:

MOV DPTR,#800AH
WAIT: MOVX A,@DPTR

JB ACC.7,WAIT
;UIP=1,则等待更新完毕

MOV DPL,#00H

MOV R0,#30H

MOV R2,#03H
LOOP1: MOVXA,@DPTR
;读秒、分、时

MOV @R0,A
; 秒、分、时送30H、31H、32H
INC DPTR
INC DPTR
INC R0
DJNZR2,LOOP1
MOV R2,#04H
LOOP2:MOVXA,@DPTR
;读星期、日、月、年

MOV @R0,A
;星期、日、月、年送33H、34H、35H、36H
INC DPTR
;DPTR中为日地址
INC R0
DJNZR2,LOOP2
RET
DELAY:
MOV R7,#100
D2:
MOV R6,#250

DJNZR6,$

DJNZR7,D2

DJNZR1,DELAY

RET
END


回复

使用道具 举报

千问 | 2011-4-21 14:48:57 | 显示全部楼层
新买的ds12887吗 是需要初始化我对汇编不是很精 我看了下 反正初始化程序给寄存器A,B赋的值没问题 别的我没看我想问题应该出在读 写887上 我用C编的时候 写入887或读887时 都是按887pdf文件里的读写时序 编的程我记得rw=1 ds=0 可是as和cs都是需要跳变沿才能实现读写地址和读写数据的我看了你的仿真图 as和cs是接在ale和P2.0上的可我在你程序里 初始化程序里都没看到你让as cs跳变我想问题可能出在这里 初始化值没有写进去
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行