Aqui le dejo este ejemplo en pbp que tengo por ahi para los que lo necesiten. Esta sencillo y entendible.
;Programa para escribir y leer un RTC DS1307
Define I2C_SCLOUT 1 ;No es necesario resistencia pull-up en SCL
CPIN Var Portb.7 ;pin señal de reloj I2C
DPIN Var Portb.6 ;pin de datos I2C
segu var byte ;definir tamaño de variable segundos 1 a 255
minu var byte ;variable para los minutos
hora var byte ;variable para las horas
diaS var byte ;variable día de la semana
diaF var byte ;variable día fecha del mes
mes var byte ;variable mes
anio var byte ;variable año de 2 dígitos
actualizado VAR BIT ;variable para almacenar un 1 o 0
EEPROM 0,[0] ;memoria 0 con el valor inicial 0 , sirve para
;indicar que nunca ha corrido este programa
READ 0,actualizado ;carga el valor de la memoria EEPROM dirección 0
IF actualizado =0 THEN grabarRTC ;si es la 1ra vez que corre ir a grabar RTC
;caso contrario solo leer el RTC
INICIO:
I2CREAD DPIN,CPIN,%11010000,0,[segu] ;leer los datos de mem. 0,
I2CREAD DPIN,CPIN,%11010000,1,[minu] ;1,2,..y guardarlos en sus
I2CREAD DPIN,CPIN,%11010000,2,[hora] ;respectivas variables
I2CREAD DPIN,CPIN,%11010000,3,[diaS]
I2CREAD DPIN,CPIN,%11010000,4,[diaF]
I2CREAD DPIN,CPIN,%11010000,5,[mes]
I2CREAD DPIN,CPIN,%11010000,6,[anio]
lcdout $fe,1,hex2 hora,":",hex2 minu,":",hex2 segu ;mostrar la
;hora minuto y segundos en 2 dígitos (HEX2)
lcdout $fe,$c0 ; saltar a la 2da línea del LCD
if diaS=$1 then lcdout "Dom." ;mostrar día de la semana
if diaS=$2 then lcdout "Lun."
if diaS=$3 then lcdout "Mar."
if diaS=$4 then lcdout "Mie."
if diaS=$5 then lcdout "Jue."
if diaS=$6 then lcdout "Vie."
if diaS=$7 then lcdout "Sab."
lcdout $fe,$c5,hex2 diaF,"/" ;mostrar el día del mes /
lcdout $fe,$cB,"/20",hex2 anio ; mostrar año /20 + 04
lcdout $fe,$c8 ;pasar a la casilla 8
if mes=$1 then lcdout "ene" ;mostrar el mes
if mes=$2 then lcdout "feb"
if mes=$3 then lcdout "mar"
if mes=$4 then lcdout "abr"
if mes=$5 then lcdout "may"
if mes=$6 then lcdout "jun"
if mes=$7 then lcdout "jul"
if mes=$8 then lcdout "ago"
if mes=$9 then lcdout "sep"
if mes=$10 then lcdout "oct"
if mes=$11 then lcdout "nov"
if mes=$12 then lcdout "dic"
PAUSE 500 ;esperar 0,5 segundo
goto inicio ;volver a leer los datos
; ************************ subrutina grabar *********************
grabarRTC:
I2CWRITE DPIN,CPIN,%11010000,0,[$00] ;setear 00 segundos
Pause 10 ;retardo para finalizar grabación
I2CWRITE DPIN,CPIN,%11010000,1,[$30] ;setear 30 minutos
Pause 10
I2CWRITE DPIN,CPIN,%11010000,2,[$13] ;setear las 13 horas
Pause 10
I2CWRITE DPIN,CPIN,%11010000,3,[$2] ;setear día lunes ,D=1,L=2
Pause 10 ;M=3 , M=4, J=5, V=6, S=7
I2CWRITE DPIN,CPIN,%11010000,4,[$27] ;setear día 27 del mes
Pause 10
I2CWRITE DPIN,CPIN,%11010000,5,[$9] ;setear mes septiembre
Pause 50
I2CWRITE DPIN,CPIN,%11010000,6,[$04] ;setear año 04
Pause 10
I2CWRITE DPIN,CPIN,%11010000,7,[$10] ;control %00010000 para
Pause 10 ;encender el led cada 1 seg.
WRITE 0,1 ;escribe en la memoria 0 el valor de 1 para que no
;se vuelva a grabar otra vez estos datos en el RTC
goto inicio ;ir a presentar los datos en el LCD
end