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

📄 ds1302.h

📁 时钟IC1302
💻 H
字号:

;----------------------------------------------------------------------
;
;			headfile for DS1302
;			Timer IC	
;
;----------------------------------------------------------------------
;----------------------------------------------------------------------
;
;			macro define for ds1302
;
;----------------------------------------------------------------------

SET_DS1302_CE		.MACRO
			BSF		PAD,		B5
			ENDM

CLR_DS1302_CE		.MACRO
			BCF		PAD,		B5
			ENDM

SET_DS1302_CK		.MACRO
			BSF		PAD,		B3
			ENDM

CLR_DS1302_CK		.MACRO
			BCF		PAD,		B3
			ENDM
			
SET_DS1302_DA		.MACRO
			BSF		PAD,		B4
			ENDM
			
CLR_DS1302_DA		.MACRO
			BCF		PAD,		B4
			ENDM

DS1302_DA_OUT		.MACRO
			BCF		PACONH,		B0
			BSF		PACONH,		B1			
			ENDM

DS1302_DA_IN		.MACRO
			BCF		PACONH,		B0
			BCF		PACONH,		B1
			ENDM

#DEFINE			DS1302_DA	PAD,		B4

;address
WR_DS1302_SEC		EQU		80H
RD_DS1302_SEC		EQU		81H
WR_DS1302_MIN		EQU		82H
RD_DS1302_MIN		EQU		83H
WR_DS1302_HOUR		EQU		84H
RD_DS1302_HOUR		EQU		85H
WR_DS1302_DATE		EQU		86H
RD_DS1302_DATE		EQU		87H
WR_DS1302_MON		EQU		88H
RD_DS1302_MON		EQU		89H
WR_DS1302_DAY		EQU		8AH
RD_DS1302_DAY		EQU		8BH
WR_DS1302_YEAR		EQU		8CH
RD_DS1302_YEAR		EQU		8DH
WR_DS1302_WP		EQU		8EH
RD_DS1302_WP		EQU		8FH
WR_DS1302_TCS		EQU		90H
RD_DS1302_TCS		EQU		91H

;----------------------------------------------------------------------
;
;
;----------------------------------------------------------------------
TimeInitial:
			MOVLW		00h			;wp disable
			MOVWF		Para			;bit7=1:enb
			CALL		Ds1302SetWp


			CALL		Ds1302ReadMin
			MOVLW		60h
			SUBWF		DataB0,		W
			BTFSC		STATUS,		C
			goto		PowerOnTimeErr
			MOVFW		DataB0
			CALL		F_Getdb_Sub		
			MOVFW		R_WorkRam0
			MOVWF		R_MinH
			MOVFW		R_WorkRam1
			MOVWF		R_MinL
			
			CALL		Ds1302ReadHour
			MOVLW		24h
			SUBWF		DataB0,		W
			BTFSS		STATUS,		C
			goto		PowerOnTimeOk
PowerOnTimeErr:			
			MOVLW		00h			;00 sec	clock start
			MOVWF		Para			;sec bit7=0 clk start
			CALL		Ds1302SetSec
			
			MOVLW		00h			;00 min
			MOVWF		Para
			CALL		Ds1302SetMin
			
			MOVLW		12h			;12 hour-->24 clock
			MOVWF		Para
			CALL		Ds1302SetHour
			
			CLRF		R_SecTmL
			CLRF		R_SecTmH
			CLRF		R_MinH
			CLRF		R_MinL
			MOVLW		01h
			MOVWF		R_HourH
			MOVLW		02h
			MOVWF		R_HourL
			RET
PowerOnTimeOk:
			MOVFW		DataB0
			CALL		F_Getdb_Sub
			MOVFW		R_WorkRam0
			MOVWF		R_HourH
			MOVFW		R_WorkRam1
			MOVWF		R_HourL

			CALL		Ds1302ReadSec		;start time
			MOVFW		DataB0
			MOVWF		Para

			MOVLW		01111111B
			ANDWF		DataB0,		F
			MOVLW		60h
			SUBWF		DataB0,		W
			BTFSC		STATUS,		C
			goto		PowerOnTimeErr
			MOVFW		DataB0
			CALL		F_Getdb_Sub
			MOVFW		R_WorkRam0
			MOVWF		R_SecTmH
			MOVFW		R_WorkRam1
			MOVWF		R_SecTmL

			MOVLW		7fh
			ANDWF		Para,		F	;SEC REG BIT7=0 --> START

			CALL		Ds1302SetSec
			RET

;--------------------------------------------------------------
;
;			Ds1302 WRITE BIT
;			INPUT:Data,BitCnt
;
;--------------------------------------------------------------

WriteBitDs1302:
			MOVWF		DataB0
			DS1302_DA_OUT
			goto		$+1
			goto		$+1
			goto		$+1
			MOVLW		08h
			MOVWF		BitCntB0
WriteBitDs1302Go:			
			BTFSS		DataB0,		B0
			goto		Write0Ds1302
Write1Ds1302:
			SET_DS1302_DA
			goto		$+1
			CLR_DS1302_CK
			goto		$+1
			SET_DS1302_CK
			goto		JudgeDs1302BitCnt
Write0Ds1302:
			CLR_DS1302_DA
			goto		$+1
			CLR_DS1302_CK
			goto		$+1
			SET_DS1302_CK
JudgeDs1302BitCnt:
			RRF		DataB0,		F
			DECFSZ		BitCntB0,	F
			goto		WriteBitDs1302Go
			
			RET
			
;--------------------------------------------------------------
;
;			Ds1302 Read BIT
;			INPUT:Data,BitCnt
;
;--------------------------------------------------------------

ReadBitDs1302:
			DS1302_DA_IN
			goto		$+1
			goto		$+1
			goto		$+1
			MOVLW		08h
			MOVWF		BitCntB0
ReadBitDs1302Go:			
			SET_DS1302_CK
			goto		$+1
			CLR_DS1302_CK
			goto		$+1
			goto		$+1
			
			BCF		STATUS,		C
			BTFSC		DS1302_DA
			BSF		STATUS,		C
			RRF		DataB0,		F
			DECFSZ		BitCntB0,	F
			goto		ReadBitDs1302Go
			
			RET

;--------------------------------------------------------------
;
;			Ds1302 set wp disable
;			input:	Para
;
;--------------------------------------------------------------

Ds1302SetWp:
			SET_DS1302_CE
			
			MOVLW		WR_DS1302_WP
			CALL		WriteBitDs1302
			
			MOVFW		Para
			CALL		WriteBitDs1302
			
			CLR_DS1302_CK
			CLR_DS1302_CE
			RET
			
;--------------------------------------------------------------
;
;			Ds1302 set second
;			input:	Para
;
;--------------------------------------------------------------

Ds1302SetSec:
			SET_DS1302_CE

			MOVLW		WR_DS1302_SEC
			CALL		WriteBitDs1302

			MOVFW		Para
			CALL		WriteBitDs1302

			CLR_DS1302_CK
			CLR_DS1302_CE
			RET
			
;--------------------------------------------------------------
;
;			Ds1302 set minute
;			input:	Para
;
;--------------------------------------------------------------

Ds1302SetMin:
			SET_DS1302_CE

			MOVLW		WR_DS1302_MIN
			CALL		WriteBitDs1302

			MOVFW		Para
			CALL		WriteBitDs1302

			CLR_DS1302_CK
			CLR_DS1302_CE
			RET

;--------------------------------------------------------------
;
;			Ds1302 set hour
;			input:	Para
;
;--------------------------------------------------------------

Ds1302SetHour:
			SET_DS1302_CE
			
			MOVLW		WR_DS1302_HOUR
			CALL		WriteBitDs1302
			
			MOVFW		Para
			CALL		WriteBitDs1302
			
			CLR_DS1302_CK
			CLR_DS1302_CE
			RET

;--------------------------------------------------------------
;
;			Ds1302 set second
;			output:	Data
;
;--------------------------------------------------------------

Ds1302ReadSec:
			SET_DS1302_CE
			
			MOVLW		RD_DS1302_SEC
			CALL		WriteBitDs1302
			
			CALL		ReadBitDs1302
			
			CLR_DS1302_CE
			RET
			
;--------------------------------------------------------------
;
;			Ds1302 set minute
;			output:	Data
;
;--------------------------------------------------------------

Ds1302ReadMin:
			SET_DS1302_CE
			
			MOVLW		RD_DS1302_MIN
			CALL		WriteBitDs1302
			
			CALL		ReadBitDs1302
			
			CLR_DS1302_CE
			RET

;--------------------------------------------------------------
;
;			Ds1302 set hour
;			output:	Data
;
;--------------------------------------------------------------

Ds1302ReadHour:
			SET_DS1302_CE
			
			MOVLW		RD_DS1302_HOUR
			CALL		WriteBitDs1302
			
			CALL		ReadBitDs1302
			
			CLR_DS1302_CE
			RET
;-------------------------------------------------------------------------
;
;--------------------------------------------------------------------------
L_ReSetDS1302:
			MOVLW		00h
			MOVWF		Para
			CALL		Ds1302SetSec

			SWAPF		R_MinH,		W
			IORWF		R_MinL,		W			
			MOVWF		Para
			CALL		Ds1302SetMin

			SWAPF		R_HourH,	W
			IORWF		R_HourL,	W
			MOVWF		Para
			CALL		Ds1302SetHour
			RET

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -