📄 m41t0.asm
字号:
; 读命令
; #R06R05R04R02R01R00R03*
; 时钟元件M41T0调试程序
T_SCL EQU P1.6 ;时钟
T_SDA EQU P1.3 ;数据
DATA1 EQU 10H ;汉字的高位
DATA2 EQU 11H ;汉字的低位
; 年 月 日 时 分 秒 星 期
;C4EA D4C2 C8D5 CAB1 B7D6 C3EB D0C7 C6DA
ORG 2000H
MOV DPTR,#0E010H
MOV A,#0
MOVX @DPTR,A
MOV R0,#01H
R_CLR:
MOV A,#0
MOV @R0,A
INC R0
CJNE R0,#7FH,R_CLR
MOV SP,#50H
SETB T_SCL
NOP
SETB T_SDA
;调试格式
;#RDDRDDRDDRDDRDD..* R---读命令 DD 地址
;#WDDXXWDDXXWDDXX..* W---写命令 DD 地址 XX 数据
START:
JNB RI,$
MOV A,SBUF
CLR RI
CJNE A,#23H,START ;# START
MOV R0,#30H
MAIN:
JNB RI,MAIN
CLR RI
MOV A,SBUF
MOV @R0,A
INC R0
CJNE A,#2AH,MAIN ;* END
MOV R0,#30H ;DOING
MOV A,@R0
MAIN_W_R:
CJNE A,#52H,MAIN2 ;R READ
INC R0
MOV A,@R0
LCALL 0400H
ANL A,#0FH
SWAP A
MOV B,A
INC R0
MOV A,@R0
LCALL 0400H
ANL A,#0FH
ORL A,B
LCALL BIJIAO
LCALL DATE_READ
LCALL 0430H
MOV SBUF,5EH
JNB TI,$
CLR TI
MOV SBUF,A
JNB TI,$
CLR TI
MOV SBUF,DATA1
JNB TI,$
CLR TI
MOV SBUF,DATA2
JNB TI,$
CLR TI
INC R0
MOV A,@R0
CJNE A,#2AH,MAIN_W_R
LJMP START
MAIN2:
CJNE A,#57H,START ;W WRITE
INC R0
MOV A,@R0
LCALL 0400H
ANL A,#0FH
SWAP A
MOV B,A
INC R0
MOV A,@R0
LCALL 0400H
ANL A,#0FH
ORL A,B
MOV B,A
INC R0
MOV A,@R0
LCALL 0400H
ANL A,#0FH
SWAP A
MOV 20H,A
INC R0
MOV A,@R0
LCALL 0400H
ANL A,#0FH
ORL A,20H
LCALL DATE_WRITE
INC R0
MOV A,@R0
CJNE A,#2AH,MAIN_W_R_T
LJMP START
MAIN_W_R_T:
LJMP MAIN_W_R
send:
lcall 0430h
mov sbuf,5eh
jnb ti,$
clr ti
mov sbuf,a
jnb ti,$
clr ti
ret
; 年 月 日 时 分 秒 星 期 周
;C4EA D4C2 C8D5 CAB1 B7D6 C3EB D0C7 C6DA D6DC
BIJIAO:
CJNE A,#00H,BIJIAO1
MOV DATA1,#0C3H
MOV DATA2,#0EBH
RET
BIJIAO1:
CJNE A,#01H,BIJIAO2
MOV DATA1,#0B7H
MOV DATA2,#0D6H
RET
BIJIAO2:
CJNE A,#02H,BIJIAO3
MOV DATA1,#0CAH
MOV DATA2,#0B1H
RET
BIJIAO3:
CJNE A,#04H,BIJIAO4
MOV DATA1,#0C8H
MOV DATA2,#0D5H
RET
BIJIAO4:
CJNE A,#05H,BIJIAO5
MOV DATA1,#0D4H
MOV DATA2,#0C2H
RET
BIJIAO5:
CJNE A,#06H,BIJIAO6
MOV DATA1,#0C4H
MOV DATA2,#0EAH
RET
BIJIAO6: ;星期 D0C7 C6DA
MOV SBUF,#20H
JNB TI,$
CLR TI
MOV SBUF,#0D0H
JNB TI,$
CLR TI
MOV SBUF,#0C7H
JNB TI,$
CLR TI
MOV SBUF,#0C6H
JNB TI,$
CLR TI
MOV SBUF,#0DAH
JNB TI,$
CLR TI
MOV DATA1,#20H
MOV DATA2,#20H
RET
;*******************************************************
; M41T0-- address table(地址表)
; 00:seconds
; 01:minutes
; 02:hours
; 03:week
; 04:date
; 05:mouth
; 06:year
; 07:control
;====================================================
; T_SCL EQU P1.6 ;时钟
; T_SDA EQU P1.3 ;数据
; 要读的地址由A送入(地址表如上)
; 读出的数据在A中(ASC码)
DATE_READ:
CLR T_SDA
NOP ;启动
NOP
NOP
CLR T_SCL
;------------------------
PUSH ACC
MOV A,#0D0H ;准备写命令
MOV R5,#08H ;准备8位的记数
READ_WRITE1:
RLC A
MOV T_SDA,C
NOP
SETB T_SCL
NOP ;一个高脉冲,由低到高--再拉低
NOP
CLR T_SCL ;写命令
DJNZ R5,READ_WRITE1
;---------------------
CLR T_SDA
NOP
NOP
SETB T_SCL ;一个空脉冲
NOP
NOP
CLR T_SCL
NOP
NOP
;----------------------
POP ACC
MOV R5,#08H
READ_WRITE2:
RLC A
MOV T_SDA,C
NOP
SETB T_SCL
NOP ;一个高脉冲,由低到高--再拉低
NOP
CLR T_SCL ;写地址
DJNZ R5,READ_WRITE2
;-------------------------
CLR T_SDA
NOP
NOP
SETB T_SCL ;一个空脉冲
NOP
NOP
CLR T_SCL
NOP
NOP
;--------------------------
;-------------------------
;读前的在一次启动
SETB T_SCL
NOP
NOP
SETB T_SDA
NOP
NOP
CLR T_SDA
NOP
NOP
NOP
CLR T_SCL
;-------------------------
MOV A,#0D1H ;读命令
MOV R5,#08H
READ_WRITE3:
RLC A
MOV T_SDA,C
NOP
SETB T_SCL
NOP ;一个高脉冲,由低到高--再拉低
NOP
CLR T_SCL
DJNZ R5,READ_WRITE3
;----------------------------
CLR T_SDA
NOP
NOP
SETB T_SCL ;一个空脉冲
NOP
NOP
CLR T_SCL
NOP
NOP
;-----------------------------
SETB T_SDA
CLR A
MOV R5,#08H
READ_READ1:
CLR T_SCL
NOP
NOP
SETB T_SCL
NOP
NOP
MOV C,T_SDA
RLC A
DJNZ R5,READ_READ1
;------------------------
SETB T_SDA
NOP
NOP
SETB T_SCL
NOP
NOP
CLR T_SCL
NOP
NOP
NOP
SETB T_SCL
NOP ;结束
NOP
NOP
SETB T_SDA
RET
;===================================================
;===================================================
; T_SCL EQU P1.6 ;时钟
; T_SDA EQU P1.3 ;数据
; 要写的数据的地址由B送入(地址表如上)
; 要写的数据在A中(ASC码)
DATE_WRITE:
CLR T_SDA
NOP ;启动
NOP
NOP
CLR T_SCL
;-------------------------
PUSH ACC
MOV A,#0D0H
MOV R5,#08H
;-------------------------
WRITE_WRITE1:
RLC A
MOV T_SDA,C
NOP
SETB T_SCL
NOP
NOP
CLR T_SCL
DJNZ R5,WRITE_WRITE1
CLR T_SDA
NOP
NOP
SETB T_SCL
NOP
NOP
CLR T_SCL
NOP
NOP
MOV A,B
MOV R5,#08H
WRITE_WRITE2:
RLC A
MOV T_SDA,C
NOP
SETB T_SCL
NOP
NOP
CLR T_SCL
DJNZ R5,WRITE_WRITE2
CLR T_SDA
NOP
NOP
SETB T_SCL
NOP
NOP
CLR T_SCL
NOP
NOP
POP ACC
MOV R5,#08H
WRITE_WRITE3:
RLC A
MOV T_SDA,C
NOP
SETB T_SCL
NOP
NOP
CLR T_SCL
DJNZ R5,WRITE_WRITE3
;-------------------------
CLR T_SDA
NOP
NOP
SETB T_SCL
NOP
NOP
CLR T_SCL
NOP
NOP
SETB T_SCL
NOP
NOP
SETB T_SDA
RET
;==================================================
;*****************************************************
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -