Hola tengo problemas con este programa también que es del libro "microcontroladores pic programación en basic" de Carlos A Reyes.
Mi problema es que el display LCD no me muestra nada de nada y por lo que veo nunca se prende el pin que pone en enable al display.
Les paso mi código con algunas modificaciones que vi en este tema y otras que vi en youtube.
CMCON = 7
DEFINE I2C_SCLOUT 1 ;para que no necesite resistencia pull-up en SCL
DEFINE LCD_DREG PORTA ; define pines del LCD B4 a B7
DEFINE LCD_DBIT 0 ; empezando desde el Puerto B4 hasta el B7
DEFINE LCD_RSREG PORTB ;define el puerto B para conectar el bit RS
DEFINE LCD_RSBIT 3 ;este es el puerto B3
DEFINE LCD_EREG PORTA ;define el puerto B para conectar el bit Enable
DEFINE LCD_EBIT 4 ;este es el puerto B2
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 sólo leer el RTC
INICIO:
LCDOUT $fe,1
TIEMPO:
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,$80,HEX2 hora,":",HEX2 minu,":",HEX2 segu ;mostrar la hora
; min y segs. en 2 dígitos (HEX2)
LCDOUT $fe,$c0 ;saltar a la 2da línea del LCD
;mostrar día de la semana
IF diaS=$1 THEN LCDOUT "Dom."
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 segundos
GOTO tiempo ;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,[$52] ;setear 52 minutos
PAUSE 10
I2CWRITE DPIN,CPIN,%11010000,2,[$22] ;setear las 22 horas
PAUSE 10
I2CWRITE DPIN,CPIN,%11010000,3,[$3] ;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,[$07] ;setear mes julio
PAUSE 10
I2CWRITE DPIN,CPIN,%11010000,6,[$16] ;setear año 16
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
Yo como en el libro estoy usando un microcontrolador pic 16F628A
Espero me puedan ayudar por que ya no se que vuelta mas darle.
Desde ya muchas gracias