please dont rip this site

PIC Microcontoller Time/IO Method

NJU6355 E or G version Real Time Clock interface code

by Andrew D. Vassallo

;-------------------------------------------------------------------------------
;
; Real Time Clock interface code
;
; by Andrew D. Vassallo
; email: snurple@hotmail.com
;
; These routines were written specifically for the NJU6355 E or G version RTC.
; They may be usable for other clocks, but have not been tested.
;
;-------------------------------------------------------------------------------

;------ All variables in Bank 0
CBLOCK
	Year
	Month
	Date
	Day
	Hours
	Minutes
	Seconds
	Time_Temp
	Time_Count
ENDC


#define	CLK	PORTB, 0
#define	DATA	PORTB, 1
#define	IO	PORTB, 2		; input/output select
#define	CE	PORTB, 3		; chip enable bit


;--------------------------------------------- Subroutines Follow ----------------------------------------------

;------ This routine sets the time for the RTC.  Note that upon power-up, the RTC has NO TIME SET.  You must
;------ define the time and set it in the RTC before attempting to read it.  Otherwise, no values will be returned.
;------ Note: the Get_Time routine reads the variables from the RTC and stores them in BCD format, not Hex.  If
;------ you want to "reset" the time with the Set_Time routine, then you don't have to use the Hex2BCD conversion.
;------ In fact, if the original variables are defined in BCD format, you don't need to convert, either.  But, since
;------ Hex is easier to work with and necessary for table lookup, it might be worthwhile to convert back and forth
;------ if you need to manipulate the variables or use a table.
Set_Time
		bcf	CLK			; need CLK low for CE toggle
		nop
		bsf	IO			; see timing diagram from NJU6355 datasheet
		nop
		bsf	CE
; Send 44 bits total (Year[8],Month[8],Date[8],Day[4],Hours[8],Minutes[8])
		movf	Year, 0
		call	Hex2BCD			; must convert each variable to BCD before sending to RTC
		movwf	Time_Temp
		call	Write_RTC

		movf	Month, 0
		call	Hex2BCD
		movwf	Time_Temp
		call	Write_RTC

		movf	Date, 0
		call	Hex2BCD
		movwf	Time_Temp
		call	Write_RTC

		movf	Day, 0
		call	Hex2BCD
		movwf	Time_Temp
		call	Write_RTC_4bits		; Day input is only 4 bits

		movf	Hours, 0
		call	Hex2BCD
		movwf	Time_Temp
		call	Write_RTC

		movf	Minutes, 0
		call	Hex2BCD
		movwf	Time_Temp
		call	Write_RTC

; Ignore Seconds - RTC does not accept "seconds" input
		bcf	CLK			; finally pull the clock low for CE toggle
		nop
		bcf	CE			; send the final write command to the RTC
		nop
		bcf	IO			; leave the RTC in output mode
		return

;------ This routine grabs the current time from the RTC and STORES IT IN
;------ BCD FORMAT in the registers Year, Month, Date, Day, Hours, Minutes, Seconds
;------ This is worth noting again: THE VARIABLES ARE STORED IN BCD FORMAT, NOT HEX
Get_Time
		bcf	CLK
		nop
		bcf	IO			; see timing diagram from NJU6355 datasheet
		nop
		bsf	CE
; Read all 52 bits (Year[8],Month[8],Date[8],Day[4],Hours[8],Minutes[8],Seconds[8])
		call	Read_RTC
		movwf	Year

		call	Read_RTC
		movwf	Month

		call	Read_RTC
		movwf	Date

		call	Read_RTC_4bits		; Day value is only 4 bits
		movwf	Day

		call	Read_RTC
		movwf	Hours

		call	Read_RTC
		movwf	Minutes

		call	Read_RTC
		movwf	Seconds

; Turn off RTC output
		bcf	CE
		return

;------ This just clocks the next RTC function into Time_Temp and returns it in W.
; Call with: nothing required for call
; Returns with: time function byte in W
; Uses: Time_Temp as temporary storage and Time_Count for bit counter
Read_RTC_4bits
		movlw	0x04
		goto	$+2
Read_RTC
		movlw	0x08
		movwf	Time_Count
Read_Loop
		bsf	CLK			; data valid after CLK->high
		bsf	STATUS, C		; default is "1" output from RTC
		btfss	DATA
		bcf	STATUS, C
		bcf	CLK
		rrf	Time_Temp, 1		; LSB output first
		decfsz	Time_Count, 1
		goto	Read_Loop
		movf	Time_Temp, 0		; move into W for return
		return

;------ This just clocks whatever is in the W register out to the RTC.
; Use "Write_RTC" to send 8-bit values.  Use "Write_RTC_4bits" for 4-bit values.
; Call with: number to be sent in Time_Temp
; Returns with: nothing returned
; Uses: Time_Temp as temporary storage
Write_RTC_4bits
		movlw	0x04
		goto	$+2
Write_RTC
		movlw	0x08
		movwf	Time_Count
Write_Loop
		bcf	CLK
		nop
		bsf	DATA			; default is "1" output from RTC
		btfss	Time_Temp, 0		; send LSB first each time
		bcf	DATA
		nop
		bsf	CLK			; data valid after CLK->high
		rrf	Time_Temp, 1
		decfsz	Time_Count, 1
		goto	Write_Loop
		return

;------ Must convert from Hex to BCD for output to RTC
; Note that this BCD conversion is limited to input values less than 99 decimal (0x63 hex)
; Call with: number to be converted in W
; Returns with: converted BCD number in W
; Uses: Time_Temp and Time_Count to hold value during calculations
Hex2BCD
		movwf	Time_Count		; use as temporary holding register for conversion
		clrw
		btfsc	Time_Count, 4
		addlw	0x16
		btfsc	Time_Count, 5
		addlw	0x32
		addlw	0x06
		skpdc
		addlw	-0x06
		btfsc	Time_Count, 6
		addlw	0x64
		addlw	0x06
		skpdc
		addlw	-0x06
		movwf	Time_Temp
		movf	Time_Count, 0
		andlw	0x0F
		addwf	Time_Temp, 0
		skpndc
		addlw	0x06
		addlw	0x06
		skpdc
		addlw	-0x06
		return

Comments:

Questions:


file: /Techref/microchip/nju6355rtc-dv.htm, 5KB, , updated: 2009/3/19 09:55, local time: 2024/11/14 22:52, owner: ADV--A41,
TOP NEW HELP FIND: 
18.218.163.82:LOG IN

 ©2024 These pages are served without commercial sponsorship. (No popup ads, etc...).Bandwidth abuse increases hosting cost forcing sponsorship or shutdown. This server aggressively defends against automated copying for any reason including offline viewing, duplication, etc... Please respect this requirement and DO NOT RIP THIS SITE. Questions?
Please DO link to this page! Digg it! / MAKE!

<A HREF="http://massmind.ecomorder.com/Techref/microchip/nju6355rtc-dv.htm"> NJU6355 E or G version Real Time Clock interface code</A>

After you find an appropriate page, you are invited to your to this massmind site! (posts will be visible only to you before review) Just type a nice message (short messages are blocked as spam) in the box and press the Post button. (HTML welcomed, but not the <A tag: Instead, use the link box to link to another page. A tutorial is available Members can login to post directly, become page editors, and be credited for their posts.


Link? Put it here: 
if you want a response, please enter your email address: 
Attn spammers: All posts are reviewed before being made visible to anyone other than the poster.
Did you find what you needed?

 

Welcome to ecomorder.com!

 

Welcome to massmind.ecomorder.com!

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  .