Professional Documents
Culture Documents
Esta es una carradura electrónica cuya combinación es de 4 digitos, dicho código se puede cambiar
cuando el usuario lo desee, el circuito opera con un relay a su salida, osea que se puede conectar cargas de
CC o CA de hasta 10A, como al ingresar el código el rele permanece activado por tiempo indefinido o
hasta que se ingrese de nuevo el mismo código, se pude pensar en muchas aplicaciones.
El código que se cambia se guarda en la memoria EEPROM interna del microcontrolador, asi cuando se
va la energía permenece el mismo código no se borra fácilmente.
FILA4
FILA3
FILA2
FILA1
COL3
COL2
COL1 (se identifica con una línea blanca)
Para validar un dato se aplica el símbolo “#” que hace la función de Enter.
Para grabar un nuevo número se hace uso del símbolo “*”.
list p=16f84a
#include <p16F84a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
ORG 0x2100
de "123456"
vectors ORG 0
goto main
nop
nop
nop
retfie
keytable movf keycode, W ;rutina que define los digitos del teclado
addwf PCL, F
dt 0x60
dt "123a"
dt "456b"
dt "789c"
incf FSR, F
incf EEADR, F
movlw cod_end
subwf FSR, W
bnz eep_0
return
incf FSR, F
incf EEADR, F
return
decfsz dcnt0, F
goto udelay0
return
movlw 0xfe
tris PORTA
movlw 4
movwf colcnt
colscan incf keycode, F
rrf colstatus, F
btfss STATUS, C
goto keytable
decfsz colcnt, F
goto colscan
bsf STATUS, C
decfsz rowcnt
goto rowscan
retlw 0
pulseout btfss uno,2 ;activación del rele, hasta que se pulse de nuevo el código
goto desact
clrf PORTB
bsf PORTB,2
clrf uno
goto loop
desact bsf uno,2
clrf PORTB
goto loop
codechange movlw 2 ;cambio de código?
movwf PORTB
call read
movlw cod
call copybuf
call read
movlw cod
call compbuf
bnz warm
call eep_write
goto loop
readloop clrw
tris PORTA
movf PORTB, W
andlw 0xf0
xorlw 0xf0
btfss STATUS, Z
goto readloop
movlw 0xf0
call udelay
movf PORTB, W
movlw 1<<RBIE
movwf INTCON
sleep
movlw 0xf0
call udelay
movlw clen
subwf readlen, W
bnz read_notfull
call read_chkenter
bnz read_notenter
movlw 0x40
call beep
movf keycode, W
return
decf readlen, F
movlw 0x40
call beep
movlw readbuf
addwf readlen, W
movwf FSR
movf keycode, W
movwf INDF
incf readlen, F
goto readloop
movf tmptr, W
addwf readlen, W
movwf FSR
btfss STATUS, Z
return
incf readlen, F
movlw clen
subwf readlen, W
bnz comp0
return
copybuf movwf tmptr
clrf readlen
copy0 movlw readbuf
addwf readlen, W
movwf FSR
movf INDF, W
movwf tmbyte
movwf FSR
movf tmbyte, W
movwf INDF
incf readlen, F
movlw clen
subwf readlen, W
bnz copy0
return