📄 rtc.a
字号:
P5 EQU 0FE11h
CLK bit P3.6
IO bit P3.7
CE bit P0.0
NAME Rtc
?PR?_RD_RTC?Rtc SEGMENT CODE
?PR?_WR_RTC?Rtc SEGMENT CODE
?PR?_RD_PROT?Rtc SEGMENT CODE
?PR?_WRPROT1?Rtc SEGMENT CODE
?PR?_WRPROT?Rtc SEGMENT CODE
?PR?_WRCL?Rtc SEGMENT CODE
?PR?_RDCL?Rtc SEGMENT CODE
?PR?_CLOUT?Rtc SEGMENT CODE
?PR?_CLOUT8?Rtc SEGMENT CODE
?PR?_CLIN8?Rtc SEGMENT CODE
?PR?_CPULSE?Rtc SEGMENT CODE
PUBLIC _WR_RTC,_RD_RTC
RSEG ?PR?_RD_RTC?Rtc
_RD_RTC:
LCALL _WRPROT
LCALL _RDCL
LCALL _WRPROT1
RET
RSEG ?PR?_WR_RTC?Rtc
_WR_RTC:
LCALL _WRPROT
LCALL _WRCL
LCALL _WRPROT1
RET
RSEG ?PR?_RD_PROT?Rtc
_RD_PROT: ;read out the write protected property
CLR CLK
SETB CE
NOP
MOV A,#8FH
LCALL _CLIN8
MOV R0,#40H
LCALL _CLOUT8
MOV @R0,A
CLR CE
SETB CLK
RET
RSEG ?PR?_WRPROT1?Rtc
_WRPROT1: ;lock the write protected
CLR CLK
SETB CE
MOV A,#8EH
LCALL _CLIN8
MOV A,#80H
LCALL _CLIN8
CLR CE
SETB CLK
RET
RSEG ?PR?_WRPROT?Rtc
_WRPROT: ;unlock the write portected
CLR CLK
SETB CE
MOV A,#8EH
LCALL _CLIN8
MOV A,#00H
LCALL _CLIN8
CLR CE
SETB CLK
RET
RSEG ?PR?_WRCL?Rtc
_WRCL: ;write clock
; MOV A,#80H
; ORL 36H,A
MOV A,R1 ; in R3~R1
MOV R7,A
DEC A
DEC A
MOV R1,A ;get the minuter pointer
MOV A,@R1
ORL A,#80H
MOV @R1,A ;mask the MSB
MOV R2,#80H ; start cmd 0x80
MOV R3,#07H
MOV A,R7
MOV R1,A
WRT:
CLR CLK
SETB CE
MOV A,R2
LCALL _CLIN8
MOV A,@R1
LCALL _CLIN8
CLR CE
SETB CLK
INC R2
INC R2
DEC R1
DJNZ R3,WRT
RET
RSEG ?PR?_RDCL?Rtc
_RDCL: ;read clock
CLR CLK
SETB CE
MOV A,#0BFH
LCALL _CLIN8
MOV A,R1 ; in R3~R1
MOV R0,A
LCALL _CLOUT
NOP
CLR CE
SETB CLK
/*
MOV R0,#032H
MOV A,@R0
MOV 39H,A
MOV R0,#033H
MOV A,@R0
MOV R0,#032H
MOV @R0,A
MOV R0,#033H
MOV A,39H
MOV @R0,A
MOV A,#1FH
ANL 36H,A
*/
MOV A,R1
DEC A
DEC A
MOV R0,A
MOV A,@R0
ANL A,#1FH
MOV @R0,A
RET
RSEG ?PR?_CLOUT?Rtc
_CLOUT: ;receive 8 bytes
MOV R3,#08H
OUT: LCALL _CLOUT8
MOV @R0,A
DEC R0
DJNZ R3,OUT
RET
RSEG ?PR?_CLOUT8?Rtc
_CLOUT8: ;receive a byte from IO,CLK to ACC
MOV R4,#08H
OUT8:
SETB IO
MOV C,IO
; GET_IO
RRC A
LCALL _CPULSE
DJNZ R4,OUT8
RET
RSEG ?PR?_CLIN8?Rtc
_CLIN8: ;send a byte from ACC to IO,CLK
MOV R4,#08H
IN8:
RRC A
MOV IO,C
; SET_IO
LCALL _CPULSE
DJNZ R4,IN8
RET
RSEG ?PR?_CPULSE?Rtc
_CPULSE: ;give a rising edge on CLK pin
SETB CLK
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLR CLK
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -