Autor Tema: PROBLEMAS CON EL LCD...MUESTRA CUDRADOS NEGROS UNICAMENTE  (Leído 2458 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado dussam

  • PIC10
  • *
  • Mensajes: 6
PROBLEMAS CON EL LCD...MUESTRA CUDRADOS NEGROS UNICAMENTE
« en: 29 de Noviembre de 2013, 09:31:04 »
bueno de vuelta al foro! 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!!! y ya probe tambien lo del contraste, no fue ese el error! desesperaaado!!

;************************************** 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

Desconectado Mundoled

  • PIC10
  • *
  • Mensajes: 3
Re: PROBLEMAS CON EL LCD...MUESTRA CUDRADOS NEGROS UNICAMENTE
« Respuesta #1 en: 03 de Enero de 2015, 17:17:22 »
Buenas amigo, yo tengo el mismo problema!! pudiste resolverlo? yo lo simulo en proteus y anda bien, pero al implementarlo me figuran solo cuadrados negros!! nose cual es el problema! te adjunto una foto...

Desconectado Chaly29

  • Moderador Global
  • DsPIC33
  • *****
  • Mensajes: 4315
Re: PROBLEMAS CON EL LCD...MUESTRA CUDRADOS NEGROS UNICAMENTE
« Respuesta #2 en: 03 de Enero de 2015, 17:57:53 »
Hola Mundoled, lo más probable es que sea un problema con los tiempos. Alguno o varios de todos los tiempos que se usan para la comunicación con el LCD debe de estar muy corto y el LCD no alcanza a interpretar lo que el micro le está mandando.

Yo probaría de alargar un poco los tiempos y ver que pasa. Si esto no es, pues de seguro es los datos que estas mandando, de seguro estarás configurando de mal manera el LCD. Pero por supuesto primero debes asegurarte que los tiempos sean los correctos

Espero te sea de ayuda.

Un saludo.

Atte. CARLOS.

La teoría es cuando se sabe todo y nada funciona. La práctica es cuando todo funciona y nadie sabe por qué.

Desconectado soymoe

  • PIC18
  • ****
  • Mensajes: 456
    • El blog de Moe
Re: PROBLEMAS CON EL LCD...MUESTRA CUDRADOS NEGROS UNICAMENTE
« Respuesta #3 en: 03 de Enero de 2015, 18:01:39 »
En principio podria ser por el contraste',  ajustalo o  podria ser que no se  este inicializando el lcd.

Desconectado Pinolillo16

  • PIC18
  • ****
  • Mensajes: 324
Re: PROBLEMAS CON EL LCD...MUESTRA CUDRADOS NEGROS UNICAMENTE
« Respuesta #4 en: 04 de Enero de 2015, 04:09:04 »
Que tal amigos en mi opinión también es muy probable que sea cuestion de tiempos ya que en proteus necesita unos retardos mas grandes para inicializar, verifica el flag de la LCD o si no lo usas si no mmal recuerdo el retardo mas comun que demora en procesar el dato del bus es de 37 us si le pones uno aproximado o mayor quizás te ayude. Saludos