muchisimas gracis y disculpe el retardo en responder ando en finales y pues no he tenido mux tiempo y m funciono la solucion!!! ahora and cn otro problema un pokito mas dificultoso de detectar, toy haciendo una cerradura electronica y ya la tengo armada y todo...el problema es el lcd...en la simulacion d proteus m aparece CONTROLLER RECEIVED DATA BUSY o algo x el stilo. x lo q anduve leyendo se debe a q no defini una libreria para el lcd? no stoy seguro. aki sta el codigo en asm es un pokito largo pero kizas mi error esta al principio. de antemano mux gracias!!!
;************************************** Elegimos PIC ********************************************************************
list p=16f876a
include <p16f876a.inc>
__CONFIG _XT_OSC&_CPD_ON&_PWRTE_ON&_WDT_OFF&_LVP_OFF&_BODEN_OFF
errorlevel -302
;************** Asignación de nombres de Registros de Funciones especiales a direcciones ********************
DATO EQU 06H ;PUERTO B
KEYB EQU 07H
PUNTAB EQU 20H
INTENTO EQU 21H
TECLA EQU 22H
CUENTA1 EQU 23H
CUENTA2 EQU 24H
CUENTA3 EQU 25H
CUENTA4 EQU 2AH
COD1 EQU 26H
COD2 EQU 27H
COD3 EQU 28H
COD4 EQU 29H
COD1A EQU 2BH
COD2A EQU 2CH
COD3A EQU 2DH
COD4A EQU 2EH
CODWRITE EQU 2FH
#DEFINE RS 05H,0
#DEFINE RW 05H,1
#DEFINE EN 05H,2
#DEFINE ALA 05H,3
#DEFINE PORTERO 05H,5
#DEFINE bloqueo 05H,3
#DEFINE accesorios 05H,4
ORG 00H
GOTO INICIO
ORG 04H
BCF PIR2,4
RETFIE
TABLA
MOVWF PCL
MEN_1
RETLW ' '
RETLW ' '
RETLW 'D'
RETLW 'I'
RETLW 'G'
RETLW 'I'
RETLW 'T'
RETLW 'E'
MEN_5
RETLW ' '
RETLW 'C'
RETLW 'L'
RETLW 'A'
RETLW 'V'
RETLW 'E'
RETLW 00H
MEN_2
RETLW ' '
RETLW ' '
RETLW ' '
RETLW ' '
RETLW 'A'
RETLW 'C'
RETLW 'T'
RETLW 'I'
RETLW 'V'
RETLW 'A'
RETLW 'D'
RETLW 'O'
RETLW 00H
MEN_3
RETLW ' '
RETLW 'C'
RETLW 'L'
RETLW 'A'
RETLW 'V'
RETLW 'E'
RETLW ' '
RETLW 'E'
RETLW 'R'
RETLW 'R'
RETLW 'A'
RETLW 'D'
RETLW 'A'
RETLW 00H
MEN_4
RETLW ' '
RETLW 'C'
RETLW 'A'
RETLW 'M'
RETLW 'B'
RETLW 'I'
RETLW 'O'
RETLW ' '
RETLW 'D'
RETLW 'E'
RETLW 00H
MEN_6
RETLW ' '
RETLW 'A'
RETLW 'N'
RETLW 'T'
RETLW 'I'
RETLW 'G'
RETLW 'U'
RETLW 'A'
RETLW 00H
MEN_7
RETLW ' '
RETLW 'N'
RETLW 'U'
RETLW 'E'
RETLW 'V'
RETLW 'A'
RETLW 00H
MEN_8
RETLW ' '
RETLW 'V'
RETLW 'E'
RETLW 'R'
RETLW 'I'
RETLW 'F'
RETLW 'I'
RETLW 'Q'
RETLW 'U'
RETLW 'E'
RETLW 00H
MEN_9
RETLW ' '
RETLW 'C'
RETLW 'A'
RETLW 'M'
RETLW 'B'
RETLW 'I'
RETLW 'A'
RETLW 'D'
RETLW 'A'
RETLW 00H
MEN_10
RETLW ' '
RETLW 'L'
RETLW 'A'
RETLW ' '
RETLW 'C'
RETLW 'L'
RETLW 'A'
RETLW 'V'
RETLW 'E'
RETLW ' '
RETLW 'D'
RETLW 'E'
RETLW 'B'
RETLW 'E'
RETLW 00H
MEN_11
RETLW ' '
RETLW 'T'
RETLW 'E'
RETLW 'N'
RETLW 'E'
RETLW 'R'
RETLW ' '
RETLW '4'
RETLW ' '
RETLW 'D'
RETLW 'I'
RETLW 'G'
RETLW 'I'
RETLW 'T'
RETLW 'O'
RETLW 'S'
RETLW 00H
MEN_12
RETLW ' '
RETLW 'I'
RETLW 'N'
RETLW 'T'
RETLW 'E'
RETLW 'N'
RETLW 'T'
RETLW 'E'
RETLW 'L'
RETLW 'O'
RETLW 00H
MEN_13
RETLW ' '
RETLW 'D'
RETLW 'E'
RETLW ' '
RETLW 'N'
RETLW 'U'
RETLW 'E'
RETLW 'V'
RETLW 'O'
RETLW 00H
men_bloqueo
RETLW ' '
RETLW ' '
RETLW ' '
RETLW ' '
RETLW 'B'
RETLW 'L'
RETLW 'O'
RETLW 'Q'
RETLW 'U'
RETLW 'E'
RETLW 'O'
RETLW 00H
men_bloqueo2
RETLW ' '
RETLW 'A'
RETLW 'C'
RETLW 'T'
RETLW 'I'
RETLW 'V'
RETLW 'A'
RETLW 'D'
RETLW 'O'
RETLW 00H
INICIO
CLRF DATO
CLRF KEYB
CLRF PORTA
BSF STATUS,5
MOVLW 06H
MOVWF 9FH
CLRF DATO
BCF EN
BCF RW
BCF RS
BCF ALA
BCF PORTERO
BCF bloqueo
MOVLW 0F0H
MOVWF KEYB
BCF STATUS,5
BCF PIR2,4
MOVLW 03H
MOVWF INTENTO
CALL INITLCD
CALL INITLCD
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
PRINCI
BCF bloqueo
CALL CLEARL
MOVLW 00H
CALL SITUCU
MOVLW MEN_1
CALL ESCMEN
MOVLW 44H
CALL SITUCU
;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
ECOD12
CALL SUELKEY
CALL ESPEKEY
MOVWF COD1
BTFSC STATUS,2
GOTO ECOD12
MOVF COD1,W
SUBLW '#'
BTFSC STATUS,2
GOTO INCOR
MOVF COD1,W
SUBLW '*'
BTFSC STATUS,2
GOTO CAMBIOC
MOVF COD1,W
BTFSC STATUS,2
GOTO ECOD12
MOVLW '*'
CALL WRITEL
ECOD22
CALL SUELKEY
CALL ESPEKEY
MOVWF COD2
BTFSC STATUS,2
GOTO ECOD1
MOVF COD2,W
SUBLW '#'
BTFSC STATUS,2
GOTO INCOR
MOVF COD2,W
BTFSC STATUS,2
GOTO CAMBIOC
MOVF COD2,W
BTFSC STATUS,2
GOTO ECOD22
MOVLW '*'
CALL WRITEL
ECOD32
CALL SUELKEY
CALL ESPEKEY
MOVWF COD3
BTFSC STATUS,2
GOTO ECOD2
MOVF COD3,W
SUBLW '#'
BTFSC STATUS,2
GOTO INCOR
MOVF COD3,W
BTFSC STATUS,2
GOTO CAMBIOC
MOVF COD3,W
BTFSC STATUS,2
GOTO ECOD32
MOVLW '*'
CALL WRITEL
ECOD42
CALL SUELKEY
CALL ESPEKEY
MOVWF COD4
BTFSC STATUS,2
GOTO ECOD3
MOVF COD4,W
SUBLW '#'
BTFSC STATUS,2
GOTO INCOR
MOVF COD4,W
BTFSC STATUS,2
GOTO CAMBIOC
MOVF COD4,W
BTFSC STATUS,2
GOTO ECOD42
MOVLW '*'
CALL WRITEL
CALL SUELKEY
FINCOD
CALL ESPEKEY
MOVWF TECLA
SUBLW '#'
BTFSC STATUS,2
GOTO FINCOD2
MOVF TECLA,W
BTFSC STATUS,2
GOTO ECOD4
MOVF TECLA,W
BTFSC STATUS,2
GOTO CAMBIOC
GOTO FINCOD
FINCOD2
MOVLW 00H
CALL LEECOD
SUBWF COD1,W
BTFSS STATUS,2
GOTO INCOR
MOVLW 01H
CALL LEECOD
SUBWF COD2,W
BTFSS STATUS,2
GOTO INCOR
MOVLW 02H
CALL LEECOD
SUBWF COD3,W
BTFSS STATUS,2
GOTO INCOR
MOVLW 03H
CALL LEECOD
SUBWF COD4,W
BTFSS STATUS,2
GOTO INCOR
CALL CLEARL ;CLAVE CORRECTA **********************
MOVLW 02H
CALL SITUCU
MOVLW MEN_2
CALL ESCMEN
MOVLW 03H
MOVWF INTENTO
goto out
reset
MOVLW 10H
BCF PORTERO
goto PRINCI
INCOR
MOVLW 0CH ;CLAVE INCORRECTA
CALL COMANDO
CALL CLEARL
MOVLW 0XC1
CALL SITUCU
MOVLW MEN_3 ; Mensaje Clave incorrecta
CALL ESCMEN
DECFSZ INTENTO,F
GOTO INCOR2
GOTO ALARMA
INCOR2
MOVLW 20H
call retardo_2s
GOTO PRINCI
ECOD1
MOVLW 44H
CALL SITUCU
MOVLW ' '
CALL WRITEL
MOVLW 44H
CALL SITUCU
GOTO ECOD12
ECOD2
MOVLW 45H
CALL SITUCU
MOVLW ' '
CALL WRITEL
MOVLW 45H
CALL SITUCU
GOTO ECOD22
ECOD3
MOVLW 46H
CALL SITUCU
MOVLW ' '
CALL WRITEL
MOVLW 46H
CALL SITUCU
GOTO ECOD32
ECOD4
MOVLW 47H
CALL SITUCU
MOVLW ' '
CALL WRITEL
MOVLW 47H
CALL SITUCU
GOTO ECOD42
ALARMA
MOVLW 1EH
MOVWF TECLA
ALARMA4
MOVLW 03H
MOVWF INTENTO
MOVLW 00FH
MOVWF CUENTA1
MOVLW 030H
MOVWF CUENTA2
ALARMA1
MOVLW 20H
MOVWF CUENTA4
DECF CUENTA1,F
BTFSC STATUS,2
GOTO ALARMA2
ALARMA3
BSF ALA
CALL CLEARL
MOVLW men_bloqueo
BSF bloqueo
CALL ESCMEN
MOVLW 43H
CALL SITUCU
MOVLW men_bloqueo2
CALL ESCMEN
CALL DELAY
MOVLW 20H
BCF ALA
goto reset
ALARMA2
MOVLW 01H
CALL DELAY
DECFSZ TECLA,F
GOTO ALARMA4
GOTO PRINCI
CAMBIOC
CALL CLEARL
MOVLW MEN_4
CALL ESCMEN
MOVLW MEN_5
CALL ESCMEN
MOVLW 20H
CALL retardo_2s
CALL CLEARL
MOVLW MEN_5
CALL ESCMEN
MOVLW MEN_6
CALL ESCMEN
CALL SUELKEY
MOVLW 44H
CALL SITUCU
CALL COGECOD
MOVLW 00H
CALL LEECOD
SUBWF COD1,W
BTFSS STATUS,2
GOTO INCORE
MOVLW 01H
CALL LEECOD
SUBWF COD2,W
BTFSS STATUS,2
GOTO INCORE
MOVLW 02H
CALL LEECOD
SUBWF COD3,W
BTFSS STATUS,2
GOTO INCORE
MOVLW 03H
CALL LEECOD
SUBWF COD4,W
BTFSS STATUS,2
GOTO INCORE
MOVLW 03H
MOVWF INTENTO
NUEVACL
CALL CLEARL
MOVLW 02H
CALL SITUCU
MOVLW MEN_7
CALL ESCMEN
MOVLW MEN_5
CALL ESCMEN
MOVLW 44H
CALL SITUCU
CALL SUELKEY
CALL COGECOD
MOVF COD1,W
BTFSC STATUS,2
GOTO INCOREC
MOVWF COD1A
MOVF COD2,W
BTFSC STATUS,2
GOTO INCOREC
MOVWF COD2A
MOVF COD3,W
BTFSC STATUS,2
GOTO INCOREC
MOVWF COD3A
MOVF COD4,W
BTFSC STATUS,2
GOTO INCOREC
MOVWF COD4A
CALL CLEARL ;VERIFIQUE CLAVE
MOVLW MEN_8
CALL ESCMEN
MOVLW MEN_5
CALL ESCMEN
MOVLW 44H
CALL SITUCU
CALL SUELKEY
CALL COGECOD
MOVF COD1,W
SUBWF COD1A,W
BTFSS STATUS,2
GOTO NOVERI
MOVF COD2,W
SUBWF COD2A,W
BTFSS STATUS,2
GOTO NOVERI
MOVF COD3,W
SUBWF COD3A,W
BTFSS STATUS,2
GOTO NOVERI
MOVF COD4,W
SUBWF COD4A,W
BTFSS STATUS,2
GOTO NOVERI
CALL CLEARL ;CLAVE CAMBIADA
MOVLW MEN_5
CALL ESCMEN
MOVLW MEN_9
CALL ESCMEN
MOVF COD1,W
MOVWF CODWRITE
MOVLW 00H
CALL EEWRITE
MOVF COD2,W
MOVWF CODWRITE
MOVLW 01H
CALL EEWRITE
MOVF COD3,W
MOVWF CODWRITE
MOVLW 02H
CALL EEWRITE
MOVF COD4,W
MOVWF CODWRITE
MOVLW 03H
CALL EEWRITE
MOVLW 20H
CALL retardo_2s ;**********************************************
GOTO PRINCI
NOVERI
CALL CLEARL
MOVLW 03H
CALL SITUCU
MOVLW MEN_12
CALL ESCMEN
MOVLW 43H
CALL SITUCU
MOVLW MEN_13
CALL ESCMEN
MOVLW 20H
CALL retardo_2s ;***********************************************
GOTO NUEVACL
INCOREC
CALL CLEARL ;LA CLAVE DEBE TENER 4 DIGITOS
MOVLW MEN_10
CALL ESCMEN
MOVLW 40H
CALL SITUCU
MOVLW MEN_11
CALL ESCMEN
MOVLW 20H
CALL DELAY
GOTO PRINCI
INCORE
DECF INTENTO,F
BTFSC STATUS,2
GOTO ALARMA
CALL CLEARL
MOVLW MEN_3
CALL ESCMEN
MOVLW 20H
CALL retardo_2s
CALL SUELKEY
GOTO PRINCI
;-----------------------------------------------------------------
COGECOD
CLRF COD1
CLRF COD2
CLRF COD3
CLRF COD4
ECOD12C
CALL SUELKEY
CALL ESPEKEY
MOVWF COD1
BTFSC STATUS,2
GOTO ECOD12C
MOVF COD1,W
SUBLW '#'
BTFSC STATUS,2
RETURN
MOVF COD1,W
BTFSC STATUS,2
GOTO ECOD12C
MOVF COD1,W
BTFSC STATUS,2
GOTO ECOD12C
MOVLW '*'
CALL WRITEL
ECOD22C
CALL SUELKEY
CALL ESPEKEY
MOVWF COD2
BTFSC STATUS,2
GOTO ECOD1C
MOVF COD2,W
SUBLW '#'
BTFSC STATUS,2
RETURN
MOVF COD2,W
BTFSC STATUS,2
GOTO ECOD22C
MOVF COD2,W
BTFSC STATUS,2
GOTO ECOD22C
MOVLW '*'
CALL WRITEL
ECOD32C
CALL SUELKEY
CALL ESPEKEY
MOVWF COD3
BTFSC STATUS,2
GOTO ECOD2C
MOVF COD3,W
SUBLW '#'
BTFSC STATUS,2
RETURN
MOVF COD3,W
BTFSC STATUS,2
GOTO ECOD32C
MOVF COD3,W
BTFSC STATUS,2
GOTO ECOD32C
MOVLW '*'
CALL WRITEL
ECOD42C
CALL SUELKEY
CALL ESPEKEY
MOVWF COD4
BTFSC STATUS,2
GOTO ECOD3C
MOVF COD4,W
SUBLW '#'
BTFSC STATUS,2
GOTO RETU4
MOVF COD4,W
BTFSC STATUS,2
GOTO ECOD42C
MOVF COD4,W
BTFSC STATUS,2
GOTO ECOD42C
MOVLW '*'
CALL WRITEL
CALL SUELKEY
FINCODC
CALL ESPEKEY
MOVWF TECLA
SUBLW '#'
BTFSC STATUS,2
RETURN ;YA TENGO EL CÓDIGO
MOVF TECLA,W
BTFSC STATUS,2
GOTO ECOD4C
GOTO FINCODC
ECOD1C
MOVLW 44H
CALL SITUCU
MOVLW ' '
CALL WRITEL
MOVLW 44H
CALL SITUCU
CLRF COD2
GOTO ECOD12C
ECOD2C
MOVLW 45H
CALL SITUCU
MOVLW ' '
CALL WRITEL
MOVLW 45H
CALL SITUCU
CLRF COD3
GOTO ECOD22C
ECOD3C
MOVLW 46H
CALL SITUCU
MOVLW ' '
CALL WRITEL
MOVLW 46H
CALL SITUCU
CLRF COD4
GOTO ECOD32C
ECOD4C
MOVLW 47H
CALL SITUCU
MOVLW ' '
CALL WRITEL
MOVLW 47H
CALL SITUCU
GOTO ECOD42C
RETU4
CLRF COD4
RETURN
;-----------------------------------------------------------------
; LEECOD: SUBRUTINA QUE LEE EL REGISTRO DE LA EEPROM
; INDICADO POR EL ACUMULADOR Y LO DEVUELVE EN
; ACUMULADOR
LEECOD
BSF STATUS,6
BCF STATUS,5
MOVWF EEADR
BSF STATUS,5
BCF EECON1,7
BSF EECON1,0
BCF STATUS,5
MOVF EEDATA,W
BCF STATUS,6
RETURN
;----------------------------------------------------------------
;-----------------------------------------------------------------
; EEWRITE: SUBRUTINA QUE ESCRIBE EN LA EEPRON DE DATOS
; PASAR LA DIRECCION DE LA EEPRON A ESCRIBIR EN W Y EL DATO A ESCRIBIR EN CODWRITE
EEWRITE
BSF STATUS,6
BCF STATUS,5
MOVWF EEADR
BCF STATUS,6
MOVF CODWRITE,W
BSF STATUS,6
MOVWF EEDATA
BSF STATUS,5
BCF EECON1,7
BSF EECON1,2
BCF INTCON,7
MOVLW 55H
MOVWF EECON2
MOVLW 0AAH
MOVWF EECON2
BSF EECON1,1
BSF INTCON,7
BCF STATUS,5
BCF STATUS,6
EEWRIT
BTFSS PIR2,4
GOTO EEWRIT
BSF STATUS,5
BSF STATUS,6
BCF EECON1,2
BCF STATUS,5
BCF STATUS,6
BCF PIR2,4
RETURN
;----------------------------------------------------------
; GETKEY: Subrutina que devuelve el valor pulsado en
; un teclado hexadecimal en código ascii en W
;COL1: 0 COL2: 1 COL3: 2 COL4: 3
;ROW1: 4 ROW2: 5 ROW3: 6 ROW4: 7
GETKEY
MOVLW 0FH
MOVWF KEYB
NOP
MOVF KEYB,W
MOVWF TECLA
CALL REBOTE
MOVF KEYB,W
SUBWF TECLA,F
BTFSS STATUS,2
GOTO GETKEY
SUBLW 0FH
BTFSS STATUS,2
GOTO HAYTECL
RETLW 0FH
HAYTECL
BTFSC KEYB,4
GOTO ROW1
BTFSC KEYB,5
GOTO ROW2
BTFSC KEYB,6
GOTO ROW3
BTFSC KEYB,7
GOTO ROW4
RETLW 0FH
ROW1
MOVLW 01H
MOVWF KEYB
NOP
BTFSC KEYB,4
RETLW 31H ;TECLA=1
MOVLW 02H
MOVWF KEYB
NOP
BTFSC KEYB,4
RETLW 32H ;TECLA=2
MOVLW 04H
MOVWF KEYB
NOP
BTFSC KEYB,4
RETLW 33H ;TECLA=3
MOVLW 08H
MOVWF KEYB
NOP
BTFSC KEYB,4
RETLW 'A' ;TECLA=A
RETLW 0FH
ROW2
MOVLW 01H
MOVWF KEYB
NOP
BTFSC KEYB,5
RETLW 34H ;TECLA=4
MOVLW 02H
MOVWF KEYB
NOP
BTFSC KEYB,5
RETLW 35H ;TECLA=5
MOVLW 04H
MOVWF KEYB
NOP
BTFSC KEYB,5
RETLW 36H ;TECLA=6
MOVLW 08H
MOVWF KEYB
NOP
BTFSC KEYB,5
RETLW 'B' ;TECLA=B
RETLW 0FH
ROW3
MOVLW 01H
MOVWF KEYB
NOP
BTFSC KEYB,6
RETLW 37H ;TECLA=7
MOVLW 02H
MOVWF KEYB
NOP
BTFSC KEYB,6
RETLW 38H ;TECLA=8
MOVLW 04H
MOVWF KEYB
NOP
BTFSC KEYB,6
RETLW 39H ;TECLA=9
MOVLW 08H
MOVWF KEYB
NOP
BTFSC KEYB,6
RETLW 'C' ;TECLA=C
RETLW 0FH
ROW4
MOVLW 01H
MOVWF KEYB
NOP
BTFSC KEYB,7
RETLW '*' ;TECLA=*
MOVLW 02H
MOVWF KEYB
NOP
BTFSC KEYB,7
RETLW 30H ;TECLA=0
MOVLW 04H
MOVWF KEYB
NOP
BTFSC KEYB,7
RETLW '#' ;TECLA=#
MOVLW 08H
MOVWF KEYB
NOP
BTFSC KEYB,7
RETLW 'D' ;TECLA=D
RETLW 0FH
;----------------------------------------------------------------
;-----------------------------------------------------------
; SUELKEY: SUBRUTINA QUE ESPERA A QUE SE SUELTE
; LA TECLA PULSADA
SUELKEY
CALL GETKEY
SUBLW 0FH
BTFSC STATUS,2
RETURN
GOTO SUELKEY
;-----------------------------------------------------------
;---------------------------------------------------------------------
; ESPEKEY: SUBRUTINA QUE ESPERA A QUE SE PULSE UNA TECLA
; DEVUELVE EL VALOR EN W Y TECLA
ESPEKEY
CALL GETKEY
MOVWF TECLA
SUBLW 0FH
BTFSC STATUS,2
GOTO ESPEKEY
MOVF TECLA,W
RETURN
;----------------------------------------------------------------------
;--------------------------------------------------------------------------------------------
; ESCMEN: SUBRUTINA QUE ESCRIBE UN MENSAJE EN EL LCD,
; PASAR INICIO DE TABLA EN ACUMULADOR
ESCMEN
MOVWF PUNTAB
ESCMEN2
CALL TABLA
ADDLW 00H
BTFSC STATUS,2
RETURN
CALL WRITEL
INCF PUNTAB,F
MOVF PUNTAB,W
GOTO ESCMEN2
;-------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
; WAITLCD: SUBRUTINA DE ESPERA AL LCD
WAITLCD
BSF STATUS,5
MOVLW 0FFH
MOVWF DATO
BCF STATUS,5
BSF EN
BCF RS
BSF RW
MOVLW 0FFH
MOVWF DATO
WAITLC
BTFSC DATO,7
GOTO WAITLC
BCF EN
BCF RW
BCF DATO,7
BSF STATUS,5
CLRF DATO
BCF STATUS,5
RETURN
;--------------------------------------------------------------------------------------------
;--------------------------------------------------------------------------------------------
; INITLCD: SUBRUTINA DE INICIALIZACIÓN DEL LCD
INITLCD
MOVLW 38H ;00111000
CALL COMANDO ;INTERFACE 8 BIT, 2 LINEAS
MOVLW 0CH ;00001100
CALL COMANDO ;DISPLAY A ON, NO MUESTRA CURSOR, NO PARPADEO
MOVLW 06H ;00000110
CALL COMANDO ;MUEVE CURSOR A LA DCHA DESPUES D ESCRIBIR, NO MUEVE VENTANA
RETURN
;-------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------
; CLEARL: SUBRUTINA QUE BORRA EL LCD Y LLEVA EL CURSOR AL LADO IZQUIERDO DEL
; DISPLAY
CLEARL
MOVLW 01H
CALL COMANDO ;BORRADO
RETURN
;--------------------------------------------------------------------------------------------
;--------------------------------------------------------------------------------------------
; WRITEL: SUBRUTINA QUE ESCRIBE EN EL LCD EL CARACTER DEL ACUMULADOR
WRITEL
BSF EN
BSF RS
BCF RW
MOVWF DATO
BCF EN
CALL WAITLCD
RETURN
;---------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------
; COMANDO: SUBRUTINA QUE ENVIA UN COMANDO AL LCD
COMANDO
BSF EN
BCF RS
BCF RW
MOVWF DATO
BCF EN
CALL WAITLCD
RETURN
;---------------------------------------------------------------------------------------------
; SITUCU: SUBRUTINA QUE SITUA EL CURSOR EN LA DIRECCION INDICADA POR EL ACUMULADOR
SITUCU
IORLW 80H
CALL COMANDO
RETURN
;----------------------------------------------------------------------------------------------
;=====================================================================
;*********** DELAY ***********
;---------------------------------------------------------------------
;SUBRUTINA DE RETARDO SEGÚN EL VALOR DEL ACUMULADOR
;MODIFICA LOS SIGUIENTES REGISTROS
; CUENTA1
; CUENTA2
; CUENTA3
DELAY
MOVWF CUENTA1
DELAY3
MOVLW 0FFH
MOVWF CUENTA2
DELAY2
MOVLW 0FFH
MOVWF CUENTA3
DELAY1
DECFSZ CUENTA3,F
GOTO DELAY1
DECFSZ CUENTA2,F
GOTO DELAY2
DECFSZ CUENTA1,F
GOTO DELAY3
RETURN
retardo_2s
MOVLW 00FH
MOVWF CUENTA1
retardo3
MOVLW 01FH
MOVWF CUENTA2
retardo2
MOVLW 01FH
MOVWF CUENTA3
retardo1
DECFSZ CUENTA3,F
GOTO retardo1
DECFSZ CUENTA2,F
GOTO retardo2
DECFSZ CUENTA1,F
GOTO retardo1
RETURN
;***************************************************
out
bsf PORTERO
BTFSC accesorios
goto reset
goto out
;======================================================================
REBOTE
MOVLW 0FFH
MOVWF CUENTA1
REBO
DECFSZ CUENTA1,F
GOTO REBO
RETURN
; Comentar estas líneas y grabar la EEPROM con una clave de 4 digitos
; Empezando desde la dirección 0x00
ORG 2100H
DE 30H,30H,30H,30H
;************************************************************************
END