CHAPA+ELECTRONICA

**CHAPA ELECTRONICA - DIGITALES 2** El siguiente es el código para construir una chapa lectrónica básica, con la letra A solicita la clave de 4 caracteres, la valida y segun un valor preestablecido activa o desactiva una cantonera: INCLUDE  CBLOCK .32 TECLA POSICION INICIO_TABLA CARACTER YA_INICIO COMANDO CONTADOR C1 C2 C3 C4 V1 V2 V3 V4 ENDC


 * 1) DEFINE CANTONERA PORTA,0

org 00h goto INICIO ORG 04H GOTO INTERRUPCION

TABLA_TECLADO ADDWF PCL,F TABLA DT "789A456B123CC0=D",00H

MENSAJE ADDWF PCL,F ; POSICION 2 MENSAJE_1 DT "CHAPA ELECTRONIC",00H MENSAJE_2 DT "DIGITE CLAVE(4):",00H MENSAJE_INCORRECTO DT "CLAVE INCORRECTA",00H MENSAJE_CORRECTO DT "CLAVE CORRECTA",00H MENSAJE_5 DT "INGRESE CLAVE(A)",00H

MOSTRA_CADENA MOVWF POSICION MOVLW MENSAJE SUBWF POSICION,W MOVWF INICIO_TABLA DECF INICIO_TABLA,F CICLO1 MOVF INICIO_TABLA,W CALL MENSAJE MOVWF CARACTER MOVF CARACTER,F BTFSS STATUS,Z GOTO SEGUIR GOTO FIN SEGUIR MOVF CARACTER,W CALL LCD_ENVIA_CARACTER INCF INICIO_TABLA,F GOTO CICLO1 FIN RETURN

INTERRUPCION BTFSS INTCON,RBIF GOTO TERMINAR_INT GOTO SI_ES_TECLADO SI_ES_TECLADO MOVF YA_INICIO,F BTFSS STATUS,Z GOTO INTERRUPCION_VALIDA

COMF YA_INICIO BCF INTCON ,RBIF GOTO TERMINAR_INT

INTERRUPCION_VALIDA CALL DETERMINAR_POSICION MOVF POSICION_TECLA,W ; LIBRERIA CALL TABLA_TECLADO MOVWF TECLA; ASM

MOVF COMANDO,F BTFSS STATUS,Z GOTO NO_ES_0 GOTO ES_0 ES_0 movlw 'A' SUBWF TECLA,W BTFSS STATUS,Z GOTO RETORNAR_RBIF_0

MOVLW .1 MOVWF COMANDO

CLRF CONTADOR CALL LCD_LINEA1 MOVLW MENSAJE_2 CALL MOSTRA_CADENA

RETORNAR_RBIF_0 CALL ESPERAR_LEVANTAR_DEDO BCF INTCON,RBIF RETFIE

NO_ES_0 MOVLW .47 SUBWF TECLA,W ; W=TECLA-W w=#-47=35-47 BTFSC STATUS,C ;C=0 RESULTADO ES NEGATIVO? GOTO MAYOR_IGUAL_A47; C=1 GOTO MENOR_47 ;C=0 MENOR_47 GOTO RETORNAR_RBIF_0 MAYOR_IGUAL_A47 MOVLW .59 SUBWF TECLA,W ;W=TECLA-59 BTFSC STATUS,C ;C=0? RESULTADO ES NEGATIVO? GOTO MAYOR_A59 GOTO INCREMENTAR_CONTADOR MAYOR_A59 GOTO RETORNAR_RBIF_0
 * VALIDAMOS SI ES MENOR A 59, SI ES ASI ES VERDADERO

INCREMENTAR_CONTADOR MOVF CONTADOR,F BTFSC STATUS,Z CALL LCD_LINEA2
 * LA TECLA ES VALIDA ES UN RANGO DE '0' -'9'

MOVF TECLA,W CALL LCD_ENVIA_CARACTER INCF CONTADOR,F MOVLW D'1' SUBWF CONTADOR,W BTFSS STATUS,Z GOTO VERIFICAR_2 MOVF TECLA,W MOVWF C1 GOTO RETORNAR_RBIF_0 VERIFICAR_2 MOVLW D'2' SUBWF CONTADOR,W BTFSS STATUS,Z GOTO VERIFICAR_3 MOVF TECLA,W MOVWF C2 GOTO RETORNAR_RBIF_0
 * EVALUAR SI ES 1

VERIFICAR_3 MOVLW D'3' SUBWF CONTADOR,W BTFSS STATUS,Z GOTO VERIFICAR_4 MOVF TECLA,W MOVWF C3 GOTO RETORNAR_RBIF_0

VERIFICAR_4 MOVLW D'4' SUBWF CONTADOR,W BTFSS STATUS,Z GOTO RETORNAR_RBIF_0 MOVF TECLA,W MOVWF C4 ; SI YA INGRESARON 4 CARACTERES COMPARAR_C1 MOVF C1,W SUBWF V1,W BTFSS STATUS,Z GOTO CLAVE_INCORRECTA GOTO COMPARAR_C2 COMPARAR_C2 MOVF C2,W SUBWF V2,W BTFSS STATUS,Z GOTO CLAVE_INCORRECTA GOTO COMPARAR_C3 COMPARAR_C3 MOVF C3,W SUBWF V3,W BTFSS STATUS,Z GOTO CLAVE_INCORRECTA GOTO COMPARAR_C4 COMPARAR_C4 MOVF C4,W SUBWF V4,W BTFSS STATUS,Z GOTO CLAVE_INCORRECTA GOTO CLAVE_CORRECTA
 * AHORA VALIDAMNOS SI LA CLAVE ES CORRECTA

CLAVE_INCORRECTA BCF CANTONERA CALL LCD_LINEA3 MOVLW MENSAJE_INCORRECTO CALL MOSTRA_CADENA CALL Retardo_2s GOTO SALIR
 * CANTONERA=0

CLAVE_CORRECTA BSF CANTONERA CALL LCD_LINEA3 MOVLW MENSAJE_CORRECTO CALL MOSTRA_CADENA CALL Retardo_2s BCF CANTONERA GOTO SALIR

SALIR CLRF COMANDO CLRF CONTADOR CALL MENSAJE_PRESENTACION GOTO RETORNAR_RBIF_0

TERMINAR_INT

RETFIE

MENSAJE_PRESENTACION CALL LCD_BORRAR CALL LCD_CURSOR_INCREMENTO CALL LCD_CURSOR_OFF CALL LCD_LINEA1 MOVLW MENSAJE_1 CALL MOSTRA_CADENA

CALL LCD_LINEA3 MOVLW MENSAJE_5 CALL MOSTRA_CADENA RETURN

INICIO BSF STATUS,RP0 BCF STATUS,RP1 MOVLW D'6' MOVWF ADCON1 CLRF TRISA CLRF TRISC CLRF TRISD MOVLW B'11110000' MOVWF TRISB BCF OPTION_REG,7 BCF STATUS,RP0

MOVLW '1' MOVWF V1 MOVLW '2' MOVWF V2 MOVLW '3' MOVWF V3 MOVLW '4' MOVWF V4

CALL INICIAR_PANTALLA BCF CANTONERA CLRF YA_INICIO

CALL MENSAJE_PRESENTACION CALL Retardo_2s

CALL LCD_BORRAR CALL LCD_CURSOR_INCREMENTO CALL LCD_CURSOR_OFF CALL LCD_LINEA1

CALL ESPERAR_LEVANTAR_DEDO

CLRF COMANDO

BSF INTCON,RBIE BSF INTCON,GIE

PRINCIPAL SLEEP GOTO PRINCIPAL

INCLUDE  INCLUDE  INCLUDE  END

El diagrama de conexiones es el siguiente:

Los archivos se encuentran en la siguiente carpeta, pero no el programa principoal ASM, remplace por el que se encuentra en esta página.

Atentamente,

ESp. Olger Erazo De La Cruz 25 de mayo de 2011