Hola, pues fijense, que no era ni el pic, ni la pantalla, ni el cristal (estoy usando el interno del pic 16f648a), si no que era un pin del lcd mal soldado a la placa....
Lo que pasaba esque al checar continuidad con el multimetro, presionaba un poco la soldadura y eso me engañaba pues al rpesionarla hacia contacto con la pista y si habia continuidad...
pero a la hora de usar el circuito esta soldadura no hacía contacto, y pues me imagino que por eso como decian no enviaba unos bits, ayer resoldé un poco algunos pines, y ya funciona...
Y gracias por tu comentario sobre el cristal, no fue mi caso, pero me servira por si alguna vez me pasa lo mismo...
Bueno gracias por haber solucionado ese problema pero ahora tengo otro...relacionado con la programacion espero me ayuden...
tengo 3 botones... los utilizo de esta forma: izquierda, entrar, derecha, con la izquierda y derecha cambio los mensajes en el lcd por medio de gosub-return, cuando un boton se activa, se ejecuta un gosub y va a una rutina que muestra un mensaje, si vuelvo a presionar derecha ejecuta el siguiente gosub, si presiono izquierda ejecuta return...
el problema principal esque... a cada etiqueta que accedo con el gosub tengo que poner pause 500 para una buena inicializacion del lcd, y luego checar el estado de cada boton, y si no pasó nada, goto etiqueta para regresar a checar todos los botones, pero al regresar, vuelven a pasar los 500 ms de inicio de lcd, y esto es incomodo a la hora de presionar un boton, pues, tengo que mantenerlo presionad un rato para que lo detecte bien, pero aveces me paso de rato y me lo detecta doble vez, y es incomodo.. les dejo una parte del programa (que es repetitiva y es donde tengo ese problema):
UNO:
pause 500
LCDOUT $FE, 1, "QUE ESTES"
LCDOUT $FE, $C0, "SUPER BIEN"
IF DERECHA = 0 THEN pause 50
IF DERECHA = 0 THEN GOSUB DOS
IF CENTRO = 0 THEN pause 50
IF CENTRO = 0 THEN INICIO
pause 500
GOTO UNO
DOS:
LCDOUT $FE, 1, "CUIDATE"
LCDOUT $FE, $C0, "MUCHO"
IF DERECHA = 0 THEN pause 50
IF DERECHA = 0 THEN GOSUB TRES
IF CENTRO = 0 THEN pause 50
IF CENTRO = 0 THEN INICIO
IF IZQUIERDA = 0 THEN PAUSE 50
IF IZQUIERDA = 0 THEN return
GOTO DOS
TRES:
LCDOUT $FE, 1, "TE QUIERO"
LCDOUT $FE, $C0, "MUCHO"
IF CENTRO = 0 THEN pause 50
IF CENTRO = 0 THEN INICIO
IF IZQUIERDA = 0 THEN pause 50
IF IZQUIERDA = 0 THEN RETURN
IF DERECHA = 0 THEN PAUSE 50
IF DERECHA = 0 THEN GOSUB CUATRO
GOTO TRES