Autor Tema: COMO ENCIENDO UN LED EN UN DETERMINADO NUMERO QUE APARECE EN UN CONTADOR  (Leído 1929 veces)

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

Desconectado dussam

  • PIC10
  • *
  • Mensajes: 6
tengo un programa en asm que es un contador del 0 al 15 q lo controlo con un pulso en RA0 y ademas debo encender un led cuand el contador este en el numero 7. el led esta conectado en RA1. solo tengo problemas con el led pues nose como hacer esa parte. alguna ayudita???
este es mi progrma:
LIST P=16F84A
   #INCLUDE P16F84A.INC
   __CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC

CONT   EQU 0X0C
      ORG 0X00
      BSF STATUS,5
      BSF TRISA,0
      CLRF TRISB
      BCF STATUS,5

      CLRF CONT
      CLRF PORTB

ES1      BTFSS PORTA,0
      GOTO ES1
      INCF CONT,1
      MOVF CONT,0
      MOVWF PORTB
         
ES0      BTFSC PORTA,0
       GOTO ES0
      GOTO ES1
      END

Desconectado ZAR

  • PIC10
  • *
  • Mensajes: 10
Re: COMO ENCIENDO UN LED EN UN DETERMINADO NUMERO QUE APARECE EN UN CONTADOR
« Respuesta #1 en: 22 de Noviembre de 2013, 02:53:02 »
Saludos, bueno mirando tu programa realice algunos cambios, en primer lugar se puso al pin RA1 como salida ya lo modifique. Según entiendo el led solo se encenderá cuando el contador es 7 de manera que al ser mayor se apagara, por tanto se debe saber en qué momento se llega a este valor, al no contar con un comando para comparar valores (CONT=7)  se recurre a operaciones aritméticas de manera que al restar 7-CONT=0 el resultado cero se indica por el flag Z del registro STATUS y de esa manera se conoce cuando una variable es igual a un valor fijo. Como se aprecia en el programa, luego compara con el valor de 8 para apagar el led según entendí en el problema que planteas. También como no se aclara que pasa con el contador cuando llega 15 se coloca nuevamente el contador a cero para tener un contador cíclico.

Por otro lado para el pulsador se asume que al ser presionado RA0 tendrá un estado alto y se realiza el incremento, El ciclo  “ES0” asumo que es para verificar en qué momento se deja de presionar el pulsador, esto funcionara en simulación pero en la práctica seguro le dará problemas por los rebotes producidos en el pulsador, recomendaría que utilices retardos para tal fin, espero que te sirva.   :)

Código: ASM
  1. LIST P=16F84A
  2. #INCLUDE P16F84A.INC
  3. __CONFIG _CP_OFF&_WDT_OFF&_PWRTE_ON&_XT_OSC
  4.  
  5. CONT    equ  0x0C
  6.         org  0x00
  7.         goto INICIO
  8.         org  0x05
  9. INICIO
  10.         bsf  STATUS,RP0
  11.         bcf  TRISA,1
  12.         clrf TRISB
  13.         bcf  STATUS,RP0
  14.         clrf CONT
  15.         clrf PORTB
  16. ES1      
  17.         btfss PORTA,0
  18.         goto  ES1
  19.         incf  CONT,F
  20.         movf  CONT,W
  21.         movwf PORTB
  22.         movf  CONT,W
  23.         sublw .7
  24.         btfsc STATUS,Z
  25.         bsf   PORTA,1
  26.         movf  CONT,W
  27.         sublw .8
  28.         btfsc STATUS,Z
  29.         bcf   PORTA,1
  30.         movf  CONT,W
  31.         sublw .16
  32.         btfss STATUS,Z
  33.         goto  ES0
  34.         clrf CONT
  35.         clrf  PORTB
  36. ES0
  37.         btfsc PORTA,0
  38.         goto  ES0
  39.         goto  ES1
  40. END
« Última modificación: 22 de Noviembre de 2013, 10:45:56 por ZAR »

Desconectado dussam

  • PIC10
  • *
  • Mensajes: 6
Re: COMO ENCIENDO UN LED EN UN DETERMINADO NUMERO QUE APARECE EN UN CONTADOR
« Respuesta #2 en: 28 de Noviembre de 2013, 18:17:06 »
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


 

anything