Hi,

Thanks for your help... The following code works fine for just hours and minutes.

Posted here for reference should anyone else need this.

18F4520 - running with a 20mhz crystal - 4x20 LCD

Code:
ASM 
  __CONFIG    _CONFIG1H, _OSC_HSPLL_1H
  __CONFIG    _CONFIG2L, _PWRT_ON_2L  
  __CONFIG    _CONFIG2H, _WDT_ON_2H & _WDTPS_512_2H
  __CONFIG    _CONFIG3H, _MCLRE_ON_3H & _LPT1OSC_OFF_3H & _PBADEN_OFF_3H  
  __CONFIG    _CONFIG4L, _LVP_OFF_4L & _XINST_OFF_4L
ENDASM

DEFINE  OSC 48  ; config settings 18F4580, 20mhz crystal
ADCON1 = $0F
clear

	RTCMin var byte		' Minutes
	RTCHour var byte	' Hours
	RTCCtrl var byte	' Control 
                   
SCLpin var PORTC.3               ' RTC pin - clk
SDApin var PORTC.4               ' RTC pin - data	

Hours             var byte
Minutes           var byte	

	CounterA var byte	' General purpose Variable
	CounterB var byte	' General purpose Variable
	CounterC var byte	' General purpose Variable
	CounterD var byte	' General purpose Variable
	
	SetMN var byte		' Minutes
	SetHR var byte	' Hours


'analog settings

ADCON0 = 0                      'Set ADCON0
ADCON1 = %00001111              'Set D i/o
CMCON = 7                       'Disable Comparators

PR2 = 249 
'****************************************************************
'Port settings

CCP1CON = %00001100             ' 
CCP2CON = %00001100             '     
TRISA  = %11101111              'set PORTA as all output apart from 0,1,2
TRISB  = %00000011 
TRISD  = %00000011              'set PORTB as all output apart from 0&1
DEFINE LCD_DREG  PORTB           ' LCD Data port
DEFINE LCD_DBIT  0               ' starting Data bit (0 or 4)
DEFINE LCD_EREG  PORTB           ' LCD Enable port
DEFINE LCD_EBIT  5               '     Enable bit  (on EasyPIC 5 LCD)
DEFINE LCD_RSREG PORTB           ' LCD Register Select port
DEFINE LCD_RSBIT 4               '     Register Select bit   (on EasyPIC 5 LCD)
DEFINE LCD_BITS  4               ' LCD bus size (4 or 8 bits)
DEFINE LCD_LINES 4               ' number of lines on LCD
DEFINE LCD_COMMANDUS 2000        ' Command delay time in us 
DEFINE LCD_DATAUS 50             ' Data delay time in us 

setHR = 12
setMN = 01

'	Save Minutes
'	------------
			CounterA=SetMN
			Gosub ConvertBCD
			RTCMin=CounterB
'
'	Save Seconds
'	------------
			CounterA=SetHR
			Gosub ConvertBCD
			RTCHour=CounterB

I2cwrite  SDApin,SCLpin,$D0,$01,[RTCMin,RTCHour]  ; read DS1307 chip
		
main:		
I2CREAD SDApin,SCLpin,$D0,$01,[RTCMin,RTCHour]  ; read DS1307 chip

	LCDOut $FE,$80
If RTCHour.6=1 then
			
CounterA=(RTCHour>>4)&$01                           ' Work-Out 12 or 24 hour Display for Hours
else
CounterA=(RTCHour>>4)&$03
endif
CounterA=CounterA*10+(RTCHour&$0F)                  ' Display Hours appropriately for 12 or 24 hour Mode 
If RTCHour.6=1 then			
LCDOut $FE,$D4,#CounterA
else
LCDOut $FE,$D4,#CounterA Dig 1,#CounterA Dig 0
endif
LCDOut ":",#(RTCMin>>4)&$0F,#RTCMin&$0F,"   "

	Goto main
ConvertBCD:
	CounterB=CounterA DIG 1                        ' CounterA is the entry variable
	CounterB=CounterB<<4                           ' CounterB holds the converted BCD result on exit
	CounterB=CounterB+CounterA DIG 0
	Return
It's all rough and ready... now to convert the Hours and minutes into the value for a counter and try this in my next version of aquarium lighting

Thanks for your contribution - steep learning curve but I'm getting there