'ejemplo tomado del amigo xocas, modificado (gracias amigo)
'Pic 16f877A

Define CONF_WORD = 0x3f71
Define CLOCK_FREQUENCY = 4
Define LCD_LINES = 4
Define LCD_CHARS = 20

'-------------------------------------Puertos del LCD-----------------------------------------------
Define LCD_BITS = 4  'indicamos que el bus de datos del lcd sera de 8bit
Define LCD_DREG = PORTB  'el bus de datos sera el puerto B
Define LCD_DBIT = 4  '(0/4) indiferente en bus de 8 bits
Define LCD_RSREG = PORTB  'el bit RS está en el puerto A
Define LCD_RSBIT = 1  'se usa RA0 RS
Define LCD_EREG = PORTB  'el bit E está en el puerto A
Define LCD_EBIT = 2  'se usa RA1 para E
Define LCD_COMMANDUS = 2000  'Tiempo de espera despues de ejecutar un comand del lcd en uSeg.
Define LCD_DATAUS = 100  'Tiempo de espera despues de enviar un dato al LCD en uSeg.
Define LCD_INITMS = 100  'Tiempo de espera despues de inicializar el Display, solo se ejecuta una vez en mSeg.

Lcdinit

'-----------------------------------Puerto I2C-----------------------------------------------------
Symbol sda = PORTC.4  'asignamos nombre al pin que hara de SDA del puerto I2C
Symbol scl = PORTC.3  'asignamos nombre al pin que hara de SCL del puerto I2C
'***********************************DEFINICION DE VARIABLES**************************************

'--------------------------------------Variables Programa----------------------------------------
Dim addr(7) As Byte
Dim data As Byte
Dim escribe As Byte

Dim sec As Byte
Dim min As Byte
Dim hour As Byte
Dim day As Byte
Dim daym As Byte
Dim month As Byte
Dim year As Byte
Dim d_hi As Byte
Dim d_lo As Byte

WaitMs 1000

'bucle que escribe los datos iniciales en DS1307
For addr = 0 To 6
escribe = LookUp(0x00, 0x15, 0x16, 0x01, 0x22, 0x06, 0x08), addr
I2CWrite sda, scl, 0xd0, addr, escribe  'escribe los datos al DS1307
Next addr

'bucle para lectura de datos desde el DS1307
loop:
addr = 0
I2CRead sda, scl, 0xd1, addr, sec
addr = 1
I2CRead sda, scl, 0xd1, addr, min
addr = 2
I2CRead sda, scl, 0xd1, addr, hour
addr = 3
I2CRead sda, scl, 0xd1, addr, daym
addr = 4
I2CRead sda, scl, 0xd1, addr, day
addr = 5
I2CRead sda, scl, 0xd1, addr, month
addr = 6
I2CRead sda, scl, 0xd1, addr, year

'escribimos resultado en el lcd
Lcdcmdout LcdClear
Lcdcmdout LcdLine3Home
Lcdout " Hora: "
data = hour
Gosub print
Lcdout "."
data = min
Gosub print
Lcdout "."
data = sec
Gosub print
Lcdcmdout LcdLine4Home
Lcdout "Fecha: "
data = day
Gosub print
Lcdout "/"
data = month
Gosub print
Lcdout "/0", #year

WaitMs 100
Goto loop

End                                               

'subrutina de conversión
print:
d_hi = data / 16
d_lo = data Mod 16
If d_hi < 10 Then
Lcdout #d_hi
Else
Lcdout "X"
Endif
If d_lo < 10 Then
Lcdout #d_lo
Else
Lcdout "X"
Endif
Return  