Está en la página 1de 40

MICROCONTROLADORES

M.Sc. César Augusto Peña C.

Profesor de planta – Ingeniería mecatrónica


Universidad de Pamplona
PIC 16F877

Max. Vel: 20 Mhz clock input


Pila de 8 niveles
Voltaje de operación: 2.0V a 5.5V
Corriente modo fuente/sumidero: 24mA
Temporizador/contador: Timer0 (8-bit),
Timer1 (16-bit), Timer2: (8-bit)
2 Modulo CCP: captura, comparación, PWM
Comunicación Serial, Paralela, I2C
Conversión Análoga/Digital

PIC MEMORY
FLASH PROGRAM RAM DATA EEPROM DATA
16F877 8000 X 14 368 X 8 256 X 8
16F874 4000 X 14 192 X 8 128 X 8
MEMORIA RAM
LCD

La pantalla de cristal liquido o LCD (Liquid Crystal Display) es un dispositivo


µControlado de visualización gráfico para la presentación de caracteres,
símbolos o incluso dibujos (en algunos modelos).

Dispone de 2 filas de 16 caracteres cada una y cada carácter dispone de una


matriz de 5x7 puntos (pixels), aunque los hay de otro número de filas y
caracteres. Este dispositivo esta gobernado internamente por un
microcontrolador Hitachi 44780 y regula todos los parámetros de
presentación, este modelo es comúnmente el más usado y esta información se
basará en el manejo de este u otro LCD compatible.
CARACTERISTICAS PRINCIPALES:
LCD
• Pantalla de caracteres ASCII, además de los caracteres Kanji y
Griegos.
• Desplazamiento de los caracteres hacia la izquierda o la derecha.
• Proporciona la dirección de la posición absoluta o relativa del
caracter.
• Memoria de 40 caracteres por línea de pantalla.
• Movimiento del cursor y cambio de su aspecto.
•Permite que el usuario pueda programar 8 caracteres.
•Conexión a un procesador usando un interfaz de 4 u 8 bits
CARACTERES LCD
MONTAJE LCD
PIN SÍMBOLO PIN PIC
LCD
1 VSS ---
2 Vdd ---
3 VO ---

4 RS RD5
5 R/W RD6
6 E RD7
7-14 D<0:7> RB <0:7>
DESCRIPCIÓN DE PINES
PIN SÍMBOLO DESCRIPCIÓN
LCD
1 VSS Tierra de alimentación GND

2 Vdd Alimentacion de +5V CC

3 VO Contraste del cristal liquido. ( 0 a +5V )

4 RS Selección del registro de control/registro de datos:


RS=0 Seleccion registro de control
RS=1 Seleccion registro de datos
5 R/W Señal de lectura/escritura:
R/W=0 Escritura (Write)
R/W=1 Lentura (Read)
6 E Habilitacion del modulo:
E=0 Modulo desconectado
E=1 Modulo conectado
7-14 D<0:7> Bus de datos bidireccional.
POSICIÓN DE LOS CARACTERES EN LA
DIRECCIÓN DDRAM

ZONA DE VISUALIZACIÓN ZONA VIRTUAL

1 2 3 4 5 6 7 5 9 10 11 12 13 14 15 16 17 18 19 40

80 81 82 83 84 85 86 87 88 89 8A 8B 8C 8D 8E 8F 90 91 92 A7

C0 C1 C2 C3 C4 C5 C6 C7 C8 C9 CA CB CC CD CE CF D0 D1 D2 E7
INSTRUCCIÓN CLEAR DISPLAY
Tiempo de ejecución: 1.64mS
RS R/W E DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 0 0 0 0 0 0 0 1

Borra el módulo LCD y coloca el cursor en la primera posición (dirección 80h).


Pone el bit I/D a 1 por defecto (autoincremento de la posición del cursor).

Posición Cursor (en este caso invisible)


INSTRUCCION HOME
Tiempo de ejecución: 1.64mS
RS R/W E DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 0 0 0 0 0 0 1 X
Coloca el cursor en la posición de inicio (dirección 80h) y hace que el display
comience a desplazarse desde la posición original. El contenido de la
memoria RAM de datos de visualización (DD RAM) permanece invariable. La
dirección de la memoria RAM de datos para la visualización (DD RAM) es
puesta a 80h

Posición Cursor (en este caso invisible)


INSTRUCCIÓN DISPLAY ON/OFF
CONTROL
Tiempo de ejecución: 40µS
RS R/W E DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 0 0 0 0 1 D C B
Activa o desactiva poniendo en ON/OFF tanto al display (D) como al cursor
(C) y se establece si este último debe o no parpadear (B).

DISPLAY ON ( D = 1 ) DISPLAY OFF ( D = 0 )


INSTRUCCIÓN DISPLAY ON/OFF
CONTROL
Tiempo de ejecución: 40µS
RS R/W E DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 0 0 0 0 1 D=1 C B=0
Activa o desactiva poniendo en ON/OFF tanto al display (D) como al cursor
(C) y se establece si este último debe o no parpadear (B).

CURSOR OFF ( C = 0 ) CURSOR ON ( C = 1 )


INSTRUCCIÓN DISPLAY ON/OFF
CONTROL
Tiempo de ejecución: 40µS
RS R/W E DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 0 0 0 0 1 D=1 C=1 B
Activa o desactiva poniendo en ON/OFF tanto al display (D) como al cursor
(C) y se establece si este último debe o no parpadear (B).

PARPADEO OFF ( B = 0 )
PARPADEO ON ( B = 1 )
INSTRUCCIONES LCD
ENTRY MODE SET Tiempo de ejecución: 40µS
RS R/W E DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 0 0 0 0 0 1 I/D S

Establece la dirección de movimiento del cursor y especifica si la visualización se va


desplazando a la siguiente posición de la pantalla o no. Estas operaciones se ejecutan
durante la lectura o escritura de la DD RAM o CG RAM. Para visualizar normalmente
poner el bit S=0

FUNCTION SET
Tiempo de ejecución: 40µS
RS R/W E DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 0 0 1 DL N F X X
Establece el tamaño de interfase con el bus de datos (DL), número de líneas
del display (N) y tipo de carácter (F)
DESPLAZAR CURSOR O PANTALLA
Tiempo de ejecución: 40µS
RS R/W E DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 0 0 0 1 S/C R/L X X

Mueve el cursor y desplaza el display sin cambiar el contenido de la memoria


de datos de visualización DD RAM (S/C = 1 Desplaza el display y S/C = 0
Mueve el cursor). Ejemplo de introducción de datos después de configurar
S/C = 0.

1 2

3 4
DESPLAZAR CURSOR O PANTALLA
Tiempo de ejecución: 40µS
RS R/W E DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 0 0 0 1 S/C R/L X X

Mueve el cursor y desplaza el display sin cambiar el contenido de la memoria


de datos de visualización DD RAM (S/C = 1 Desplaza el display y S/C = 0
Mueve el cursor). Ejemplo de introducción de datos después de configurar
S/C = 1.

1 2

3 4
DESPLAZAR PANTALLA
Tiempo de ejecución: 40µS
RS R/W E DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 0 0 0 1 S/C R/L X X

Ejemplo: Mover la pantalla 2 veces y colocar el carácter “!” (S/C = 1)

1 3

2 4
INSTRUCCIONES LCD
SET THE DD RAM ADDRESS Tiempo de ejecución: 40µS
RS R/W E DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 1 Dirección de la DD RAM

Los caracteres o datos que se van visualizando, se van almacenando


en una memoria llamada DDRAM para de aquí pasar a la pantalla.

Mediante esta instrucción se establece la dirección de la memoria


DDRAM a partir de la cual se irán almacenando los datos a visualizar.
Ejecutando este comando, todos los datos que se escriban o lean
posteriormente lo harán desde esta memoria DD RAM. Las direcciones
de la 80h a la 8Fh corresponden con los 16 caracteres del primer
renglón y de la C0h a la CFh con los 16 caracteres del segundo
renglón, para este modelo de LCD.
INSTRUCCIONES LCD
READ BUSY FLAG & ADDRESS Tiempo de ejecución: 40µS
RS R/W E DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 1 1 BF Dirección de la CG RAM o DD RAM

Cuando el modulo LCD esta ejecutando cualquiera de estas


instrucciones, tarda un cierto tiempo de ejecución en el que no se
debe mandar ninguna instrucción. Para ello dispone de un flag
llamado BUSY (ocupado) que indica que se está ejecutando una
instrucción previa.

Esta instrucción de lectura informa del estado de dicho flag,


además proporciona el valor del contador de direcciones de la CG
RAM o de la DD RAM según la última que se haya empleado.
INSTRUCCIONES LCD
SET THE CG RAM ADDRESS Tiempo de ejecución: 40µS
RS R/W E DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
0 0 1 0 1 Dirección de la CG RAM

El módulo LCD además de tener definidos todo el conjunto de caracteres


ASCII, permite al usuario definir 4 u 8 caracteres gráficos. La composición de
estos caracteres se va guardando en una memoria llamada CG RAM con
capacidad para 64 bytes. Cada carácter gráfico definido por el usuario se
compone de 16 u 8 bytes que se almacenan en sucesivas posiciones de la
CG RAM.

Mediante esta instrucción se establece la dirección de memoria CG RAM a


partir de la cual se irán almacenando los bytes que definen un carácter
gráfico. Ejecutando este comando todos los datos que se lean o escriban
posteriormente, lo hacen desde esta memoria CG RAM
INSTRUCCIONES LCD
WRITE DATA TO CG OR DD RAM Tiempo de ejecución: 40µS
RS R/W E DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
1 0 1 Código ASCII o byte del carácter gráfico

Mediante este comando se escribe en la memoria DD RAM los datos


que se quieren presentar en pantalla y que serán los diferentes
códigos ASCII de los caracteres a visualizar.

Igualmente se escribe en la memoria CG RAM los diferentes bytes que


permiten confeccionar caracteres gráficos a gusto del usuario.

El escribir en uno u otro tipo de memoria depende de si se ha


empleado previamente la instrucción de direccionamiento DD RAM o la
de direccionamiento CG RAM.
INSTRUCCIONES LCD
READ DATA FROM CG RAM OR DD RAM Tiempo de ejecución: 40µS
RS R/W E DB7 DB6 DB5 DB4 DB3 DB2 DB1 DB0
1 1 1 Código ASCII o byte del carácter gráfico

Mediante este comando se lee de la memoria DD RAM los datos


que haya almacenados y que serán los códigos ASCII de los
caracteres almacenados.

Igualmente se lee de la memoria CG RAM los diferentes bytes con


los que se ha confeccionado un determinado carácter gráfico.

El leer de uno u otro tipo de memoria depende de si se ha


empleado previamente la instrucción de direccionamiento de la DD
RAM o la de direccionamiento CG RAM.
ABREVIATURAS EMPLEADAS
1 - Desplaza la visualización cada vez que se escribe un dato
S
0 - Modo normal
1 - Incremento del cursor
I/D
0 - Decremento del cursor
1 - Desplaza el display
S/C
0 - Mueve el cursor
1 - Desplazamiento a la derecha
R/L
0 - Desplazamiento a la izquierda
1 - Módulo ocupado
BF
0 - Módulo disponible
1 - Bus de datos de 8 bits
DL
0 - Bus de datos de 4 bits
1 - LCD de dos líneas
N
0 - LCD de una línea
1 - Carácter de 5 x 10 puntos
F
0 - Carácter de 5 x 7 puntos
1 - Parpadeo del cursor ON
B
0 - Parpadeo del cursor OFF
1 - Cursor ON
C
0 - Cursor OFF
1 - Display ON
D
0 - Display OFF
X Indeterminado
SUBRUTINAS LCD

SUBRUTINA FUNCIÓN

LCD_E Genera un pulso de 1µS por PORTD,7 patita 6 del


LCD (Enable) . Si se usa una frecuencia diferente
de 4MHz habrá que ajustar este tiempo

LCD_BUSY Chequea si el LCD esta ocupado (BUSY) y


retorna de la rutina cuando ya no lo este.
LCD_REG Pone al LCD en modo de recibir comandos,
espera a que no este ocupado y va a LCD_E.
SUBRUTINAS LCD

SUBRUTINA FUNCIÓN

LCD_DATOS Pone el LCD en modo datos y manda el byte


presente en W que será mostrado en pantalla
(carácter ASCII).
LCD_INI Inicialización del modulo LCD según los tiempo
marcados por el fabricante. Bus de 8 bits, 2 líneas
de visualización y caracteres de 5 x 7 puntos.
UP_LCD Configura los puertos del PIC para ser usados
con el LCD.
PROGRAMA LCD
;AUTOR: CÉSAR AUGUSTO PEÑA C
;PIC: 16F877A
;FUNCION: Visualiza un mesaje por un LCD conectado a RB<0:7> (datos) y RBD<5:7>
; donde RS, R/W y #E (LCD) se conectan respectivamente a RD5, RD6 y RD7

;CARACTERISTICAS:
;OSCILLATOR: XT
;WATCHDOG TIMER: OFF
;POWER UP TIMER: ON
;BROWN OUT DETECT: OFF
;LOW VOLTAGE PROGRAM: DISABLE
;FLASH PROGRAM WRITE: WRITE PROTECTION OFF
;BACKGROUND DEBUG: DISABLED
;DATA EE READ PROTECT: OFF
;CODE PROTECT: OFF

list p=16f877a ;Tipo de procesador


INCLUDE "P16F877A.Inc" ;Librerias de registros del PIC
;**************************** DEFINICION DE REGISTROS ***********************************
CBLOCK .32
DATO_A, DATO_B ;VARIABLES CONTROL LCD
endc
;****************************************************************************************
PROGRAMA LCD

INICIO bcf STATUS,RP1


bsf STATUS,RP0
bcf 1,7 ;Resistencias pull up ACTIVAS
bcf TRISE,PSPMODE ;Desactiva puerto paralelo esclavo
movlw b'00000010'
movwf TRISD ;puerto D como salida y el RD1 para RF
movlw b'00000011' ;Configura puerto C para verificar sensores
movwf TRISC
clrf TRISE ;puerto E como salida
bcf STATUS,RP0 ;Banco 0
bcf STATUS,RP1

call UP_LCD ;Configura el PIC para usar el LCD


call LCD_INI ;Inicia el LCD

call MENSAJE_CESAR_UNIPAMPLONA
CICLO nop
goto CICLO
PROGRAMA LCD
MENSAJE_CESAR_UNIPAMPLONA

;_____________PRIMERA LINEA DEL DISPLAY____________________


movlw 'C' ;1
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'E' ;2
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'S' ;3
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'A' ;4
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'R' ;5
call LCD_DATOS ;Visualiza Valor cargado en W
movlw '' ;6
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'P' ;7
call LCD_DATOS ;Visualiza Valor cargado en W
movlw '.' ;8
call LCD_DATOS ;Visualiza Valor cargado en W
movlw '' ;9
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'C' ;10
call LCD_DATOS ;Visualiza Valor cargado en W
movlw '.' ;11
call LCD_DATOS ;Visualiza Valor cargado en W
PROGRAMA LCD
movlw d'192' ;SEGUNDA LINEA DEL DISPLAY
call LCD_REG
movlw 'U' ;1
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'N' ;2
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'I' ;3
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'P' ;4
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'A' ;5
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'M' ;6
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'P' ;7
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'L' ;8
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'O' ;9
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'N' ;10
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'A' ;11
call LCD_DATOS ;Visualiza Valor cargado en W
RETURN

include "LCD_LIB_CAPC_877_F.lib"

END
LIBRERÍA DE LCD
;------------------------------------------------------------------------
;LIBRERIAS DE RUTINAS CREADAS O MODIFICADAS POR CÉSAR PEÑA
;TEMA: CONTROL LCD
;FUNCION: Controlar LCD conectado a RB<0:7> (datos) y RBD<5:7>
; donde RS, R/W y #E (LCD) se conectan respectivamente a RD5, RD6 y RD7
;------------------------------------------------------------------------

;------------------------------------------------------------------------
;UP_LCD: CONFIGURACION PIC PARA EL LCD.

UP_LCD bsf STATUS,5 ;BANCO 1


bcf TRISE,PSPMODE ;DESACTIVA PUERTO PARALELO ESCLAVO
;AFECTA TAMBIEN EL PUERTO D
bcf PORTD,5 ;RD5 COMO SALIDA
bcf PORTD,6 ;RD6 COMO SALIDA
bcf PORTD,7 ;RD7 COMO SALIDA
clrf TRISB ;PUERTO B COMO SALIDA
bcf STATUS,5 ;BANCO 0
clrf INTCON ;DESACTIVA INTERRUPCIONES
bcf PORTD,5 ;RS = 0 SELECCION DE REGISTRO DE CONTROL
bcf PORTD,7 ;E = 0 LCD INABILITADO
return
LIBRERÍA DE LCD
;LCD_INI: INICIALIZACION LCD.
;
LCD_INI movlw b'00111000' ;ENVIA COMANDO FUNCTION SET
call LCD_REG ;(BUS DE 8 BITS, 2 LINEAL, CARACTER 5X7)
call DELAY_5MS ;5mS.(ESPECIFICACIÓN DE FABRICANTE)
movlw b'00001100' ;LCD ON, CURSOR OFF, PARPADEO CURSOR OFF
call LCD_REG ;ENVIA COMANDO
call DELAY_5MS ;5ms.(Especificación de Fabricante)
movlw b'00000001' ;BORRA PANTALLA
call LCD_REG ;ENVIA COMANDO
call DELAY_5MS ;5ms.(Especificación de Fabricante)
return
;-------------------------------------------------------------------------
;LCD_DATO: ESCRITURA DE DATOS EN DDRAM o CGRAM

LCD_DATOS bcf PORTD,5 ;RS = 0 SELECCION DE REGISTRO DE CONTROL


movwf PORTB ;VALOR ASCII A SACAR POR RB
call LCD_BUSY ;ESPERA A QUE SE LIBERE EL LCD
bsf PORTD,5 ;RS = 1 SELECCION DE REGISTRO DE DATOS
goto LCD_E ;GENERA PULSO EN LA SEÑAL E (HABLILITACIÓN LCD)
;------------------------------------------------------------------------
;LCD_REG: ESCRITURA DE COMANDOS LCD.
;
LCD_REG bcf PORTD,5 ;RS = 0 SELECCION DE REGISTRO DE CONTROL
movwf PORTB ;SACA EL CODIGO DE LA INSTRUCCION
call LCD_BUSY ;ESPERA A QUE SE LIBERE EL LCD
goto LCD_E ;GENERA PULSO EN LA SEÑAL E (HABLILITACIÓN LCD)
LIBRERÍA DE LCD
;-------------------------------------------------------------------------
;LCD_E: PULSO DE HABILITACION
;
LCD_E bsf PORTD,7 ;E = 1 LCD HABILITADO
nop ;ESPERA 1 uS
bcf PORTD,7 ;E = 0 LCD INABILITADO
return
;------------------------------------------------------------------------
;LCD_BUSY: VERIFICACION QUE EL LCD ESTE NO ESTE OCUPADO.
;
LCD_BUSY bsf PORTD,6 ;R/W = 1 MODO LECTURA
bsf STATUS,5 ;BANCO 1
movlw b'11111111'
movwf TRISB ;PUERTO B COMO ENTRADA
bcf STATUS,5 ;BANCO 0
bsf PORTD,7 ;E = 1 LCD HABILITADO
nop
L_BUSY btfsc PORTB,7 ;CHEQUEA BIT DE BUSY
goto L_BUSY
bcf PORTD,7 ;E = 0 LCD INABILITADO
bsf STATUS,5 ;BANCO 1
clrf TRISB ;PUERTO B COMO SALIDA
bcf STATUS,5 ;BANCO 0
bcf PORTD,6 ;R/W = 0 MODO ESCRITURA
return
LIBRERÍA DE LCD
;------------------------------------------------------------------------
;DELAY_5MS: Genera una temporizaci¢n de 5 mS
;
DELAY_5MS movlw 0x1a
movwf DATO_B ;Carga la variable DATO_B
clrf DATO_A ;Carga la variable DATO_A
DELAY_1 decfsz DATO_A,1 ;Decrementa la variable DATO_A
goto DELAY_1
decfsz DATO_B,1 ;Decrementa la variable DATO_B
goto DELAY_1
return
;------------------------------------------------------------------------
PROGRAMA II - LCD
;AUTOR: CÉSAR AUGUSTO PEÑA C
;PIC: 16F877A
;FUNCION: Visualiza un mesaje por un LCD conectado a RB<0:7> (datos) y RBD<5:7>
; donde RS, R/W y #E (LCD) se conectan respectivamente a RD5, RD6 y RD7
; despues de visualizar el mensaje realiza varios comandos de configuración del LCD
; consecutivamente a los pulsos recibidos RA2 (Pulsador)

;CARACTERISTICAS:
;OSCILLATOR: XT
;WATCHDOG TIMER: OFF
;POWER UP TIMER: ON
;BROWN OUT DETECT: OFF
;LOW VOLTAGE PROGRAM: DISABLE
;FLASH PROGRAM WRITE: WRITE PROTECTION OFF
;BACKGROUND DEBUG: DISABLED
;DATA EE READ PROTECT: OFF
;CODE PROTECT: OFF

list p=16f877a ;Tipo de procesador


INCLUDE "P16F877A.Inc" ;Librerias de registros del PIC
;**************************** DEFINICION DE REGISTROS ***********************************
CBLOCK .32
DATO_A, DATO_B ;VARIABLES CONTROL LCD
REG11, REG21, REG31
RAUX2
endc
;****************************************************************************************
PROGRAMA II - LCD
INICIO bcf STATUS,RP1
bsf STATUS,RP0
movlw b'00000110' ;configura puerto A y E como E/S digitales
movwf ADCON1 ;MUEVE A ADCON1
bcf 1,7 ;Resistencias pull up ACTIVAS
bcf TRISE,PSPMODE ;Desactiva puerto paralelo esclavo
movlw b'00000010'
movwf TRISD ;puerto D como salida y el RD1 para RF
movlw b'00000011' ;Configura puerto C para verificar sensores
movwf TRISC
clrf TRISE ;puerto E como salida
bcf STATUS,RP0 ;Banco 0
bcf STATUS,RP1

call UP_LCD ;Configura el PIC para usar el LCD


CICLO call LCD_INI ;Inicia el LCD

call MENSAJE_CESAR_UNIPAMPLONA
call RETRASO

movlw .192 ;posiciona en cursor


call LCD_REG
;DISPLAY OFF
PROGRAMA II - LCD
movlw b'00001000' ;Comando Display ON/OFF: OFF, cursor OFF, Parpadeo OFF
call LCD_REG
call RETRASO ;Espera activar pulsardor

;DISPLAY ON
movlw b'00001100' ;Comando Display ON/OFF: ON, cursor OFF, Parpadeo OFF
call LCD_REG
call RETRASO ;Espera activar pulsardor

;CURSOR ON
movlw b'00001110' ;Comando Display ON/OFF: ON, cursor ON, Parpadeo OFF
call LCD_REG
call RETRASO ;Espera activar pulsardor

;CURSOR ON PARPADEO ON
movlw b'00001111' ;Comando Display ON/OFF: ON, cursor ON, Parpadeo ON
call LCD_REG
call RETRASO ;Espera activar pulsardor

;CURSOR EN LA PRIMERA POSICIÓN


movlw b'00000010' ;Comando Home
call LCD_REG
call RETRASO ;Espera activar pulsardor

;CURSOR EN LA ULTIMA POSICIÓN VISIBLE


movlw .207 ; ;se desplaza a la posición respectiva
call LCD_REG
call RETRASO ;Espera activar pulsardor
PROGRAMA II - LCD
;REALIZA VARIOS DESPLAZAMIENTOS A LA DERECHA
movlw .45
movwf RAUX2
OTRA_AUX2decfsz RAUX2,1
goto PRO_AUX2
goto SALIR_AUX2
PRO_AUX2 movlw b'00011000' ;desplazamiento: Desplaza pantalla (S=1), R/L=0 (IZQ) ,x ,x
call LCD_REG
call RETARDO1
goto OTRA_AUX2
SALIR_AUX2 nop

goto CICLO

MENSAJE_CESAR_UNIPAMPLONA

;_____________PRIMERA LINEA DEL DISPLAY____________________


; movlw .134 ; ;se desplaza a la posición respectiva
; call LCD_REG
movlw 'U'
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'P'
call LCD_DATOS ;Visualiza Valor cargado en W
PROGRAMA II - LCD
movlw .144 ;se desplaza a la posición respectiva
call LCD_REG
movlw 'Z'
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'O'
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'N'
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'A'
call LCD_DATOS ;Visualiza Valor cargado en W
movlw ''
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'V'
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'I'
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'R'
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'T'
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'U'
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'A'
call LCD_DATOS ;Visualiza Valor cargado en W
movlw 'L'
call LCD_DATOS ;Visualiza Valor cargado en W

RETURN
PROGRAMA II - LCD
RETRASO btfss PORTA,2 ;bucle hasta que se active el pulsador
goto RETRASO
call RETARDO1 ;retardo de 20ms (antirebotes)
RETRASO2 btfsc PORTA,2 ;bucle hasta que se active el pulsador
goto RETRASO2
call RETARDO1 ;retardo de 20ms (antirebotes)
return

RETARDO1 movlw .1 ;retardo de 20ms


movwf REG11
TRES1 movlw .93
movwf REG21
DOS1 movlw .70
movwf REG31
UNO1 decfsz REG31,1
goto UNO1
decfsz REG21,1
goto DOS1
decfsz REG11,1
goto TRES1
retlw 0

include "LCD_LIB_CAPC_877_F.lib"

END