view src/rtc.asm @ 601:08a0162d3ca1

Fix false CNS readings in logbook
author heinrichsweikamp
date Tue, 14 Aug 2018 11:01:47 +0200
parents e1f0f5e3d4e4
children ca4556fb60b9
line wrap: on
line source

;=============================================================================
;
;   File rtc.asm													## V2.98
;
;
;   Copyright (c) 2011, JD Gascuel, HeinrichsWeikamp, all right reserved.
;=============================================================================
; HISTORY
;  2011-08-08 : [mH] moving from OSTC code

#include "hwos.inc"
#include "math.inc"

sensors		CODE

;=============================================================================

	global	rtc_init
rtc_init:
	movlw	.1
	movwf	secs
	movlw	.59
	movwf	mins
	movlw	.12
	movwf	hours
	movlw	.1
	movwf	day
	movlw	.8
	movwf	month
	movlw	.18
	movwf	year
;	rcall	rtc_set_rtc			; writes mins,sec,hours,day,month and year to rtc module
;	return

	global	rtc_set_rtc
rtc_set_rtc:
	banksel	0xF16				; Addresses, F16h through F5Fh, are also used by SFRs, but are not part of the Access RAM
	movlw	0x55
	movwf	EECON2
	movlw	0xAA
	movwf	EECON2
	bsf	RTCCFG,RTCWREN		; Unlock sequence for RTCWREN
	bsf	RTCCFG,RTCPTR1
	bsf	RTCCFG,RTCPTR0		; year
	movff	year,WREG
	rcall	rtc_dec2bcd			; IN: WREG in decimal, OUT: WREG in BCD, also sets to bank16h!
	movwf	RTCVALL				; year
	movwf	RTCVALH				; dummy write
	movff	day,WREG
	rcall	rtc_dec2bcd			; IN: WREG in decimal, OUT: WREG in BCD, also sets to bank16h!
	movwf	RTCVALL				; day
	movff	month,WREG
	rcall	rtc_dec2bcd			; IN: WREG in decimal, OUT: WREG in BCD, also sets to bank16h!
	movwf	RTCVALH				; month
	movff	hours,WREG
	rcall	rtc_dec2bcd			; IN: WREG in decimal, OUT: WREG in BCD, also sets to bank16h!
	movwf	RTCVALL				; hours
	movlw	d'0'
	rcall	rtc_dec2bcd			; IN: WREG in decimal, OUT: WREG in BCD, also sets to bank16h!
	movwf	RTCVALH				; weekday
	movff	secs,WREG
	rcall	rtc_dec2bcd			; IN: WREG in decimal, OUT: WREG in BCD, also sets to bank16h!
	movwf	RTCVALL				; secs
	movff	mins,WREG
	rcall	rtc_dec2bcd			; IN: WREG in decimal, OUT: WREG in BCD, also sets to bank16h!
	movwf	RTCVALH				; minutes
	movlw	0x55
	movwf	EECON2
	movlw	0xAA
	movwf	EECON2
	bcf	RTCCFG,RTCWREN		; Lock sequence for RTCWREN
	banksel	common
	return

rtc_dec2bcd:
	banksel	lo
	movwf	lo					; Input in decimal
	setf	hi					; 10s
rtc_dec2bcd2:
	incf	hi,F				; Count 10's
	movlw	d'10'
	subwf	lo,F
	btfss	STATUS,N
	bra		rtc_dec2bcd2
	movlw	d'10'
	addwf	lo,F				; 1s
	swapf	hi,W				; swap to bit 7-4 -> WREG
	addwf	lo,W				; Result in BCD
	banksel	0xF16				; Addresses, F16h through F5Fh, are also used by SFRs, but are not part of the Access RAM
	return

	END