📄 时钟芯片rx8025读写子程序.txt
字号:
BITCNT DATA 2AH ; IIC数据位计数器
BYTECNT DATA 2BH ; IIC数据字节数器
SLVADR DATA 2CH ; 被控器地址
SUBADR DATA 2DH ; 被控器单元地址
XMTDAT DATA 50H ; 发送数据缓冲区
RCVDAT DATA 40H ; 接收数据缓冲区
SDA BIT P1.7 ; 摸拟IIC数据传送位
SCL BIT P1.6 ; 摸拟IIC时钟控制壮态标志
ACK BIT 21H.3 ; 接收数据非应答标志
INITIALIZE: MOV 50H, #00100000B ;8025初始化
MOV 51H, #00100000B
MOV SLVADR, #64H
MOV SUBADR, #0E0H
MOV BYTECNT,#2
LCALL SENDDATA
MOV 50H,#00000000B
MOV SLVADR, #64H
MOV SUBADR,#70H
MOV BYTECNT,#1
LCALL SENDDATA
MOV 50H,#00000000B
MOV SLVADR, #64H
MOV SUBADR,#50H
MOV BYTECNT,#1
LCALL SENDDATA
RET
RCV8025: MOV SLVADR, #64H ;接收8025的CLOCK,CALENDAR
MOV SUBADR, #00H
MOV BYTECNT,#7
LCALL RCVDATA
MOV A,40H
ANL A, #7FH
MOV 40H, A
ANL A,#0FH
MOV 30H,A
MOV A,40H
ANL A,#0F0H
RR A
RR A
RR A
RR A
MOV 31H,A
MOV A, 41H
ANL A, #7FH
MOV 41H, A
ANL A,#0FH
MOV 32H,A
MOV A,41H
ANL A,#0F0H
RR A
RR A
RR A
RR A
MOV 33H,A
MOV A, 42H
ANL A,#3FH
MOV 42H,A
ANL A,#0FH
MOV 34H,A
MOV A,42H
ANL A,#0F0H
RR A
RR A
RR A
RR A
MOV 35H,A
MOV A,43H
ANL A, #07H
MOV 43H,A
ANL A,#0FH
MOV 36H,A
MOV A,44H
ANL A,#3FH
MOV 44H,A
ANL A,#0FH
MOV 37H,A
MOV A,44H
ANL A,#0F0H
RR A
RR A
RR A
RR A
MOV 38H,A
MOV A,45H
ANL A,#1FH
MOV 45H,A
ANL A,#0FH
MOV 39H,A
MOV A,45H
ANL A,#0F0H
RR A
RR A
RR A
RR A
MOV 3AH,A
MOV A,46H
ANL A,#0FH
MOV 3BH,A
MOV A,46H
ANL A,#0F0H
RR A
RR A
RR A
RR A
MOV 3CH,A
RET
SEND8025: ACALL LOAD8025 ;发送CLOCK(00:00:00),CALENDAR(00:01:01),WEEKLY(0)
MOV SLVADR, #64H
MOV SUBADR, #00H
MOV BYTECNT, #7
LCALL SENDDATA
RET
LOAD8025: MOV 50H, #00H
MOV 51H, #00H
MOV 52H, #00H
MOV 53H, #00H
MOV 54H, #01H
MOV 55H, #01H
MOV 56H, #00H
RET
SENDDATA: LCALL START ;发送数据子程序
MOV A, SLVADR
LCALL SENTBYTE
JB F0, SENDDATA
MOV A, SUBADR
LCALL SENTBYTE
JB F0, SENDDATA
MOV R0, #XMTDAT
SENTNEXT: MOV A,@R0
LCALL SENTBYTE
JB F0, SENDDATA
INC R0
DJNZ BYTECNT, SENTNEXT
LCALL STOP
LCALL DELAY10
RET
RCVDATA: LCALL START ;接受数据子程序
MOV A, SLVADR
LCALL SENTBYTE
JB F0, RCVDATA
MOV A, SUBADR
LCALL SENTBYTE
JB F0, RCVDATA
LCALL START
MOV A, SLVADR
SETB ACC.0
LCALL SENTBYTE
JB F0, RCVDATA
CLR ACK
MOV R0, #RCVDAT
DJNZ BYTECNT, RCVNEXT
SJMP RCVLAST
RCVNEXT: LCALL RCVBYTE
MOV @R0,A
INC R0
DJNZ BYTECNT,RCVNEXT
RCVLAST: SETB ACK
LCALL RCVBYTE
MOV @R0,A
LCALL STOP
RET
START: SETB SDA ;START子程序
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SDA
NOP
NOP
NOP
NOP
NOP
CLR SCL
RET
STOP: CLR SDA ;STOP 子程序
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
SETB SDA
NOP
NOP
NOP
NOP
RET
SENTBYTE: MOV BITCNT, #08H ;发送1字节子程序
SENTB: RLC A
JC SENT1
CLR SDA
SJMP SENT
SENT1: SETB SDA
NOP
SENT: NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
DJNZ BITCNT, SENTB
NOP
NOP
SETB SDA
NOP
NOP
SETB SCL
NOP
NOP
CLR F0
JNB SDA, ACKEND
SETB F0
ACKEND: NOP
CLR SCL
RET
RCVBYTE: SETB SDA ;接受1字节子程序
MOV BITCNT, #08H
RCV: NOP
CLR SCL
NOP
NOP
NOP
NOP
NOP
SETB SCL
NOP
NOP
CLR C
JNB SDA, RCV0
SETB C
RCV0: RLC A
NOP
NOP
DJNZ BITCNT, RCV
CLR SCL
NOP
NOP
NOP
CLR SDA
JNB ACK, SENTACKB
SETB SDA
SENTACKB: NOP
NOP
SETB SCL
NOP
NOP
NOP
NOP
NOP
CLR SCL
CLR ACK
RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -