;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;
; Comando de display LCD por medio de 4 bits a 20 MHz
;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
LIST P=16F877A
INCLUDE <P16F877A.INC>
ERRORLEVEL -302
__CONFIG _CP_OFF&_DEBUG_OFF&_WRT_OFF&_CPD_OFF&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC
;................................................................................................
#DEFINE LCD_RS PORTB,0 ;Configuración de pines a usar con el LCD
#DEFINE LCD_E PORTB,1
#DEFINE LCD_D4 PORTB,2
#DEFINE LCD_D5 PORTB,3
#DEFINE LCD_D6 PORTB,4
#DEFINE LCD_D7 PORTB,5
LCD_TEMP_1 EQU .32
LCD_CONTA_1 EQU .33
LCD_CONTA_2 EQU .34
;................................................................................................
org .0
bcf STATUS,RP0
bcf STATUS,RP1
goto INICIO
org .4
bcf INTCON,GIE
retfie
;................................................................................................
RUTINA_15ms ;RUTINA DE DEMORA DE 15ms
movlw .75
movwf LCD_CONTA_2
goto QWE1
RUTINA_1ms ;RUTINA DE DEMORA DE 1ms
movlw .5
movwf LCD_CONTA_2
QWE1
movlw .249
movwf LCD_CONTA_1
QWE2
nop
decfsz LCD_CONTA_1,F
goto QWE2
decfsz LCD_CONTA_2,F
goto QWE1
return
;................................................................................................
LCD_INICIALIZAR
bcf LCD_E
bcf LCD_RS
call RUTINA_15ms ;demora para que el display se resetee correctamente
movlw B'00110010' ;Setea 4 BITS
call LCD_IN
movlw B'00101000' ;Setea 2 lineas, matris de 5x7
call LCD_IN
movlw B'00000110' ;Activa el display, desactiva el cursor y desactiva el destello del cursor
call LCD_INST
movlw B'00001100'
call LCD_INST
movlw B'00000001' ;BORRA DISPLAY
call LCD_INST
return
;.....................
LCD_IN
movwf LCD_TEMP_1
call SACAR
bsf LCD_E
call RUTINA_1ms
call RUTINA_1ms
call RUTINA_1ms
call RUTINA_1ms
bcf LCD_E
swapf LCD_TEMP_1,F
call SACAR
bsf LCD_E
call RUTINA_1ms
call RUTINA_1ms
call RUTINA_1ms
call RUTINA_1ms
bcf LCD_E
return
;.....................
LCD_INST
movwf LCD_TEMP_1
call SACAR
bsf LCD_E
call RUTINA_1ms
call RUTINA_1ms
bcf LCD_E
swapf LCD_TEMP_1,F
call SACAR
bsf LCD_E
call RUTINA_1ms
call RUTINA_1ms
bcf LCD_E
return
;.....................
LCD_DATO
movwf LCD_TEMP_1
call SACAR
bsf LCD_RS
bsf LCD_E
movlw .133
movwf LCD_CONTA_1
decfsz LCD_CONTA_1,F
goto $-1
bcf LCD_E
bcf LCD_RS
swapf LCD_TEMP_1,F
call SACAR
bsf LCD_RS
bsf LCD_E
movlw .133
movwf LCD_CONTA_1
decfsz LCD_CONTA_1,F
goto $-1
bcf LCD_E
bcf LCD_RS
return
;.....................
SACAR
bcf LCD_D4
btfsc LCD_TEMP_1,4
bsf LCD_D4
bcf LCD_D5
btfsc LCD_TEMP_1,5
bsf LCD_D5
bcf LCD_D6
btfsc LCD_TEMP_1,6
bsf LCD_D6
bcf LCD_D7
btfsc LCD_TEMP_1,7
bsf LCD_D7
return
;................................................................................................
INICIO
clrf PORTA
clrf PORTB
clrf PORTC
clrf PORTD
clrf PORTE
bsf STATUS,RP0
movlw B'11111111' ;Configuro los puertos
movwf TRISA
movlw B'11000000'
movwf TRISB
movlw B'11111111'
movwf TRISC
movlw B'11111111'
movwf TRISD
movlw B'11111111'
movwf TRISE
bcf STATUS,RP0
call LCD_INICIALIZAR
movlw H'80'
call LCD_INST
movlw A' '
call LCD_DATO
movlw A' '
call LCD_DATO
movlw A' '
call LCD_DATO
movlw A'H'
call LCD_DATO
movlw A'o'
call LCD_DATO
movlw A'l'
call LCD_DATO
movlw A'a'
call LCD_DATO
movlw A' '
call LCD_DATO
movlw A'M'
call LCD_DATO
movlw A'u'
call LCD_DATO
movlw A'n'
call LCD_DATO
movlw A'd'
call LCD_DATO
movlw A'o'
call LCD_DATO
movlw A' '
call LCD_DATO
movlw A' '
call LCD_DATO
movlw A' '
call LCD_DATO
movlw H'C0'
call LCD_INST
movlw A' '
call LCD_DATO
movlw A' '
call LCD_DATO
movlw A' '
call LCD_DATO
movlw A' '
call LCD_DATO
movlw A'C'
call LCD_DATO
movlw A'h'
call LCD_DATO
movlw A'a'
call LCD_DATO
movlw A'l'
call LCD_DATO
movlw A'y'
call LCD_DATO
movlw A'2'
call LCD_DATO
movlw A'9'
call LCD_DATO
movlw A' '
call LCD_DATO
movlw A' '
call LCD_DATO
movlw A' '
call LCD_DATO
movlw A' '
call LCD_DATO
movlw A' '
call LCD_DATO
FGH
nop ; Una ves escrito en la pantalla me quedo en este loop
goto FGH
;................................................................................................
END