; Desplegar texto
PROCESSOR 16877
INCLUDE <P16F877.INC>
RDELAY EQU H'20'
ESTADO EQU 0X03
PUERTOB EQU 0X06
PUERTOD EQU 0X08
RS EQU 0
RW EQU 2
E EQU 1
W EQU 0
F EQU 1
ORG 0
GOTO INICIO
ORG 5
; PROGRAMA PRINCIPAL
INICIO:
CLRF PORTB ;Limpia PORTB
CLRF PORTD ;Limpia PORTD
BSF STATUS, RP0
BCF STATUS, RP1 ;Selecciona el banco 1
CLRF TRISB ;Configura PORTB como salida
CLRF TRISA ;Configura PORTA como salida
BCF STATUS,RP0 ;Regresa al banco 0
; CODIGO DE DESPLIEGUE DE MENSAJES
DESPLEGAR:
CALL INICIOLCD
CALL MENSAJE1
CALL R2
CALL MENSAJE2
GOTO DESPLEGAR
; SUBRUTINA DE MENSAJE 1
MENSAJE1:
MOVLW ' '
MOVWF PORTB
CALL ESCRIBE
MOVLW 'M' ;Mueve 'M' a W
MOVWF PORTB ;Mueve lo que hay en W a PORTB
CALL ESCRIBE ;Imprime en LCD
MOVLW 'I'
MOVWF PORTB
CALL ESCRIBE
MOVLW 'C'
MOVWF PORTB
CALL ESCRIBE
MOVLW 'R'
MOVWF PORTB
CALL ESCRIBE
MOVLW 'O'
MOVWF PORTB
CALL ESCRIBE
MOVLW 'S'
MOVWF PORTB
CALL ESCRIBE
MOVLW ' '
MOVWF PORTB
CALL ESCRIBE
MOVLW ' '
MOVWF PORTB
CALL ESCRIBE
MOVLW ' '
MOVWF PORTB
CALL ESCRIBE
MOVLW ' '
MOVWF PORTB
CALL ESCRIBE
MOVLW ' '
MOVWF PORTB
CALL ESCRIBE
MOVLW ' '
MOVWF PORTB
CALL ESCRIBE
MOVLW ' '
MOVWF PORTB
CALL ESCRIBE
MOVLW ' '
MOVWF PORTB
CALL ESCRIBE
MOVLW ' '
MOVWF PORTB
CALL ESCRIBE
MOVLW ' '
MOVWF PORTB
CALL ESCRIBE
MOVLW ' '
MOVWF PORTB
CALL ESCRIBE
MOVLW ' '
MOVWF PORTB
CALL ESCRIBE
CALL RETARDO10
RETURN
MENSAJE2:
MOVLW ' '
MOVWF PORTB
CALL ESCRIBE
MOVLW ' '
MOVWF PORTB
CALL ESCRIBE
MOVLW ' '
MOVWF PORTB
CALL ESCRIBE
MOVLW ' '
MOVWF PORTB
CALL ESCRIBE
MOVLW ' '
MOVWF PORTB
CALL ESCRIBE
MOVLW ' '
MOVWF PORTB
CALL ESCRIBE
MOVLW ' '
MOVWF PORTB
CALL ESCRIBE
MOVLW ' '
MOVWF PORTB
CALL ESCRIBE
MOVLW 'I' ;Mueve 'I' a W
MOVWF PORTB ;Mueve lo que hay en W a PORTB
CALL ESCRIBE ;Imprime en LCD
MOVLW 'T'
MOVWF PORTB
CALL ESCRIBE
MOVLW 'T'
MOVWF PORTB
CALL ESCRIBE
CALL RETARDO10
RETURN
; RENGLON 2
R2:
BCF PORTD,0 ; RS=0 MODO INST
MOVLW 0xC0 ;2da linea USAR 0C
MOVWF PORTB
CALL COMANDO
RETURN
; INICIALIZACION DE LA LCD
INICIOLCD:
CALL RETARDO100
MOVLW 30H
MOVWF PUERTOB
CALL RETARDO100
MOVLW 30H
MOVWF PUERTOB
CALL RETARDO100
MOVLW 38H
MOVWF PUERTOB
CALL COMANDO
MOVLW H'0C'
MOVWF PUERTOB
CALL COMANDO
MOVLW H'01'
MOVWF PUERTOB
CALL COMANDO
MOVLW H'06'
MOVWF PUERTOB
CALL COMANDO
MOVLW H'02'
MOVWF PUERTOB
CALL COMANDO
MOVLW H'80'
MOVWF PUERTOB
CALL COMANDO
RETURN
COMANDO:
CALL RETARDO10
BSF PUERTOD, E
BCF PUERTOD, RS
CALL RETARDO100
BCF PUERTOD, E
BCF PUERTOD, RS
CALL RETARDO10
CALL RETARDO10
RETURN
ESCRIBE:
CALL RETARDO10
BSF PUERTOD, RS
BSF PUERTOD, E
CALL RETARDO10
BCF PUERTOD, E
BCF PUERTOD, RS
CALL RETARDO10
CALL RETARDO10
RETURN
; RETARDO DE 255 MICROSEC
RETARDO255:
MOVLW 0XFF
MOVWF RDELAY
T1:
DECFSZ RDELAY, F
GOTO T1
RETURN
; RETARDO DE 100ms
RETARDO100:
CALL RETARDO10
CALL RETARDO10
CALL RETARDO10
CALL RETARDO10
CALL RETARDO10
CALL RETARDO10
CALL RETARDO10
CALL RETARDO10
CALL RETARDO10
CALL RETARDO10
RETURN
; RETARDO DE 10 ms
RETARDO10:
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
CALL RETARDO255
RETURN
END
; Desplazar a la derecha
processor 16f877
INCLUDE <P16f877.INC>
N EQU H'21' ; asignamos direcciones.
M EQU H'22'
Q EQU H'23'
VAL1 EQU H'24'
VAL2 EQU H'25'
CONTA1 EQU 30H
CONTA2 EQU 30H
org 0
GOTO INICIO
org 5 ; vector de reset, vector de interrupcion
INICIO
clrf PORTB ;Limpia PORTB
clrf PORTA ;Limpia PORTA
bsf STATUS, RP0
bcf STATUS, RP1 ;Selecciona el banco 1
clrf TRISB ;Configura PORTB como salida
clrf TRISA ;Configura PORTA como salida
bcf STATUS,RP0 ;Regresa al banco 0
LCD_INICIAR
CALL LCD_IN
CALL I
CALL F1
CALL NEXT
CALL I
CALL F2
GOTO LCD_INICIAR
I:
CALL DELAYL
MOVLW 'E'
CALL MANDAR
MOVLW 'J'
CALL MANDAR
MOVLW 'E'
CALL MANDAR
MOVLW 'R'
CALL MANDAR
MOVLW 'C'
CALL MANDAR
MOVLW 'I'
CALL MANDAR
MOVLW 'C'
CALL MANDAR
MOVLW 'I'
CALL MANDAR
MOVLW 'O'
CALL MANDAR
MOVLW ' '
CALL MANDAR
MOVLW '2'
CALL MANDAR
MOVLW ' '
CALL MANDAR
RETURN
F1:
MOVLW 1CH ;Desplazar 1C DERECHA 18 HIZQUIERDA
CALL EJECUTA
DECFSZ VAL1
GOTO F1
RETURN
F2:
MOVLW 1CH ;Desplazar 1C DERECHA 18 HIZQUIERDA
CALL EJECUTA
DECFSZ VAL2
GOTO F2
RETURN
NEXT:
CALL LCD_IN
MOVLW 0xD5 ;Ajusta la direccion de DD RAM
CALL EJECUTA
RETURN
LCD_IN:
MOVLW 30H ;Activa funcion
CALL EJECUTA
CALL DELAY
MOVLW 30H ;Activa funcion
CALL EJECUTA
CALL DELAY
MOVLW 38H ;Activa funcion
CALL EJECUTA
MOVLW 0CH ;Screen on/off cursor
CALL EJECUTA
MOVLW 01H ;Borrar pantalla
CALL EJECUTA
MOVLW 06H ;Direccion de movimiento
CALL EJECUTA
MOVLW 02H ;Home
CALL EJECUTA
MOVLW 95H ;Ajusta la direccion de DD RAM
CALL EJECUTA
RETURN
EJECUTA:
MOVWF PORTB
CALL DELAY
MOVLW 02H
MOVWF PORTA
CALL DELAY
MOVLW 00H
MOVWF PORTA
CALL DELAY
RETURN
MANDAR:
MOVWF PORTB
CALL DELAY
MOVLW 03H
MOVWF PORTA
CALL DELAY
MOVLW 01H
MOVWF PORTA
CALL DELAY
RETURN
DELAY:
movlw 10H
movwf Q ;la CTE1 pasa a la direccion de VALOR1.
TRES
movlw 8H
movwf M ;la CTE2 pasa a la direccion de VALOR2.
DOS
movlw 255H
movwf N ;la CTE3 pasa a la direccion de VALOR3.
UNO
DECFSZ N,1
GOTO UNO
DECFSZ M,1
GOTO DOS
DECFSZ Q,1
GOTO TRES
RETURN
DELAYL:
MOVLW CONTA1
MOVWF VAL1
MOVLW CONTA2
MOVWF VAL2
RETURN
END
; Desplazar a la izquierda
processor 16f877
INCLUDE <P16f877.INC>
N EQU H'21' ; asignamos direcciones.
M EQU H'22'
Q EQU H'23'
;quitndo el comentario podemos desplegar el mensaje en la parte alta del desplay
;VAL1 EQU H'60'
VAL2 EQU H'60'
;CONTA1 EQU 90H
CONTA2 EQU 90H
org 0
GOTO INICIO
org 5 ; vector de reset, vector de interrupcion
INICIO
clrf PORTB ;Limpia PORTB
clrf PORTD ;Limpia PORTD
bsf STATUS, RP0
bcf STATUS, RP1 ;Selecciona el banco 1
clrf TRISB ;Configura PORTB como salida
clrf TRISD ;Configura PORTD como salida
bcf STATUS,RP0 ;Regresa al banco 0
LCD_INICIAR
;quitndo el comentario podemos desplegar el mensaje en la parte alta del desplay
CALL LCD_IN
;CALL I
;CALL F1
;CALL NEXT
CALL I
CALL F2
GOTO LCD_INICIAR
I:
CALL DELAYL
MOVLW 'E'
CALL MANDAR
MOVLW 'J'
CALL MANDAR
MOVLW 'E'
CALL MANDAR
MOVLW 'R'
CALL MANDAR
MOVLW 'C'
CALL MANDAR
MOVLW 'I'
CALL MANDAR
MOVLW 'C'
CALL MANDAR
MOVLW 'I'
CALL MANDAR
MOVLW 'O'
CALL MANDAR
MOVLW ' '
CALL MANDAR
MOVLW '3'
CALL MANDAR
RETURN
;quitndo el comentario podemos desplegar el mensaje en la parte alta del desplay
;F1:
; MOVLW 18H ;Desplazar 1C DERECHA 18 HIZQUIERDA
; CALL EJECUTA
; DECFSZ VAL1
; GOTO F1
;RETURN
F2:
MOVLW 18H ;Desplazar 1C DERECHA 18 HIZQUIERDA
CALL EJECUTA
DECFSZ VAL2
GOTO F2
RETURN
NEXT:
CALL LCD_IN
MOVLW 0xD5 ;Ajusta la direccion de DD RAM
CALL EJECUTA
RETURN
LCD_IN:
MOVLW 30H ;Activa funcion
CALL EJECUTA
CALL DELAY
MOVLW 30H ;Activa funcion
CALL EJECUTA
CALL DELAY
MOVLW 38H ;Activa funcion
CALL EJECUTA
MOVLW 0CH ;Screen on/off cursor
CALL EJECUTA
MOVLW 01H ;Borrar pantalla
CALL EJECUTA
MOVLW 06H ;Direccion de movimiento
CALL EJECUTA
MOVLW 02H ;Home
CALL EJECUTA
MOVLW 95H ;Ajusta la direccion de DD RAM
CALL EJECUTA
RETURN
EJECUTA:
MOVWF PORTB
CALL DELAY
MOVLW 02H
MOVWF PORTD
CALL DELAY
MOVLW 00H
MOVWF PORTD
CALL DELAY
RETURN
MANDAR:
MOVWF PORTB
CALL DELAY
MOVLW 03H
MOVWF PORTD
CALL DELAY
MOVLW 01H
MOVWF PORTD
CALL DELAY
RETURN
DELAY:
movlw 20H
movwf Q ;la CTE1 pasa a la direccion de VALOR1.
TRES
movlw 8H
movwf M ;la CTE2 pasa a la direccion de VALOR2.
DOS
movlw 255H
movwf N ;la CTE3 pasa a la direccion de VALOR3.
UNO
DECFSZ N,1
GOTO UNO
DECFSZ M,1
GOTO DOS
DECFSZ Q,1
GOTO TRES
RETURN
DELAYL:
;quitndo el comentario podemos desplegar el mensaje en la parte alta del desplay
;MOVLW CONTA1
;MOVWF VAL1
MOVLW CONTA2
MOVWF VAL2
RETURN
END
No hay comentarios:
Publicar un comentario