mira con este programa he trabajado, la cosa es que modifico
DEVICE = 16F628A
XTAL = 4
LCD_DTPIN = PORTB.4
LCD_RSPIN = PORTB.3
LCD_ENPIN = PORTB.0
LCD_INTERFACE = 4 ' 4-bit Interface
LCD_LINES = 2 ' 2-Line LCD
LCD_TYPE = 0 ' Alphanumeric LCD type
CMCON=7
DIM RTCCMD AS BYTE
DIM TEMP AS BYTE
DIM TEMP1 AS BYTE
DIM TIMEDATA[6] AS BYTE
DIM OLDSECONDS AS BYTE
DIM SECONDS AS timedata#0
DIM MINUTES AS timedata#1
DIM HOURS AS timedata#2
DIM DATE AS timedata#3
DIM MONTH AS timedata#4
DIM YEAR AS timedata#5
'Define registers
SYMBOL SECREG = %00000
SYMBOL MINREG = %00001
SYMBOL HRSREG = %00010
SYMBOL DATEREG = %00011
SYMBOL MONREG = %00100
SYMBOL YRREG = %00110
SYMBOL CTRLREG = %00111
SYMBOL BRSTREG = %11111
SYMBOL CLK = PORTA.0
SYMBOL DTA = PORTA.1
SYMBOL RST = PORTB.6
' Time setup data held in eeprom memory
PRST EDATA $00,$00,$12,$20,$03,$02
ALL_DIGITAL = True
CLS
' Clear Write Protect bit in control register of DS1302
TEMP = $10
RTCCMD = CTRLREG
GOSUB DS1302_WRITE
' Pre-set the time registers using a data table stored in eeprom memory
FOR TEMP1 = 0 TO 5
TEMP = EREAD PRST + TEMP1
RTCCMD = TEMP1
GOSUB DS1302_WRITE
NEXT
TEMP = $80
RTCCMD = CTRLREG
GOSUB DS1302_READ
'Only Displays on the LCD if the seconds have changed
WHILE 1 = 1
GOSUB DS1302_READ
IF OLDSECONDS <> SECONDS THEN
PRINT AT 1,1, "TIME ", HEX2 HOURS,":",HEX2 MINUTES,":",HEX2 SECONDS
PRINT AT 2,1, "DATE ", HEX2 DATE,"/",HEX2 MONTH,"/",HEX2 YEAR
ENDIF
WEND
'-----------------------------------------------------------------------------------
' Write to DS1302 RTC
DS1302_WRITE:
HIGH RST
SHOUT DTA, CLK, LSBFIRST, [%0\1,RTCCMD\5,%10\2,TEMP\8]
LOW RST
RETURN
'-----------------------------------------------------------------------------------
' Read from the DS1302
DS1302_READ:
HIGH RST
SHOUT DTA, CLK, LSBFIRST, [%111111\6,%10\2]
OLDSECONDS = SECONDS
SHIN DTA, CLK, LSBPRE, [SECONDS,MINUTES,HOURS,DATE,MONTH,YEAR,YEAR]
LOW RST
RETURN