📄 ht1380.asm
字号:
;HT1380实时时钟子程序:HT1380.ASM
;算法应用于MS51,如AT89C52等单片机, 汇编语言
;正式应用于多款产品
;原创作者:赵曰侠 Email: xxjohn@163.com
;完成时间:2003年12月
;=========================================
;OUT:
; a. TT_START ;Enable Oscillator
; b. TT_WR_FRAME ;Write one frame [8 bytes] From CLOCK_SEC...CLOCK_WP
; c. TT_RD_FRAME ;Read one frame [8 bytes] TO CLOCK_SEC...CLOCK_WP
;
;数据RAM存储压缩格式
; bit-- year-mon---day---hour--min--- -sec
; 1---2+ 4----4-----5-----5-----6----- -5
; 1-00 0010-1011--01001-10001-101100 -10010
; True 02---12----09----17----44---- -22*2
; 85 69 8D 92
;=========================================
NAME HT1380_ASM
?PR?_TT_WR_FRAME?HT1380 SEGMENT CODE
?PR?_TT_RD_FRAME?HT1380 SEGMENT CODE
?PR?TT_START?HT1380 SEGMENT CODE
EXTRN CODE(Select_SET_CLKRST,Select_CLR_CLKRST)
PUBLIC _TT_WR_FRAME,_TT_RD_FRAME,TT_START
;PUBLIC CLOCK_SEC,CLOCK_MIN,CLOCK_HOUR,CLOCK_DAY,CLOCK_MON,CLOCK_WEEK,CLOCK_YEAR,CLOCK_WP
;CLOCK_SEC DATA 40H
;CLOCK_MIN DATA 41H
;CLOCK_HOUR DATA 42H
;CLOCK_DAY DATA 43H
;CLOCK_MON DATA 44H
;CLOCK_WEEK DATA 45H
;CLOCK_YEAR DATA 46H
;CLOCK_WP DATA 47H
;==========================================
;Pin define
sbit T_CLK=P1^1
sbit T_IO =P1^6
;/RST 8255 PB0, Use [Select_SET_CLKRST][Select_CLR_CLKRST]
;-----Next For SyncMOS 8958
;P4 EQU 0D8H
;LCD_CS EQU P1.4
;LCD_WR EQU P4.1
;LCD_DATA EQU P4.0
;=========================================
;HT1380子程序
;--------------------------------
;----------------------------
RSEG ?PR?TT_START?HT1380
TT_START: ;-----------Enable Oscillator
PUSH ACC
PUSH B
PUSH 07H
LCALL TT_INIT ;Write Enable,Oscillator Enable
LCALL TT_PROTECT ;Write Disable
SETB T_CLK
POP 07H
POP B
POP ACC
RET
;-------------------------------------------------
TT_WR_BIT:
MOV T_IO,C
NOP
SETB T_CLK
NOP
NOP
CLR T_CLK
RET
;-----------------------
TT_RD_BIT:
NOP
MOV C,T_IO
SETB T_CLK
NOP
CLR T_CLK
RET
;--------------------------------
TT_WR_BYTE:
PUSH 07
MOV R7,#08H
TT_WR_BYTE1:
RRC A
LCALL TT_WR_BIT
DJNZ R7,TT_WR_BYTE1
POP 07
RET
;--------------------------------
TT_RD_BYTE:
push 07
MOV R7,#08H
TT_RD_BYTE1:
LCALL TT_RD_BIT
RRC A
DJNZ R7,TT_RD_BYTE1
pop 07
RET
;-------------------------------------------------
;A :ADDR
;B :DATA
TT_WR_ONE_BYTE:
;[Select_SET_CLKRST][Select_CLR_CLKRST]
CLR T_CLK
LCALL Select_SET_CLKRST
RL A
ORL A,#80H
LCALL TT_WR_BYTE
MOV A,B
LCALL TT_WR_BYTE
LCALL Select_CLR_CLKRST
RET
;-------------------------------------------------
;A :ADDR
;RET A:DATA
TT_RD_ONE_BYTE:
CLR T_CLK
LCALL Select_SET_CLKRST
RL A
ORL A,#81H
LCALL TT_WR_BYTE
MOV A,B
LCALL TT_RD_BYTE
LCALL Select_CLR_CLKRST
RET
;-------------------------------------------------
;Write the time to ht1380: Sec,Min,Hour,Day,Mon,Week,Year,WP
;R7: Ptr or time
RSEG ?PR?_TT_WR_FRAME?HT1380
_TT_WR_FRAME:
PUSH ACC
PUSH B
PUSH 00H
;LCALL TT_INIT ;Write Enable,Oscillator Enable
LCALL TT_UNPROTECT ;Write Enable, can write to register.
CLR T_CLK
LCALL Select_SET_CLKRST
MOV A,#0BEH
LCALL TT_WR_BYTE
MOV R6,#08H
MOV A,R7
MOV R0,A
TT_WR_FRAME1:
MOV A,@R0
LCALL TT_WR_BYTE
INC R0
DJNZ R6,TT_WR_FRAME1
LCALL Select_CLR_CLKRST
LCALL TT_PROTECT ;Write protect.
SETB T_CLK
NOP
NOP
NOP
LCALL TT_START
POP 00H
POP B
POP ACC
RET
;-------------------------------------------------
;R7: ptr OF TIME
RSEG ?PR?_TT_RD_FRAME?HT1380
_TT_RD_FRAME:
PUSH ACC
PUSH B
PUSH 01H
CLR T_CLK
LCALL Select_SET_CLKRST
MOV A,#0BFH
LCALL TT_WR_BYTE
MOV R6,#08H
MOV A,R7
MOV R1,A
TT_RD_FRAME1:
LCALL TT_RD_BYTE
MOV @R1,A
INC R1
DJNZ R6,TT_RD_FRAME1
LCALL Select_CLR_CLKRST
SETB T_CLK
POP 01H
POP B
POP ACC
RET
;-------------------------------------------------
TT_INIT:
MOV A,#07H ;
MOV B,#00H ;Write Enalbe
LCALL TT_WR_ONE_BYTE
MOV A,#00H
LCALL TT_RD_ONE_BYTE ;Read Register 0
CLR ACC.7 ;Clear Bit 7
MOV B,A
MOV A,#00H ;
LCALL TT_WR_ONE_BYTE ;Enable Oscillator
RET
;--------------------------
TT_UNPROTECT:
MOV A,#07H ;
MOV B,#00H ;Write Enalbe
LCALL TT_WR_ONE_BYTE
RET
TT_PROTECT:
MOV A,#07H
MOV B,#80H ;Write Disable
LCALL TT_WR_ONE_BYTE
RET
;-------------------------------------------------
;=========================================
;=========================================
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -