Autor Tema: PROBLEMA LCD 16X2  (Leído 4087 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado javig.16

  • PIC10
  • *
  • Mensajes: 11
PROBLEMA LCD 16X2
« en: 22 de Enero de 2016, 09:10:43 »
Buenas estoy haciendo mi primer proyecto con microcontroladores pics. Mi problema es que la primera vez conectada la lcd 16x2 al controlador 16f876A me funcionó correctamente mandandome los mensajes de inicio. Despues soldé la lcd a la maqueta y conecté los cables y lo que pasaba era que me aparecian cuadrados en las dos lineas sin aparecer las letras. He estado mirando a que se podia deber este problema y he revisado correctamente las conexiones y los contrastes, tengo un potenciometro de 4,76 k conectado a Vo y ese no creo q sea el problema porque como ya dije me funciona. Volví a programar el controlador y me volvió a funcionar. pero despues de desconectarlo de la fuente 3 o 4 veces me volvió a pasar se me enciende la pantlla con los cuadrados en negro. Volví a probar y programar de nuevo el pic pero sigue mandando cuadrados. No se donde puede estar el error.
El programa funciona bien en proteus.
El código es el siguiente:


   LIST P=16F876A
   INCLUDE "p16F876A.INC"
 
   CBLOCK 0x20      ;DEFINIMOS LAS VARIABLES
   CONTA1 ;0x20
   CONTA2
   CONTA3
   CONTA01 ;0x23
   CONTA02
   CONTA03
   CONTA11 ;0x26
   CONTA22
   CONTA33
   CONTAA1
   CONTAA2 ;0X30
   CONTAA3
   VALOR1
   VALOR2 ;0x33
   VALUZI
   VALUZD
   TEMP   ;0x36
 

   ENDC

 
   ORG 0x00
   GOTO CONFIGURACION
   ORG 0x04
   RETURN
 

CONFIGURACION
 
;-------  Configuramos EL ADCON 1 Y puertos como E/S --------
 
   bsf    STATUS,5
   MOVLW    b'00000100'     ; CONFIGURACION ADCON1
      MOVWF    ADCON1
     MOVLW    b'00111111'
      MOVWF    TRISA
      CLRF     TRISC
      CLRF     TRISB
 
;-------  LIMPIAMOS PUERTOS -------
 
   BANKSEL  PORTA
   CLRF     VALUZI
   CLRF     VALUZD
   CLRF     PORTA
   CLRF     PORTC
   CLRF     PORTB
   CLRF     INTCON

;_*_*_*_*_*_* Inicio de la LCD _*_*_*_*_*_*_*_*_*_*_*_

INICIO_LCD   

   BCF   STATUS,5   ; BANCO 0
   BCF   PORTC,6      ; RS = 0
   MOVLW   b'00000001'   ; LIMPIO LCD
   MOVWF   PORTB
   CALL   EJECUTA   
   MOVLW   b'00000110'   ; HABILITAMOS EL COMANDO
   MOVWF   PORTB      ; MODO DE ENTRADA DE IZQUIERDA A DERECHA, INCREMENTO.
   CALL   EJECUTA   
   MOVLW   b'00001111'
   MOVWF   PORTB      ; VISUALIZADOR Y CURSOR ENCENDIDOS.
   CALL   EJECUTA   
   MOVLW   b'00111111'
   MOVWF   PORTB      ; MODO DE FUNCIONAMIENTO 8 BITS 2 LINEAS 5X10
    CALL    EJECUTA   
   BSF   PORTC,6




 
;_*_*_*_*_*_*_*_*_ Configuracion del ADC _*_*_*_*_*_*_*_*_*
 



 
   BANKSEL  ADCON0             ; Banco 0
   MOVLW    b'11000001'        ; Se activa el conversor en RA0
   MOVWF    ADCON0         ; Se activa el conversor
   BSF       PORTC,4      ;Activamos In A e In B para controlar los motores mas adelante      
   BSF       PORTC,5
   BSF       PORTA,2      ;ENCENDEMOS LOS 4 LEDS DEL TANKE QUE INDICAN QUE ESTA ENCENDIDO (VERDES)





;_*_*_*_*_*_*_*_*_*_*PROGRAMA PRINCIPAL*_*_*_*_*_*_*_*_*_*_*


   CALL   MENSAJE0   ; MENSAJE DE BIENVENIDA
   CALL   RETA2

PRINCIPAL
   
   CALL    START
   CALL    OBSTACULOS
   CALL     Conversion
      CALL     Check_Value
      GOTO     Accion_Motor
      GOTO     PRINCIPAL
 
;  **************************************************************************
;   Conversion : Realiza la conversion ADC (CH0 y CH1 ) y guarda los valores en 2 registros
;   Entrada: ----
;   Salida: VALUZD , VALUZI
;   Registros usados: ADCON0,ADRESH,PORTB
;  **************************************************************************
 
;----REVISAMOS SI EL BOTON ESTA ENCENDIDO (START) ------


START   BSF   PORTA,2   
   BTFSC   PORTA,4       ;¿Se ha pulsado el boton start?
   RETURN   
   CALL   MENSAJE01
   CALL   RETA      ; Si, seguimos con el programa
   GOTO   START      ;No, volvemos a pedir que se pulse el boton

;----COMPROBAMOS QUE NO HAY OBSTACULOS DELANTE A LA IZQUIERDA O A LA DERECHA DEL TANQUE---

OBSTACULOS
   CALL   RETA
   BTFSS   PORTA,5      ;¿Hay algun obstaculo deRECHA?
   GOTO   OBSTACULOIZQ
   BTFSS   PORTA,2      ;¿Hay algun obstaculo IZQUIERDA?
   GOTO   OBSTACULODER
   GOTO    OBSTACULOCEN
   
OBSTACULOCEN

   CALL   RETA      ; OBSTACULO DENLANTE y se paran los motores.
   CALL   MENSAJE7   
   BCF   PORTC,0
   BCF   PORTC,1
   BCF   PORTC,2
   BCF   PORTC,3
   GOTO   OBSTACULOS

OBSTACULODER   
   CALL   RETA      ; OBSTACULO DERECHA y se paran los motores.
   CALL   MENSAJE5   
   BCF   PORTC,0
   BCF   PORTC,1
   BCF   PORTC,2
   BCF   PORTC,3
   GOTO   OBSTACULOS

OBSTACULOIZQ
   
   BTFSS   PORTA,2   
   RETURN      
   CALL   RETA      ; se manda un mensaje y se paran los motores.
   CALL   MENSAJE6   ;HAY UN OBSTACULO A LA IZQUIERDA
   BCF   PORTC,0
   BCF   PORTC,1
   BCF   PORTC,2
   BCF   PORTC,3
   GOTO   OBSTACULOS






;--------Conversion-----

Conversion

   

   ; Canal 0

   BCF      ADCON0,CHS0
   CALL     RETA
   BSF      ADCON0,GO
   BTFSC    ADCON0,GO
   GOTO     $-1          ; SALTAMOS UNA INSTRRUCCION ATRAS
   MOVF     ADRESH,W        ; guardo el valor de la luz del ldr derecho
   MOVWF    VALUZD
 
   ; Canal 1
   BSF      ADCON0,CHS0
   CALL     RETA
   BSF      ADCON0,GO
   BTFSC    ADCON0,GO
   GOTO     $-1          ; saltamos una instrucción atras
   MOVF     ADRESH,W        ; guardo el valor de la luz del ldr izquierdo
   MOVWF    VALUZI           
   MOVWF    PORTB            ; 4 v equivale en dcimnal a 204 que en binario seria 11001100, los leds que deberian de encenderse cuando pongamos este valor en la ldr
   RETURN
 
;  **************************************************************************
;   Check_Value: Checkea el valor de los 2 registros y activa las flags del registro TEMP segun valores
;   Entrada: VALUZD, VALUZI
;   Salida: TEMP
;   Registros usados: -----
;  **************************************************************************
 

; ---------Check_Value revisamos la intensidad de la luz y la comparamos-------------


Check_Value
 
   CLRF     TEMP            ; Pongo a 0 las flags
   MOVLW    b'11001100'            ; comoparo el valor del ldr derecho si es menor de 204 (4v), si es menor activo motor izquierdo
   SUBWF    VALUZD,W        ; si no es menor vemos el valor del ldr izquierdo, para ver si estraa parado o solo va hacia la derecha
   BTFSS    STATUS,C
   BSF      TEMP,0          ; indicador que derecha es menor que 0xCC
   MOVLW    b'11001100'
   SUBWF    VALUZI,W
   BTFSS    STATUS,C
   BSF      TEMP,1          ; indicador que izquierda es menor que 0xCC
   RETURN
 
;  **************************************************************************
;   Accion_Motor: Hace uso de las flags para activar las salidas de motor
;   Entrada: TEMP   
;
;   ************************
;   Tabla_accion: Tabla para hacer uso de cada combinacion de TEMP, 4 en total
;   Entrada: W
;   Salida: W
;  **************************************************************************
 

;-------Accion_Motor ponemos en marcha los motores en funcion de los valores de luz-----------------


Accion_Motor

    MOVF    TEMP,W          ; Llamo a la tabla
    CALL    Tabla_accion
    BTFSS   TEMP,0   
    GOTO    COMPIZQ
    BTFSS   TEMP,1
    GOTO    DERECHA
    GOTO    RECTO
   

Tabla_accion
    ANDLW   0x3             ; Me aseguro que no pase del maximo que es 3
    ADDWF   PCL,F
    RETLW   0x00            ; TEMP = 0x03 -> VALUZD y VALUZI mayores a 240 , 0x03 Ambos motores Off
    RETLW   0x01            ; TEMP = 0x01 -> VALUZD > 240 y VALUZI < 240   , 0x01 Motor izquierda NO
    RETLW   0x02            ; TEMP = 0x02 -> VALUZD < 240 y VALUZI > 240   , 0x02 Motor derecha ON
    RETLW   0x03            ; TEMP = 0x00 -> VALUZD y VALUZI menores a 240 , 0x00 Ambos motores On
 

COMPIZQ
   
    BTFSS   TEMP,1
    GOTO    PARAR
    GOTO    IZQUIERDA

RECTO
    CALL    MENSAJE4
    BSF     PORTC,0
    BCF     PORTC,1
    BSF     PORTC,2
    BCF     PORTC,3
   
    CALL    RETA

    GOTO    PRINCIPAL

DERECHA
    CALL    MENSAJE2   
    BSF     PORTC,0
    BCF     PORTC,1
    BCF     PORTC,2
    BSF     PORTC,3
       
    CALL    RETA

    GOTO    PRINCIPAL

IZQUIERDA
    CALL    MENSAJE3
    BCF     PORTC,0
    BSF     PORTC,1
    BSF     PORTC,2
    BCF     PORTC,3
   
    CALL    RETA

    GOTO    PRINCIPAL

PARAR
    CALL    MENSAJE1    
    BCF     PORTC,0
    BCF     PORTC,1
    BCF     PORTC,2
    BCF     PORTC,3
    CALL    RETA

    GOTO    PRINCIPAL

MENSAJE0
   
   CALL ENTRADA
   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'10000001'   ; 1DA LINEA PS 1
   MOVWF   PORTB
   CALL   EJECUTA
   MOVLW   'B'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'I'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'N'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'V'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'N'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'I'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'D'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   
   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'11000000'   ; 2DA LINEA
   MOVWF   PORTB
   CALL   EJECUTA
   

   MOVLW   'P'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'Y'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'C'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'W'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   '-'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
RETURN

MENSAJE01
   
   CALL ENTRADA
   MOVLW   'P'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'F'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'V'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'P'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'U'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'S'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   
   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'11000001'   ; 2DA LINEA
   MOVWF   PORTB
   CALL   EJECUTA
   
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'B'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'N'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'S'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   
   CALL   RETA2
   
RETURN
MENSAJE1
   
   CALL ENTRADA
   MOVLW   'M'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'S'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'P'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'D'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'S'
   MOVWF   PORTB
   CALL   ENVIA
   


   CALL   NEXT
   
   MOVLW   'I'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'U'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'M'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'I'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'N'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'W'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   '-'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   
RETURN


MENSAJE2   
   
   CALL ENTRADA
   MOVLW   'W'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   '-'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'G'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'I'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'N'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'D'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   


   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'11000010'   ; 2DA LINEA
   MOVWF   PORTB
   CALL   EJECUTA
   
   MOVLW   b'01111110'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'D'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'C'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'H'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   b'01111110'
   MOVWF   PORTB
   CALL   ENVIA

   
RETURN

MENSAJE3
   CALL ENTRADA
   MOVLW   'W'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   '-'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'G'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'I'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'N'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'D'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA


   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'11000001'   ; 2DA LINEA
   MOVWF   PORTB
   CALL   EJECUTA
   
   MOVLW   b'01111111'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'I'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'Z'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'Q'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'U'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'I'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'D'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   b'01111111'
   MOVWF   PORTB
   CALL   ENVIA

   
RETURN


MENSAJE4
   
   CALL ENTRADA
   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'10000010'   ; 1DA LINEA PS 2
   MOVLW   'W'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   '-'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'Y'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'N'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'D'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   
   


   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'11000010'   ; 2DA LINEA
   MOVWF   PORTB
   CALL   EJECUTA
   
   MOVLW   b'00111100'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   b'00111100'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   b'00111100'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'C'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   b'00111110'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   b'00111110'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   b'00111110'
   MOVWF   PORTB
   CALL   ENVIA
   

   
RETURN






MENSAJE5
   
   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'00000001'    ; LIMPIO LCD
   MOVWF   PORTB
   CALL   EJECUTA
   MOVLW   b'10000010'    ; 1RA LINEA POSICION 3 (1º BIT INDICA LINEA SEGUNDO BIT SEGUNDA LINEA LOS BIT D ELA DERECHA INDICAN LA POSICION)
   MOVWF   PORTB
   CALL   EJECUTA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'B'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'S'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'C'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'U'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   
   
   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'11000010'   ; 2DA LINEA
   MOVWF   PORTB
   CALL   EJECUTA
   


   
   MOVLW   'D'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'C'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'H'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'S'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'P'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   b'00100001'
   MOVWF   PORTB
   CALL   ENVIA
   
RETURN

MENSAJE6
   
   
   CALL   ENTRADA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'B'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'S'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'C'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'U'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   
   
   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'11000000'   ; 2DA LINEA
   MOVWF   PORTB
   CALL   EJECUTA
   


   
   MOVLW   'I'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'Z'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'Q'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'U'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'I'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'D'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'S'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'P'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   b'00100001'
   MOVWF   PORTB
   CALL   ENVIA
   
RETURN


MENSAJE7
   
   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'00000001'    ; LIMPIO LCD
   MOVWF   PORTB
   CALL   EJECUTA
   MOVLW   b'10000000'    ; 1RA LINEA POSICION 3 (1º BIT INDICA LINEA SEGUNDO BIT SEGUNDA LINEA LOS BIT D ELA DERECHA INDICAN LA POSICION)
   MOVWF   PORTB
   CALL   EJECUTA
   MOVLW   'H'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'Y'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'U'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'N'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'B'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'S'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'C'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'U'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   
   
   
   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'11000010'   ; 2DA LINEA
   MOVWF   PORTB
   CALL   EJECUTA
   


   
   MOVLW   'D'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'N'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'S'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'P'
   MOVWF   PORTB
   CALL   ENVIA
   
   MOVLW   b'00100001'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   b'00100001'
   MOVWF   PORTB
   CALL   ENVIA

   

RETURN



;********* COMANDO LCD  EJECUTA  **************

EJECUTA   
   BSF   PORTC,7      ; ENABLE = 1
   CALL   TIMEDIS      ; TEMPORIZADOR DEL DISPLAY   
   BCF   PORTC,7      ; RS = 0
   CALL   TIMEDIS
   
RETURN



;*********  COMANDO LCD ENVIA  **************
ENVIA

   BSF   PORTC,6      ; RS=1
   CALL   EJECUTA      ; DAMOS DE ALTA EL COMANDO
RETURN



;********* COMANDO NEXT LCD  **************

NEXT
   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'11000000'   ; 2DA LINEA
   MOVWF   PORTB
   CALL   EJECUTA
RETURN


;*********PRIMERA LINEA LCD  ENTRADA  **************


ENTRADA
   BCF   PORTC,6  ;RS=0 MODO INST
   MOVLW   b'00000001'   ; LIMPIO LCD
   MOVWF   PORTB
   CALL   EJECUTA
   MOVLW   b'10000000'    ; 1RA LINEA POSICION 3 (1º BIT INDICA LINEA SEGUNDO BIT SEGUNDA LINEA LOS BIT D ELA DERECHA INDICAN LA POSICION)
   MOVWF   PORTB
   CALL   EJECUTA
RETURN






;*_*_*_*__*_*_*_*_ RETARDOS_*_*_*_*_*_*_*_*__*


;-----------------TEMPORIZADOR DE 2308.6 uS----------

TIMEDIS   
   MOVLW   b'00000001'   ; TEMPORIZADOR DE 2308.6 uS
   MOVWF   CONTA01
UNOO 
   MOVLW   b'00010000'
   MOVWF   CONTA02
DOSS    
   MOVLW   b'11111111'
   MOVWF   CONTA03
TRESS    
   DECFSZ   CONTA03,1   ;DECREMENTO CONTA03 SI ES 0 VUELVE
   GOTO   TRESS
   DECFSZ   CONTA02,1   ;DECREMENTO CONTA02 SI ES 0 VUELVE A CARGAR CONTA03
   GOTO   DOSS
   DECFSZ   CONTA01,1   ; DECREMNTO CONTA01 SI ES 0 VUELVE A CARGAR CONTA02 Y 03
   GOTO    UNOO
 RETURN


; -----------------Temporizador de 0.118 SEGUNDOS-----------

RETA

   MOVLW   b'00000011'   ; Temporizador de medio segundo aprox.
   MOVWF   CONTA1
UNO     MOVLW   b'11111111'
   MOVWF   CONTA2
DOS    MOVLW   b'11111111'
   MOVWF   CONTA3
TRES    DECFSZ   CONTA3,1   ;DECREMENTO CONTA03 SI ES 0 VUELVE
   GOTO   TRES
   DECFSZ    CONTA2,1   ;DECREMENTO CONTA02 SI ES 0 VUELVE A CARGAR CONTA03
   GOTO   DOS
   DECFSZ    CONTA1,1   ; DECREMNTO CONTA01 SI ES 0 VUELVE A CARGAR CONTA02
   GOTO   UNO      ;Y 03.

RETURN
; -----------------Temporizador de 0.517 SEGUNDOS-----------

RETA1

   MOVLW   b'00001101'   
   MOVWF   CONTAA1
UNO2     MOVLW   b'11111111'
   MOVWF   CONTAA2
DOS2     MOVLW   b'11111111'
   MOVWF   CONTAA3
TRES2    DECFSZ   CONTAA3,1   ;DECREMENTO CONTA03 SI ES 0 VUELVE
   GOTO   TRES2
   DECFSZ    CONTAA2,1   ;DECREMENTO CONTA02 SI ES 0 VUELVE A CARGAR CONTA03
   GOTO   DOS2
   DECFSZ    CONTAA1,1   ; DECREMNTO CONTA01 SI ES 0 VUELVE A CARGAR CONTA02
   GOTO   UNO2      ;Y 03.

RETURN

;----RETARDO DE 2.759 SEGUNDOS APROX


RETA2    

   MOVLW   b'01000110'   ; 70 VECES SE REPITE ESTE BUCLE
   MOVWF   CONTA11
UNO1     MOVLW   b'11111111'   ;255X70 VECES SE REPITE ESTE BUCLE
   MOVWF   CONTA22
DOS1     MOVLW   b'11111111'   ;255X255X70 VECES SE REPITE ESTE BUCLE
   MOVWF   CONTA33
TRES1    DECFSZ CONTA33,1   ;DECREMENTO CONTA33 SI ES 0 VUELVE
   GOTO   TRES1
   DECFSZ CONTA22,1   ;DECREMENTO CONTA22 SI ES 0 VUELVE A CARGAR CONTA33
   GOTO   DOS1
   DECFSZ CONTA11,1   ; DECREMNTO CONTA11 SI ES 0 VUELVE A CARGAR CONTA22 Y 33.
    GOTO    UNO1
 
RETURN
 
   END

Desconectado Pinolillo16

  • PIC18
  • ****
  • Mensajes: 324
Re:PROBLEMA LCD 16X2
« Respuesta #1 en: 23 de Enero de 2016, 21:04:55 »
Que tak Javi te recomiendo que tus códigos los anexes como asm para poder leerlos mejor. Si funciona en proteus y físico no el problema es físico ya que la única diferencia entre estos es que cuando trabajas en LCD con proteus debes agregar delays más grandes. Para probar una solución te recomiendo que verifiques el voltaje después del funcionamiento ya que si tienes una pérdida de tensión al alimentar algún actuador o relevado la LCD pierde voltaje mínimo de funcionamiento por lo que tiene a reiniciarse y al no tener la runtina de inicialización observas cuadros. Las conexiones también asegurate de que no hagan falso, y si pudieras compartir como alimentas el circuito?

Desconectado javig.16

  • PIC10
  • *
  • Mensajes: 11
Re:PROBLEMA LCD 16X2
« Respuesta #2 en: 24 de Enero de 2016, 16:00:01 »
Buenas Pinolillo, en primer lugar gracias por responder. El archivo ASM es el mismo que el que puse porque estoy programando desde un archivo de texto simple y luego lo guardo en formato .asm desde ahi. El circuito esta alimentado con un transformador de ac/dc regulable en este caso con 5 v. Pero posteriormente lo alimentaré con una bateria de 12 v y 2A mas o menos todavia no la he comprado. He comprobado con las patillas de un led que las conexiones estan bien tanto en los cables como en las soldaduras de la LCD y llega seál a las patillas E y Rs cada x tiempo encendiendose el LED. Lo extraño es eso que me funcionó en un primer momento bien y despues de apagar la fuente unas veces aparecieron los cuadros. H pensado que quizas este estrpeada y comprar otra pero si llegan los cuadrod y el contraste funciona con el potenciometro en teoria esta bien no?

Un saludo.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:PROBLEMA LCD 16X2
« Respuesta #3 en: 25 de Enero de 2016, 19:30:54 »
Proba poner un retardo antes de la rutina de inicio del LCD..

Desconectado javig.16

  • PIC10
  • *
  • Mensajes: 11
Re:PROBLEMA LCD 16X2
« Respuesta #4 en: 26 de Enero de 2016, 15:33:31 »
ya probé a poner un retardo antes de la configuracion del LCD  de 1 segundo y tampoco. Ahora solo aparecen cuadrod en la primera fila.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:PROBLEMA LCD 16X2
« Respuesta #5 en: 26 de Enero de 2016, 22:53:26 »
Asi como te dijo Pinolillo, lo que tenes parece ser algo relacionado con los tiempos. Es decir no se respeta el tiempo de las señales E especialmente,

Lo raro es que te funcione a veces, pero luego no. El programar de nuevo el micro no tiene sentido, lo unico que se me ocurre es que el LCD no funcione correctamente.

Podrias indicar el XTAL que posee el PIC y el driver del LCD ?

Desconectado javig.16

  • PIC10
  • *
  • Mensajes: 11
Re:PROBLEMA LCD 16X2
« Respuesta #6 en: 27 de Enero de 2016, 10:00:41 »
Los tiempos son los que mostré en el primer mensaje de todas formas he probado con tiempos mas grandes y tampoco. Solo me funcionó en ujn primer momento ahora ya desde hace 1 semana nada solo se encienden los cuadros. H vuelto a desmontar el circuito incluso a comprar jumper nuevos y unicamente montando la lcd nada mas y sigue igual. El cristal utilizado es un cristal de cuarzo de 20 MHz. Los puertos que uso del pic son portB y portc 6,7 para e y rs. La lcd es " 1602a v2.0". He comprobado una a una todas la conexiones de la LCD con un multimetro y llega la señal a cada una y no hay puentes, está bien soldada.

Un saludo, y gracias por contestar.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:PROBLEMA LCD 16X2
« Respuesta #7 en: 27 de Enero de 2016, 11:23:10 »
Bueno podemos probar un par de cosas... por que mirando el datasheet del LCD veo que tu inicializacion es mala.

El datasheet del modulo es:
https://www.openhacks.com/uploadsproductos/eone-1602a1.pdf

Este te indica que el driver es:
http://www.newhavendisplay.com/app_notes/ST7066U.pdf

Y ahi dentro, en la pagina 23 encontras el codigo de inicio. Y los delays a respetar para iniciarlo, el cual vos no tenes para nada igual.

Para 5x8, 2 lineas y 8 bits interfaz, deberias enviar:

Código: [Seleccionar]
Function Set ( 0x38 para el caso que nombre)
----- Delay 40us -----
Function Set ( 0x38 de nuevo)
----- Delay 40us -----
Display ON/OFF ( encendemos el display y habiitamos cursores o blink, 0xF )
----- Delay 40us -----
Display Clear ( 0x01 , borramos el display )
----- Delay de 1.52ms o mas -----
Entry Mode Set (0x06)

Y recien ahi estaria listo para funcionar. Proba hacer la correcta inicializacion del LCD y luego vemos..



Tambien una cosa mas que no te va a afectar, pero va a hacer que sea mucho mas rapido:

Código: ASM
  1. EJECUTA  
  2.    BSF   PORTC,7      ; ENABLE = 1
  3.    CALL   TIMEDIS      ; TEMPORIZADOR DEL DISPLAY  
  4.    BCF   PORTC,7      ; RS = 0
  5.    CALL   TIMEDIS
  6.    RETURN

Tenes puesto un retardo que supuestamente es de  2308.6us, lo cual es bastante absurdo de grande, es 3850 veces mas de lo necesario. El tiempo MINIMO que debe durar es de 460ns el pulso en alto y 1200ns el ciclo total (Paginas 30 a 33 del datasheet, busca escritura y veras el diagrama de tiempo y abajo las tablas con los valores). A 20 Mhz cada instruccion se ejecutaria en 200ns, Asi que podrias reemplazarlo por 3 NOPs y tener 600ns cumpliendo ambos tiempos.

Código: ASM
  1. EJECUTA  
  2.    BSF   PORTC,7      ; ENABLE = 1
  3.    NOP                       ; 600ns  = 3 NOP
  4.    NOP
  5.    NOP
  6.    BCF   PORTC,7      ; RS = 0
  7.    NOP                       ; 600ns = 1 NOP + RETURN
  8.    RETURN



Finalmente, si deseas hacer demoras usa calculadoras online, es mas simple

http://www.piclist.com/techref/piclist/codegen/delay.htm

Ejemplo para 2ms y cumplir el tiempo de 1.52ms del inicio, usas:

Delay time: 0.002 ( si seleccionas segundos) o  10000 ( si seleccionas en ciclos)
Temporary Register: Aca le pones el nombre de los registros que van a usar.. Normalmente se los dejo fijo asi todos los delays usan los mismos registros
Clock Frecuency: 20Mhz
Y tildar "Generate Routine" y ponerle nombre, ejemplo "Delay_2ms"

Le das a "Generate Code" y te devuelve:

Código: ASM
  1. ; Delay = 0.002 seconds
  2. ; Clock frequency = 20 MHz
  3.  
  4. ; Actual delay = 0.002 seconds = 10000 cycles
  5. ; Error = 0 %
  6.  
  7.         cblock
  8.         d1
  9.         d2
  10.         endc
  11.  
  12. Delay_2ms
  13.                         ;9993 cycles
  14.         movlw   0xCE
  15.         movwf   d1
  16.         movlw   0x08
  17.         movwf   d2
  18. Delay_2ms_0
  19.         decfsz  d1, f
  20.         goto    $+2
  21.         decfsz  d2, f
  22.         goto    Delay_2ms_0
  23.  
  24.                         ;3 cycles
  25.         goto    $+1
  26.         nop
  27.  
  28.                         ;4 cycles (including call)
  29.         return

El cblock en realidad lo definis arriba, me refiero a los registros, luego solo te queda el codigo de la rutina calculada completamente para eso, y solo resta hacer un CALL Delay_2ms
« Última modificación: 27 de Enero de 2016, 11:33:53 por KILLERJC »

Desconectado w3-sistemas

  • PIC12
  • **
  • Mensajes: 89
Re:PROBLEMA LCD 16X2
« Respuesta #8 en: 28 de Enero de 2016, 19:38:43 »
hola, te cuento que a mi me paso algo similar, estoy con un curso y tenemos una placa para realizar los prototipos, el programa funcionaba perfecto, hice la placa que definitiva y me pasaba eso de los cuadrados, la falla era que el impreso estava cortado y el lcd ni inicializaba.
lo otro que tenes que tener en cuenta es bien la alimentacion ya que por lo que lei al encender y apagar la fuente un par de veces te iso eso, ojo que hay micros que se alimentan con 3,3v y no 5 y el 1602a es de 5 volt y con los de 3,3 aveces no funcionan

saludos y espero haberte ayudado

Desconectado luismh

  • PIC16
  • ***
  • Mensajes: 149
Re:PROBLEMA LCD 16X2
« Respuesta #9 en: 29 de Enero de 2016, 10:49:57 »
Pienso que si en un principio funcionaba bien y luego al pasarlo a placa ya no, el problema debe ser de hardware:
Yo revisaría pistas cortadas, pistas en corto, soldaduras feas, soldaduras en corto, conectores mal armados, cables cruzados, etc, etc.

Buena suerte!

Desconectado javig.16

  • PIC10
  • *
  • Mensajes: 11
Re:PROBLEMA LCD 16X2
« Respuesta #10 en: 04 de Febrero de 2016, 17:16:21 »
En primer lugar perdón por la tardanza en contestar. El problema fue que la LCD no estaba bien, estaba estropeada , le metería mas tensión de la debida o no se. Muchas gracias  a todos por vuestra ayuda en especial a KILLERJC que me ayudo tambien con la otra parte del programa. Os dejo el programa completo para futuras personas que le pueda servir. El programa es de un robot seguidor de luz con onstaculos. Un saludo.



;*****************************************
;//////////SISTEMAS DIGITALES/////////////

;********************************************
;**                                        **
;**   --------PROYECTO WALL-E-----------   **
;**                                        **
;********************************************



;******DECLARACIÓN DE VARIABLES ******


   LIST P=16F876A
   INCLUDE "p16F876A.INC"
 
   CBLOCK 0x20      ;DEFINIMOS LAS VARIABLES
   CONTA1 ;0x20
   CONTA2
   CONTA3
   CONTA01 ;0x23
   CONTA02
   CONTA03
   CONTA11 ;0x26
   CONTA22
   CONTA33
   CONTAA1
   CONTAA2 ;0X30
   CONTAA3
   VALOR1
   VALOR2 ;0x33
   VALUZI
   VALUZD ;0x36
   TEMP1
   TEMP
   TEMP2
 

   ENDC

 
   ORG 0x00
   GOTO CONFIGURACION
   ORG 0x04
   RETURN
 

CONFIGURACION
 
;-------  Configuramos EL ADCON 1 Y puertos como E/S --------
 
   bsf    STATUS,5
   MOVLW    b'00000100'     ; CONFIGURACION ADCON1
      MOVWF    ADCON1
     MOVLW    b'00111111'
      MOVWF    TRISA
      CLRF     TRISC
      CLRF     TRISB
 
;-------  LIMPIAMOS PUERTOS -------
 
   BANKSEL  PORTA
   CLRF     VALUZI
   CLRF     VALUZD
   CLRF     PORTA
   CLRF     PORTC
   CLRF     PORTB
   CLRF     INTCON

;_*_*_*_*_*_* Inicio de la LCD _*_*_*_*_*_*_*_*_*_*_*_

INICIO_LCD

   CALL    RETA1   
   CALL    RETA1
   BCF   STATUS,5   ; BANCO 0
   BCF   PORTC,6      ; RS = 0
   MOVLW   b'00000001'   ; LIMPIO LCD
   MOVWF   PORTB
   CALL   EJECUTA   
   MOVLW   b'00000110'   ; HABILITAMOS EL COMANDO
   MOVWF   PORTB      ; MODO DE ENTRADA DE IZQUIERDA A DERECHA, INCREMENTO.
   CALL   EJECUTA   
   MOVLW   b'00001111'
   MOVWF   PORTB      ; VISUALIZADOR Y CURSOR ENCENDIDOS.
   CALL   EJECUTA   
   MOVLW   b'00111111'
   MOVWF   PORTB      ; MODO DE FUNCIONAMIENTO 8 BITS 2 LINEAS 5X10
    CALL    EJECUTA   
   




 
;_*_*_*_*_*_*_*_*_ Configuracion del ADC _*_*_*_*_*_*_*_*_*
 



 
   BANKSEL  ADCON0             ; Banco 0
   MOVLW    b'11000001'        ; Se activa el conversor en RA0
   MOVWF    ADCON0         ; Se activa el conversor
   BSF       PORTC,4      ;Activamos In A e In B para controlar los motores mas adelante      
   BSF       PORTC,5
   BSF       PORTA,2      ;ENCENDEMOS LOS 4 LEDS DEL TANKE QUE INDICAN QUE ESTA ENCENDIDO (VERDES)





;_*_*_*_*_*_*_*_*_*_*PROGRAMA PRINCIPAL*_*_*_*_*_*_*_*_*_*_*

   
   CALL   MENSAJE0   ; MENSAJE DE BIENVENIDA
   CALL   RETA2

PRINCIPAL
   
   CALL    START
   CALL    OBSTACULOS
   CALL     Conversion
      CALL     Check_Value
      GOTO     Accion_Motor
      GOTO     PRINCIPAL
 
;  **************************************************************************
;   Conversion : Realiza la conversion ADC (CH0 y CH1 ) y guarda los valores en 2 registros
;   Entrada: ----
;   Salida: VALUZD , VALUZI
;   Registros usados: ADCON0,ADRESH,PORTB
;  **************************************************************************
 
;----REVISAMOS SI EL BOTON ESTA ENCENDIDO (START) ------


START   BSF   PORTA,2   
   BTFSC   PORTA,4       ;¿Se ha pulsado el boton start?
   RETURN   
   CALL   MENSAJE01
   CALL   RETA      ; Si, seguimos con el programa
   GOTO   START      ;No, volvemos a pedir que se pulse el boton

;----COMPROBAMOS QUE NO HAY OBSTACULOS DELANTE A LA IZQUIERDA O A LA DERECHA DEL TANQUE---

OBSTACULOS
   CALL   RETA
   BTFSS   PORTA,5      ;¿Hay algun obstaculo deRECHA?
   GOTO   OBSTACULOIZQ
   BTFSS   PORTA,2      ;¿Hay algun obstaculo IZQUIERDA?
   GOTO   OBSTACULODER
   GOTO    OBSTACULOCEN
   
OBSTACULOCEN

   CALL   RETA      ; OBSTACULO DENLANTE y se paran los motores.
   CALL   MENSAJE7   
   BCF   PORTC,0
   BCF   PORTC,1
   BCF   PORTC,2
   BCF   PORTC,3
   GOTO   OBSTACULOS

OBSTACULODER   
   CALL   RETA      ; OBSTACULO DERECHA y se paran los motores.
   CALL   MENSAJE5   
   BCF   PORTC,0
   BCF   PORTC,1
   BCF   PORTC,2
   BCF   PORTC,3
   GOTO   OBSTACULOS

OBSTACULOIZQ
   
   BTFSS   PORTA,2   
   RETURN      
   CALL   RETA      ; se manda un mensaje y se paran los motores.
   CALL   MENSAJE6   ;HAY UN OBSTACULO A LA IZQUIERDA
   BCF   PORTC,0
   BCF   PORTC,1
   BCF   PORTC,2
   BCF   PORTC,3
   GOTO   OBSTACULOS






;--------Conversion-----

Conversion

   

   ; Canal 0

   BCF      ADCON0,CHS0
   CALL     RETA
   BSF      ADCON0,GO
   BTFSC    ADCON0,GO
   GOTO     $-1          ; SALTAMOS UNA INSTRRUCCION ATRAS
   MOVF     ADRESH,W        ; guardo el valor de la luz del ldr derecho
   MOVWF    VALUZD
 
   ; Canal 1
   BSF      ADCON0,CHS0
   CALL     RETA
   BSF      ADCON0,GO
   BTFSC    ADCON0,GO
   GOTO     $-1          ; saltamos una instrucción atras
   MOVF     ADRESH,W        ; guardo el valor de la luz del ldr izquierdo
   MOVWF    VALUZI           
   MOVWF    PORTB            ; 4 v equivale en dcimnal a 204 que en binario seria 11001100, los leds que deberian de encenderse cuando pongamos este valor en la ldr
   RETURN
 
;  **************************************************************************
;   Check_Value: Checkea el valor de los 2 registros y activa las flags del registro TEMP segun valores
;   Entrada: VALUZD, VALUZI
;   Salida: TEMP
;   Registros usados: -----
;  **************************************************************************
 

; ---------Check_Value revisamos la intensidad de la luz y la comparamos-------------


Check_Value
 
   CLRF     TEMP            ; Pongo a 0 las flags
   MOVLW    b'11001100'            ; comoparo el valor del ldr derecho si es menor de 204 (4v), si es menor activo motor izquierdo
   SUBWF    VALUZD,W        ; si no es menor vemos el valor del ldr izquierdo, para ver si estraa parado o solo va hacia la derecha
   BTFSS    STATUS,C
   BSF      TEMP,0          ; indicador que derecha es menor que 0xCC
   MOVLW    b'11001100'
   SUBWF    VALUZI,W
   BTFSS    STATUS,C
   BSF      TEMP,1          ; indicador que izquierda es menor que 0xCC
   RETURN
 
;  **************************************************************************
;   Accion_Motor: Hace uso de las flags para activar las salidas de motor
;   Entrada: TEMP   
;
;   ************************
;   Tabla_accion: Tabla para hacer uso de cada combinacion de TEMP, 4 en total
;   Entrada: W
;   Salida: W
;  **************************************************************************
 

;-------Accion_Motor ponemos en marcha los motores en funcion de los valores de luz-----------------


Accion_Motor

    MOVF    TEMP,W          ; Llamo a la tabla
    CALL    Tabla_accion
    BTFSS   TEMP,0   
    GOTO    COMPIZQ
    BTFSS   TEMP,1
    GOTO    DERECHA
    GOTO    RECTO
   

Tabla_accion
    ANDLW   0x3             ; Me aseguro que no pase del maximo que es 3
    ADDWF   PCL,F
    RETLW   0x00            ; TEMP = 0x03 -> VALUZD y VALUZI mayores a 240 , 0x03 Ambos motores Off
    RETLW   0x01            ; TEMP = 0x01 -> VALUZD > 240 y VALUZI < 240   , 0x01 Motor izquierda NO
    RETLW   0x02            ; TEMP = 0x02 -> VALUZD < 240 y VALUZI > 240   , 0x02 Motor derecha ON
    RETLW   0x03            ; TEMP = 0x00 -> VALUZD y VALUZI menores a 240 , 0x00 Ambos motores On
 

COMPIZQ
   
    BTFSS   TEMP,1
    GOTO    PARAR
    GOTO    IZQUIERDA

RECTO
    CALL    MENSAJE4
    BSF     PORTC,0
    BCF     PORTC,1
    BSF     PORTC,2
    BCF     PORTC,3
   
    CALL    RETA

    GOTO    PRINCIPAL

DERECHA
    CALL    MENSAJE2   
    BSF     PORTC,0
    BCF     PORTC,1
    BCF     PORTC,2
    BSF     PORTC,3
       
    CALL    RETA

    GOTO    PRINCIPAL

IZQUIERDA
    CALL    MENSAJE3
    BCF     PORTC,0
    BSF     PORTC,1
    BSF     PORTC,2
    BCF     PORTC,3
   
    CALL    RETA

    GOTO    PRINCIPAL

PARAR
    CALL    MENSAJE1    
    BCF     PORTC,0
    BCF     PORTC,1
    BCF     PORTC,2
    BCF     PORTC,3
    CALL    RETA

    GOTO    PRINCIPAL

MENSAJE0
   
   CALL ENTRADA
   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'10000001'   ; 1DA LINEA PS 1
   MOVWF   PORTB
   CALL   EJECUTA
   MOVLW   'B'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'I'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'N'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'V'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'N'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'I'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'D'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   
   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'11000000'   ; 2DA LINEA
   MOVWF   PORTB
   CALL   EJECUTA
   

   MOVLW   'P'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'Y'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'C'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'W'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   '-'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
RETURN

MENSAJE01
   
   CALL ENTRADA
   MOVLW   'P'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'F'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'V'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'P'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'U'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'S'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   
   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'11000001'   ; 2DA LINEA
   MOVWF   PORTB
   CALL   EJECUTA
   
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'B'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'N'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'S'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   
   CALL   RETA2
   
RETURN
MENSAJE1
   
   CALL ENTRADA
   MOVLW   'M'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'S'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'P'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'D'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'S'
   MOVWF   PORTB
   CALL   ENVIA
   


   CALL   NEXT
   
   MOVLW   'I'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'U'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'M'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'I'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'N'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'W'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   '-'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   
RETURN


MENSAJE2   
   
   CALL ENTRADA
   MOVLW   'W'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   '-'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'G'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'I'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'N'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'D'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   


   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'11000010'   ; 2DA LINEA
   MOVWF   PORTB
   CALL   EJECUTA
   
   MOVLW   b'01111110'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'D'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'C'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'H'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   b'01111110'
   MOVWF   PORTB
   CALL   ENVIA

   
RETURN

MENSAJE3
   CALL ENTRADA
   MOVLW   'W'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   '-'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'G'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'I'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'N'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'D'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA


   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'11000001'   ; 2DA LINEA
   MOVWF   PORTB
   CALL   EJECUTA
   
   MOVLW   b'01111111'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'I'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'Z'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'Q'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'U'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'I'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'D'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   b'01111111'
   MOVWF   PORTB
   CALL   ENVIA

   
RETURN


MENSAJE4
   
   CALL ENTRADA
   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'10000010'   ; 1DA LINEA PS 2
   MOVLW   'W'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   '-'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'Y'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'N'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'D'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   
   


   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'11000010'   ; 2DA LINEA
   MOVWF   PORTB
   CALL   EJECUTA
   
   MOVLW   b'00111100'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   b'00111100'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   b'00111100'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'C'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   b'00111110'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   b'00111110'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   b'00111110'
   MOVWF   PORTB
   CALL   ENVIA
   

   
RETURN






MENSAJE5
   
   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'00000001'    ; LIMPIO LCD
   MOVWF   PORTB
   CALL   EJECUTA
   MOVLW   b'10000010'    ; 1RA LINEA POSICION 3 (1º BIT INDICA LINEA SEGUNDO BIT SEGUNDA LINEA LOS BIT D ELA DERECHA INDICAN LA POSICION)
   MOVWF   PORTB
   CALL   EJECUTA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'B'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'S'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'C'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'U'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   
   
   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'11000010'   ; 2DA LINEA
   MOVWF   PORTB
   CALL   EJECUTA
   


   
   MOVLW   'D'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'C'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'H'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'S'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'P'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   b'00100001'
   MOVWF   PORTB
   CALL   ENVIA
   
RETURN

MENSAJE6
   
   
   CALL   ENTRADA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'B'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'S'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'C'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'U'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   
   
   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'11000000'   ; 2DA LINEA
   MOVWF   PORTB
   CALL   EJECUTA
   


   
   MOVLW   'I'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'Z'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'Q'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'U'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'I'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'R'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'D'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'S'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'P'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   b'00100001'
   MOVWF   PORTB
   CALL   ENVIA
   
RETURN


MENSAJE7
   
   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'00000001'    ; LIMPIO LCD
   MOVWF   PORTB
   CALL   EJECUTA
   MOVLW   b'10000000'    ; 1RA LINEA POSICION 3 (1º BIT INDICA LINEA SEGUNDO BIT SEGUNDA LINEA LOS BIT D ELA DERECHA INDICAN LA POSICION)
   MOVWF   PORTB
   CALL   EJECUTA
   MOVLW   'H'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'Y'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'U'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'N'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'B'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'S'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'C'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'U'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   
   
   
   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'11000010'   ; 2DA LINEA
   MOVWF   PORTB
   CALL   EJECUTA
   


   
   MOVLW   'D'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'L'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'A'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'N'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'E'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   ' '
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'S'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'T'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'O'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   'P'
   MOVWF   PORTB
   CALL   ENVIA
   
   MOVLW   b'00100001'
   MOVWF   PORTB
   CALL   ENVIA
   MOVLW   b'00100001'
   MOVWF   PORTB
   CALL   ENVIA

   

RETURN



;********* COMANDO LCD  EJECUTA  **************

EJECUTA   
   BSF   PORTC,7      ; ENABLE = 1
   GOTO   TIMEDIS      ; TEMPORIZADOR DEL DISPLAY   
EJECUTA2
   BCF   PORTC,7      ; RS = 0
   BCF   PORTC,7      ; ENABLE = 0
   
   
RETURN



;*********  COMANDO LCD ENVIA  **************
ENVIA

   BSF   PORTC,6      ; RS=1
   GOTO   EJECUTA      ; DAMOS DE ALTA EL COMANDO




;********* COMANDO NEXT LCD  **************

NEXT
   BCF   PORTC,6     ;RS=0 MODO INST
   MOVLW   b'11000000'   ; 2DA LINEA
   MOVWF   PORTB
   CALL   EJECUTA
RETURN


;*********PRIMERA LINEA LCD  ENTRADA  **************


ENTRADA
   BCF   PORTC,6  ;RS=0 MODO INST
   MOVLW   b'00000001'   ; LIMPIO LCD
   MOVWF   PORTB
   CALL   EJECUTA
   MOVLW   b'10000000'    ; 1RA LINEA POSICION 3 (1º BIT INDICA LINEA SEGUNDO BIT SEGUNDA LINEA LOS BIT D ELA DERECHA INDICAN LA POSICION)
   MOVWF   PORTB
   CALL   EJECUTA
RETURN






;*_*_*_*__*_*_*_*_ RETARDOS_*_*_*_*_*_*_*_*__*


; -----------------Temporizador de 2308.6 uS display-----------





   
TIMEDIS
    MOVLW b'00000001'   
   MOVWF CONTA01
UNOO
   MOVLW b'00001111'
   MOVWF CONTA02
DOSS
   MOVLW b'11111111'
   MOVWF CONTA03
TRESS
   DECFSZ CONTA03,1    ;DECREMENTO CONTA03 SI ES 0 VUELVE
   GOTO TRESS
   DECFSZ CONTA02,1    ;DECREMENTO CONTA02 SI ES 0 VUELVE A CARGAR CONTA03
   GOTO DOSS
   DECFSZ CONTA01,1    ; DECREMNTO CONTA01 SI ES 0 VUELVE A CARGAR CONTA02 Y 03.
   GOTO UNOO

GOTO EJECUTA2




; -----------------Temporizador de 0.118 SEGUNDOS-----------


RETA

   MOVLW   b'00000011'   ; Temporizador de medio segundo aprox.
   MOVWF   CONTA1
UNO     MOVLW   b'11111111'
   MOVWF   CONTA2
DOS    MOVLW   b'11111111'
   MOVWF   CONTA3
TRES    DECFSZ   CONTA3,1   ;DECREMENTO CONTA03 SI ES 0 VUELVE
   GOTO   TRES
   DECFSZ    CONTA2,1   ;DECREMENTO CONTA02 SI ES 0 VUELVE A CARGAR CONTA03
   GOTO   DOS
   DECFSZ    CONTA1,1   ; DECREMNTO CONTA01 SI ES 0 VUELVE A CARGAR CONTA02
   GOTO   UNO      ;Y 03.

RETURN
; -----------------Temporizador de 0.517 SEGUNDOS-----------

RETA1

   MOVLW   b'00001101'   
   MOVWF   CONTAA1
UNO2     MOVLW   b'11111111'
   MOVWF   CONTAA2
DOS2     MOVLW   b'11111111'
   MOVWF   CONTAA3
TRES2    DECFSZ   CONTAA3,1   ;DECREMENTO CONTA03 SI ES 0 VUELVE
   GOTO   TRES2
   DECFSZ    CONTAA2,1   ;DECREMENTO CONTA02 SI ES 0 VUELVE A CARGAR CONTA03
   GOTO   DOS2
   DECFSZ    CONTAA1,1   ; DECREMNTO CONTA01 SI ES 0 VUELVE A CARGAR CONTA02
   GOTO   UNO2      ;Y 03.

RETURN

;----RETARDO DE 2.759 SEGUNDOS APROX


RETA2    

   MOVLW   b'01000110'   ; 70 VECES SE REPITE ESTE BUCLE
   MOVWF   CONTA11
UNO1     MOVLW   b'11111111'   ;255X70 VECES SE REPITE ESTE BUCLE
   MOVWF   CONTA22
DOS1     MOVLW   b'11111111'   ;255X255X70 VECES SE REPITE ESTE BUCLE
   MOVWF   CONTA33
TRES1    DECFSZ CONTA33,1   ;DECREMENTO CONTA33 SI ES 0 VUELVE
   GOTO   TRES1
   DECFSZ CONTA22,1   ;DECREMENTO CONTA22 SI ES 0 VUELVE A CARGAR CONTA33
   GOTO   DOS1
   DECFSZ CONTA11,1   ; DECREMNTO CONTA11 SI ES 0 VUELVE A CARGAR CONTA22 Y 33.
    GOTO    UNO1
 
RETURN
 
   END


 

anything