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