📄 ds1307程序 1.asm
字号:
SDA BIT P1.4
SCL BIT P3.3
FLAG EQU 20H
ACK BIT FLAG.0
SLA EQU 50H
SUBA EQU 51H
NUMBYTE EQU 52H
VALUE EQU 53H
MTD EQU 30H
MRD EQU 40H
PCF8563 EQU 0D0H
POINTADD EQU 00H
ORG 000H
JMP BEGIN
ORG 80H
BEGIN:
MAIN: MOV SP,#80H
MOV A,#00H
MOV R0,#01H
;JMP RCV8563
INIT: MOV @R0,A
INC R0
CJNE R0,#100,INIT
MOV SLA,#0D0H
MOV SUBA,#00H
MOV VALUE,#30H
LCALL WRITE
JMP READ_TIME0
RCV8563:
MOV SLA,#0D0H
MOV SUBA,#07H
MOV VALUE,#00H
LCALL WRITE
MOV SLA,#0D0H
MOV SUBA,#00H
MOV VALUE,#10H
LCALL WRITE
MOV SLA,#0D0H
MOV SUBA,#01H
MOV VALUE,#27H
LCALL WRITE
MOV SLA,#0D0H
MOV SUBA,#02H
MOV VALUE,#10H
LCALL WRITE
MOV SLA,#0D0H
MOV SUBA,#03H
MOV VALUE,#05H
LCALL WRITE
MOV SLA,#0D0H
MOV SUBA,#04H
MOV VALUE,#03H
LCALL WRITE
MOV SLA,#0D0H
MOV SUBA,#05H
MOV VALUE,#08H
LCALL WRITE
MOV SLA,#0D0H
MOV SUBA,#06H
MOV VALUE,#07H
LCALL WRITE
READ_TIME0:
MOV SLA,#0D1H;取器件地址
MOV SUBA,#00H ;取读时间的首字节地址从秒开始读
MOV NUMBYTE,#07H ;读七个时间信息
MOV R0,#MRD
READ_TIME:
LCALL IRDNBYTE ;读取时间并放入接收缓冲区中
MOV @R0,A
INC R0
INC SUBA
DJNZ NUMBYTE,READ_TIME
MOV A,MRD ;取秒字节
ANL A,#7FH ;屏蔽无效位
MOV MRD,A
MOV A, MRD+1
ANL A,#7FH ;屏蔽无效位
MOV MRD+1,A
MOV A, MRD+2 ;取小时字节
ANL A,#3FH ;屏蔽无效位
MOV MRD+2,A
MOV A, MRD+3 ;取天字节
ANL A,#3FH ;屏蔽无效位
MOV MRD+3,A
;MOV A, MRD+4 ;取星期字节
;ANL A,#07H ;屏蔽无效位
;MOV MRD+4,A
MOV A,MRD+5 ;取月字节
ANL A,#0FFH ;屏蔽无效位
MOV MRD+5,A
JMP READ_TIME0
WRITE: LCALL START
MOV A,SLA
LCALL WRBYTE
JC WEND
MOV A,SUBA
LCALL WRBYTE
JC WEND
MOV A,VALUE
LCALL WRBYTE
WEND:LCALL STOP
RET
IRDNBYTE:
MOV SLA,#0D0H
LCALL START
MOV A,SLA
LCALL WRBYTE
JC RETRDN
MOV A,SUBA
LCALL WRBYTE
JC RETRDN
MOV SLA,#0D1H
LCALL START
MOV A,SLA
LCALL WRBYTE
JC RETRDN
LCALL READ_BYTE
RETRDN:LCALL STOP
RET
READ_BYTE:
MOV R6,#08H
RB_01: SETB SCL
NOP
MOV C,SDA
RLC A
CLR SCL
DJNZ R6,RB_01
RET
RDBYTE:
MOV R0,#08H
RLP: SETB SDA
NOP
SETB SCL
NOP
NOP
MOV C,SDA
MOV A,R2
CLR SCL
RLC A
MOV R2,A
NOP
NOP
NOP
DJNZ R0,RLP
RET
MACK: CLR SDA
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLR SCL
NOP
NOP
RET
START: SETB SDA
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
NOP
CLR SCL
NOP
NOP
NOP
NOP
NOP
RET
STOP: CLR SDA
NOP
NOP
NOP
NOP
NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
NOP
CLR SDA
RET
CACK: SETB SDA
NOP
NOP
SETB SCL
CLR ACK
NOP
NOP
MOV C,SDA
JC CEND
SETB ACK
CEND: NOP
CLR SCL
NOP
RET
WRBYTE:
MOV R6,#08H
WB_01: RLC A
MOV SDA,C
SETB SCL
NOP
NOP
NOP
CLR SCL
DJNZ R6,WB_01
SETB SDA
CLR C
SETB SCL
NOP
NOP
JB SDA,WB_03
WB_02: CLR SCL
RET
WB_03: SETB C
SJMP WB_02
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -