pabloillanes
New member
my problem is that I have I cosay but single profit to activate the LCD I have not managed to remove letter in nongrafico way. Aca goes I cosay that I have writing
Code:
;DEFINICIONES DE REGISTROS PARA MODULO LCD
#DEFINE LCD_REG_CONTROL BCF PORTA,0
#DEFINE LCD_REG_DATOS BSF PORTA,0
#DEFINE LCD_ESCRITURA BCF PORTA,1
#DEFINE LCD_LECTURA BSF PORTA,1
#DEFINE LCD_DESACTIVADO BCF PORTA,2
#DEFINE LCD_ACTIVADO BSF PORTA,2
#DEFINE IN_BANK BSF STATUS,RP0
#DEFINE OUT_BANK BCF STATUS,RP0
PROCESSOR 16F84
LIST P=16F84 ; SE INDICA EL MODO DE PROCESADOR
INCLUDE <P16F84.INC> ; SE INCLUYE LA DEFINICION DE LOS
; REGISTROS INTERNOS'
;RPG
DATO_A EQU H'0C'
DATO_B EQU H'0D'
;*************************************************************************
;EL CONJUNTO DE RUTINAS QUE SE PRESENTAN A CONTINUACION PERMITEN REALIZAR
;LAS TAREAS BASICAS DE CONTROL DEL MODULO DE LCD
;*************************************************************************
ORG 0 ;VECTOR DE RESET
GOTO CONFIG_LCD
ORG 5 ;VECTOR DE INTERRUPCION
;*************************************************************************
;LCD_BUSY: LECTURA DEL FLAG BUSY & DIRECCION.
;CHEQUEA SI EL LCD ESTA OCUPADO (BUSY) Y RETORNA DE LA RUTINA
;CUANDO DESOCUPADO.
;*************************************************************************
LCD_BUSY:
LCD_LECTURA ;PONE EL LCD EN MODO LECTURA
IN_BANK ;SELECCIONA EL BANCO 1
MOVLW B'11111111'
MOVWF TRISB ;PUERTA B COMO ENTRADA
OUT_BANK ;SELECCIONA EL BANCO 0
LCD_ACTIVADO ;ACTIVA EL LCD
NOP ;ESPERA 1 uS
L_BUSY:
BTFSC PORTB,7 ;CHEQUEA BIT DE BUSY
GOTO L_BUSY
LCD_DESACTIVADO ;DESACTIVA LCD
IN_BANK ;SELECCIONA BANCO 1
CLRF TRISB ;PUERTA B SALIDA
OUT_BANK ;SELECCIONA EL BANCO 0
LCD_ESCRITURA ;PONE LCD EN MODO WR
RETURN
;*************************************************************************
;LCD_E: PULSO DE ENABLE.
; GENERA UN PULSO DE 1µS POR RA2 (ENABLE) DEL LCD.
; SI SE USA UNA VELOCIDAD DE MICRO DIFERENTE DE 4MHZ HABRÁ QUE
; AJUSTAR ESTE TIEMPO.
;*************************************************************************
LCD_E:
LCD_ACTIVADO ;ACTIVA SEÑAL E
NOP ;ESPERA 1 uS
LCD_DESACTIVADO ;DESACTIVA SEÑAL E
RETURN
;*************************************************************************
;LCD_DATO: ESCRITURA DE DATOS EN DDRAM O CGRAM
; PONE EL LCD EN MODO DATOS Y MANDA EL BYTE PRESENTE EN W QUE
; SERÁ MOSTRADO EN PANTALLA.
;*************************************************************************
LCD_DATOS:
LCD_REG_CONTROL ;DESACTIVA RS (MODO COMANDO)
MOVWF PORTB ;VALOR ASCII A SACAR POR RB
CALL LCD_BUSY ;ESPERA A QUE SE LIBERE EL LCD
LCD_REG_DATOS ;ACTIVA RS (MODO DATO).
GOTO LCD_E ;GENERA PULSO EN LA SEÑAL E
;*************************************************************************
;LCD_REG: ESCRITURA DE COMANDOS EN EL LCD.
; PONE EL LCD EN MODO DE RECIBIR COMANDOS, ESPERA A QUE NO ESTE
; OCUPADO Y VA A LCD_E.
;*************************************************************************
LCD_REG:
LCD_REG_CONTROL ;DESACTIVA RS (MODO COMANDO)
MOVWF PORTB ;SACA EL CODIGO DE LA INSTRUCCION
CALL LCD_BUSY ;ESPERA SE LIBERE EL LCD
GOTO LCD_E ;GENERA PULSO EN LA SEÑAL E
;*************************************************************************
;LCD_INI: INICIALIZACION DEL LCD.
; INICIALIZACIÓN DEL MODULO LCD SEGÚN LOS TIEMPO MARCADOS
; POR EL FABRICANTE. BUS DE 8 BITS, CON X LÍNEAS DE VISUALIZACIÓN
; Y CARACTERES DE 5 X 7 PUNTOS.
;*************************************************************************
LCD_INI:
MOVLW B'00110000'
CALL LCD_REG ;LCD ON Y CURSOR OFF
;MOVLW B'00100111' ;FUNCTION SET
;CALL LCD_REG ;CODIGO DE INSTRUCCION
nop
;MOVLW B'10010111' ;FUNCTION SET
;CALL LCD_REG ;CODIGO DE INSTRUCCION
;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) (5X7) PIXELES
nop
;CALL DELAY_5MS ;TEMPORIZACION 5mS
;(ESPECIFICACION DE FABRICANTE)
;MOVLW B'00100111' ;FUNCTION SET
;CALL LCD_REG
nop
; CALL DELAY_5MS
;MOVLW B'10010111'
;CALL LCD_REG
;CALL DELAY_5MS
RETURN
;*************************************************************************
;DELAY_5MS: GENERA UNA TEMPORIZACION DE 5 mS
;*************************************************************************
DELAY_5MS:
MOVLW D'7' ;7 * 765 uS = 5,35 mS
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
;*************************************************************************
;RUTINA PRINCIPAL
;CONFIGURACION PIC PARA EL LCD.
;*************************************************************************
CONFIG_LCD
IN_BANK
CLRF TRISB
CLRF TRISA
OUT_BANK
CLRF INTCON
LCD_REG_CONTROL
LCD_DESACTIVADO
CALL LCD_INI
;MOVLW B'00110000'
;CALL LCD_REG ;LCD ON Y CURSOR OFF
MOVLW 'P'
CALL LCD_DATOS ;VISUALIZA LETRA P
MOVLW 'P'
CALL LCD_DATOS ;VISUALIZA LETRA P
MOVLW 'R'
CALL LCD_DATOS ;VISUALIZA LETRA R
MOVLW 'O'
CALL LCD_DATOS ;VISUALIZA LETRA O
MOVLW 'Y'
CALL LCD_DATOS ;VISUALIZA LETRA Y
BUCLE
GOTO BUCLE
END
Code:
;DEFINICIONES DE REGISTROS PARA MODULO LCD
#DEFINE LCD_REG_CONTROL BCF PORTA,0
#DEFINE LCD_REG_DATOS BSF PORTA,0
#DEFINE LCD_ESCRITURA BCF PORTA,1
#DEFINE LCD_LECTURA BSF PORTA,1
#DEFINE LCD_DESACTIVADO BCF PORTA,2
#DEFINE LCD_ACTIVADO BSF PORTA,2
#DEFINE IN_BANK BSF STATUS,RP0
#DEFINE OUT_BANK BCF STATUS,RP0
PROCESSOR 16F84
LIST P=16F84 ; SE INDICA EL MODO DE PROCESADOR
INCLUDE <P16F84.INC> ; SE INCLUYE LA DEFINICION DE LOS
; REGISTROS INTERNOS'
;RPG
DATO_A EQU H'0C'
DATO_B EQU H'0D'
;*************************************************************************
;EL CONJUNTO DE RUTINAS QUE SE PRESENTAN A CONTINUACION PERMITEN REALIZAR
;LAS TAREAS BASICAS DE CONTROL DEL MODULO DE LCD
;*************************************************************************
ORG 0 ;VECTOR DE RESET
GOTO CONFIG_LCD
ORG 5 ;VECTOR DE INTERRUPCION
;*************************************************************************
;LCD_BUSY: LECTURA DEL FLAG BUSY & DIRECCION.
;CHEQUEA SI EL LCD ESTA OCUPADO (BUSY) Y RETORNA DE LA RUTINA
;CUANDO DESOCUPADO.
;*************************************************************************
LCD_BUSY:
LCD_LECTURA ;PONE EL LCD EN MODO LECTURA
IN_BANK ;SELECCIONA EL BANCO 1
MOVLW B'11111111'
MOVWF TRISB ;PUERTA B COMO ENTRADA
OUT_BANK ;SELECCIONA EL BANCO 0
LCD_ACTIVADO ;ACTIVA EL LCD
NOP ;ESPERA 1 uS
L_BUSY:
BTFSC PORTB,7 ;CHEQUEA BIT DE BUSY
GOTO L_BUSY
LCD_DESACTIVADO ;DESACTIVA LCD
IN_BANK ;SELECCIONA BANCO 1
CLRF TRISB ;PUERTA B SALIDA
OUT_BANK ;SELECCIONA EL BANCO 0
LCD_ESCRITURA ;PONE LCD EN MODO WR
RETURN
;*************************************************************************
;LCD_E: PULSO DE ENABLE.
; GENERA UN PULSO DE 1µS POR RA2 (ENABLE) DEL LCD.
; SI SE USA UNA VELOCIDAD DE MICRO DIFERENTE DE 4MHZ HABRÁ QUE
; AJUSTAR ESTE TIEMPO.
;*************************************************************************
LCD_E:
LCD_ACTIVADO ;ACTIVA SEÑAL E
NOP ;ESPERA 1 uS
LCD_DESACTIVADO ;DESACTIVA SEÑAL E
RETURN
;*************************************************************************
;LCD_DATO: ESCRITURA DE DATOS EN DDRAM O CGRAM
; PONE EL LCD EN MODO DATOS Y MANDA EL BYTE PRESENTE EN W QUE
; SERÁ MOSTRADO EN PANTALLA.
;*************************************************************************
LCD_DATOS:
LCD_REG_CONTROL ;DESACTIVA RS (MODO COMANDO)
MOVWF PORTB ;VALOR ASCII A SACAR POR RB
CALL LCD_BUSY ;ESPERA A QUE SE LIBERE EL LCD
LCD_REG_DATOS ;ACTIVA RS (MODO DATO).
GOTO LCD_E ;GENERA PULSO EN LA SEÑAL E
;*************************************************************************
;LCD_REG: ESCRITURA DE COMANDOS EN EL LCD.
; PONE EL LCD EN MODO DE RECIBIR COMANDOS, ESPERA A QUE NO ESTE
; OCUPADO Y VA A LCD_E.
;*************************************************************************
LCD_REG:
LCD_REG_CONTROL ;DESACTIVA RS (MODO COMANDO)
MOVWF PORTB ;SACA EL CODIGO DE LA INSTRUCCION
CALL LCD_BUSY ;ESPERA SE LIBERE EL LCD
GOTO LCD_E ;GENERA PULSO EN LA SEÑAL E
;*************************************************************************
;LCD_INI: INICIALIZACION DEL LCD.
; INICIALIZACIÓN DEL MODULO LCD SEGÚN LOS TIEMPO MARCADOS
; POR EL FABRICANTE. BUS DE 8 BITS, CON X LÍNEAS DE VISUALIZACIÓN
; Y CARACTERES DE 5 X 7 PUNTOS.
;*************************************************************************
LCD_INI:
MOVLW B'00110000'
CALL LCD_REG ;LCD ON Y CURSOR OFF
;MOVLW B'00100111' ;FUNCTION SET
;CALL LCD_REG ;CODIGO DE INSTRUCCION
nop
;MOVLW B'10010111' ;FUNCTION SET
;CALL LCD_REG ;CODIGO DE INSTRUCCION
;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) (5X7) PIXELES
nop
;CALL DELAY_5MS ;TEMPORIZACION 5mS
;(ESPECIFICACION DE FABRICANTE)
;MOVLW B'00100111' ;FUNCTION SET
;CALL LCD_REG
nop
; CALL DELAY_5MS
;MOVLW B'10010111'
;CALL LCD_REG
;CALL DELAY_5MS
RETURN
;*************************************************************************
;DELAY_5MS: GENERA UNA TEMPORIZACION DE 5 mS
;*************************************************************************
DELAY_5MS:
MOVLW D'7' ;7 * 765 uS = 5,35 mS
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
;*************************************************************************
;RUTINA PRINCIPAL
;CONFIGURACION PIC PARA EL LCD.
;*************************************************************************
CONFIG_LCD
IN_BANK
CLRF TRISB
CLRF TRISA
OUT_BANK
CLRF INTCON
LCD_REG_CONTROL
LCD_DESACTIVADO
CALL LCD_INI
;MOVLW B'00110000'
;CALL LCD_REG ;LCD ON Y CURSOR OFF
MOVLW 'P'
CALL LCD_DATOS ;VISUALIZA LETRA P
MOVLW 'P'
CALL LCD_DATOS ;VISUALIZA LETRA P
MOVLW 'R'
CALL LCD_DATOS ;VISUALIZA LETRA R
MOVLW 'O'
CALL LCD_DATOS ;VISUALIZA LETRA O
MOVLW 'Y'
CALL LCD_DATOS ;VISUALIZA LETRA Y
BUCLE
GOTO BUCLE
END
Looking for additional LCD resources? Check out our LCD blog for the latest developments in LCD technology.