DSC12887与单片机接口的汇编例程
扫描二维码
随时随地手机看文章
;**********************************
; 写时间子程序
;向DS12887回写时间信息,包括年月日,时分秒;
;**********************************
WRITE_TIME
MOV DS_ADDR,#0BH
MOV A,#0A2H
LCALL WRITE_DS
;写秒信息,在60H,61H中
MOV DS_ADDR,#0
MOV A,61H
ANL A,#0FH
SWAP A
ANL 60H,#0FH
ORL A,60H
LCALL WRITE_DS
;分信息,在62,63H中
MOV DS_ADDR,#2
ANL 62H,#0FH
ANL 63H,#0FH
MOV A,63H
SWAP A
ORL A,62H
LCALL WRITE_DS
;时信息,在64,65H中
MOV DS_ADDR,#4
ANL 64H,#0FH
ANL 65H,#0FH
MOV A,65H
SWAP A
ORL A,64H
LCALL WRITE_DS
;周信息,在66H中
MOV DS_ADDR,#6
MOV A,66H
LCALL WRITE_DS
;日信息,在67,68H中
MOV DS_ADDR,#7
ANL 67H,#0FH
ANL 68H,#0FH
MOV A,68H
SWAP A
ORL A,67H
LCALL WRITE_DS
;月信息,在69,6AH中
MOV DS_ADDR,#8
ANL 69H,#0FH
ANL 6AH,#0FH
MOV A,6AH
SWAP A
ORL A,69H
LCALL WRITE_DS
;年信息,在6B,6CH中
MOV DS_ADDR,#9
ANL 6BH,#0FH
ANL 6CH,#0FH
MOV A,6CH
SWAP A
ORL A,6BH
LCALL WRITE_DS
;世纪信息,在6D,6EH中
MOV DS_ADDR,#0EH
ANL 6DH,#0FH
ANL 6EH,#0FH
MOV A,6EH
SWAP A
ORL A,6DH
LCALL WRITE_DS
;********以下重新初始化时钟
MOV DS_ADDR,#0AH
MOV A,#2FH
LCALL WRITE_DS
MOV DS_ADDR,#0BH
MOV A,#42H
LCALL WRITE_DS
MOV DS_ADDR,#0CH
LCALL READ_DS
MOV DS_ADDR,#0DH
LCALL READ_DS
RET
;************************************
; 读时间信息例程,包括年月日,时分秒
; 分别放入60H-6DH的内存字节中,一个
; 字节中只存放一位数,低位在前
;************************************
READ_TIME:
MOV DS_ADDR,#0AH
LCALL READ_DS
JBC ACC.7,READ_TIME 更新标志
;秒信息送60H,61HNDEFINED SYMBOL (PASS-2)
MOV DPTR,#0 读秒信息
MOVX A,@DPTR
MOV 60H,A
SWAP A
MOV 61H,A
ANL 60H,#0FH
ANL 61H,#0FH
;分信息送62,63H
MOV DPTR,#2
MOVX A,@DPTR
MOV 62H,A
SWAP A
MOV 63H,A
ANL 62H,#0FH
ANL 63H,#0FH
SWAP A
CLR BZ_M00 清整点标志
CJNE A,#00,RT_H10
SETB BZ_M00 整点标志
;时信息送64,65H
RT_H10:
MOV DPTR,#4
MOVX A,@DPTR
MOV 64H,A
SWAP A
MOV 65H,A
;周信息送66H
H_14:
MOV DS_ADDR,#6
LCALL READ_DS
MOV 66H,A
ANL 66H,#0FH
;月日期送67,68H
MOV DS_ADDR,#7
LCALL READ_DS
MOV 67H,A
SWAP A
MOV 68H,A
;月计数送69,6AH
D_01:
MOV DS_ADDR,#8
LCALL READ_DS
MOV 69H,A
SWAP A
MOV 6AH,A
SWAP A
;年信息送6B,6C时
MOV DS_ADDR,#9
LCALL READ_DS
MOV 6BH,A
SWAP A
MOV 6CH,A
;世纪信息送6D,6E
CJNE A,#98H,RT_1
RT_1: JC RT_2
MOV A,#19H 判断世纪,大于98是19,小于
是20
AJMP RT_3
RT_2: MOV A,#20H
RT_3: MOV 6DH,A
SWAP A
MOV 6EH,A
;*****以下程序累加安全天数,64H=时
JNB BZ_M00,RT_10 不是整点
MOV A,64H
CJNE A,#00H,RT_END 0点累加安全天数
JB BZ_ADD,RT_END 已经加过了
SETB BZ_ADD
LCALL ADD_DAY 累加安全天数
RT_6:
AJMP RT_END
;*****以上程序累计产量*******
RT_10:
CLR BZ_ADD
; CLR BZ_ADM
; CLR BZ_ADN
RT_END:
; MOV DS_ADDR,#0CH
; LCALL READ_DS
RET
;***************************************
;从DS12887中读写数据,地址在DS_ADDR中
;***************************************
READ_DS:
; CLR P3.3
MOV DPH,#0H
MOV DPL,DS_ADDR
MOVX A,@DPTR
RET
WRITE_DS:
MOV DPH,#0H
MOV DPL,DS_ADDR
MOVX @DPTR,A
RET