⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ht1380.asm

📁 应用于单片机MS51系列
💻 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 + -