Hola que tal a todos, soy nuevo en este foro y tengo este semestre aprendiendo sobre micros, en especial del 16f84.
Tengo un proyecto que entregar acerca de una alarma con 2 sensores, un zumbador, leds de salida y con un dipswitch de 4 tengo que ingresar una clave de 4 bits para detener todo, sino, despues de 30 segundos, un led se enciende, simulando el aviso a la policía.
Lo unico que no he logrado es que reconozca la clave y prende al LED de policia. Quisiera saber si alguien puede ayudarme, aqui envio mi código.
;Jorge
;Ingenieria Electrica
;Mayo de 2009
;Este es mi proyecto final de la materia de Microcontroladores
;
;Se trata de una alarma domestica conformada por dos sensores y una clave de entrada
;y una alarma sonora y dos leds de salida
;
;CONFIGURACIONES INICIALES
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
LIST P=16F84
RADIX HEX
INCLUDE <P16F84A.INC>
;CODIGO
W EQU 0x00 ;Registro W
F EQU 0x01 ;Registro F
Z EQU 0x02 ;Es el bit2 del registro ESTADO
ESTADO EQU 0x03 ;Para facilitar comprension
PUERTOA EQU 0x05 ;Igual
PUERTOB EQU 0x06 ;Igual
CBLOCK 0x20
R_ContA ; Contadores para los retardos.
R_ContB
R_ContC
ENDC
;Programa principal
ORG 0 ;Arrancamos en direccion 0
goto INICIO ;Saltamos a la direccion 5
ORG 5 ;Para evitar el vector de interrupcion
INICIO bsf ESTADO,5 ;Vamos al banco 1
movlw 0xFF ;PuertoA como entrada
movwf PUERTOA
movlw 0xF0 ;PuertoB como entrada/salida
movwf PUERTOB
bcf ESTADO,5 ;Regresamos al banco 0
clrf PUERTOA
clrf PUERTOB
CHECATE btfss PUERTOA,0 ;Se checa el interruptor que activa o no
;la alarma
goto APAGADO
call SENS1 ;Rutinas que comprueban el estado
call SENS2 ;de los sensores
call ZUMBA ;Si pita, pita, si no, ps no
call RETARDO ;Para introducir la clave
call CLAVE
APAGADO clrf PUERTOB
goto CHECATE
;Sensor1 Switch
SENS1 btfss PUERTOA,1 ;Si esta a 1, activa el LED1
goto APAGA1 ;si no, lo apaga
goto ACT1
APAGA1 bcf PUERTOB,1
goto VOLVER1
ACT1 bsf PUERTOB,1
goto VOLVER1
VOLVER1 return
;Sensor2 Optosensor
SENS2 btfss PUERTOA,3 ;Si esta a 1, activa el LED2
goto APAGA2 ;si no, lo apaga
goto ACT2
APAGA2 bcf PUERTOB,2
goto VOLVER2
ACT2 bsf PUERTOB,2
goto VOLVER2
VOLVER2 return
;Zumbador
ZUMBA movf PUERTOA,W
andlw b'00001010' ;Asi se consigue que en W solo quede el valor de
;los sensores
btfss ESTADO,Z ;Si esta a 1, desactiva, si no, activa
goto ACTZ
goto DESACTZ
DESACTZ bcf PUERTOB,0
goto VOLVERZ
ACTZ bsf PUERTOB,0
goto VOLVERZ
VOLVERZ return
;RETARDO
RETARDO movlw d'255' ; Aporta 1 ciclo máquina. Este es el valor de "N"
goto Retardo_1Decima ; Aporta 2 ciclos máquina.
;RETARDO
Retardo_1Decima
movwf R_ContC ; Aporta 1 ciclo máquina.
R1Decima_BucleExterno2
movlw d'100' ; Aporta Nx1 ciclos máquina. Este es el valor de "M".
movwf R_ContB ; Aporta Nx1 ciclos máquina.
R1Decima_BucleExterno
movlw d'249' ; Aporta MxNx1 ciclos máquina. Este es el valor de "K".
movwf R_ContA ; Aporta MxNx1 ciclos máquina.
R1Decima_BucleInterno
nop ; Aporta KxMxNx1 ciclos máquina.
decfsz R_ContA,F ; (K-1)xMxNx1 cm (si no salta) + MxNx2 cm (al saltar).
goto R1Decima_BucleInterno ; Aporta (K-1)xMxNx2 ciclos máquina.
decfsz R_ContB,F ; (M-1)xNx1 cm (cuando no salta) + Nx2 cm (al saltar).
goto R1Decima_BucleExterno ; Aporta (M-1)xNx2 ciclos máquina.
decfsz R_ContC,F ; (N-1)x1 cm (cuando no salta) + 2 cm (al saltar).
goto R1Decima_BucleExterno2 ; Aporta (N-1)x2 ciclos máquina.
return ; El salto del retorno aporta 2 ciclos máquina.
;CLAVE
CLAVE movf PUERTOB,W
xorlw b'10000000'
btfss ESTADO,Z
goto CLAVENO
goto CLAVESI
CLAVESI clrf PUERTOB
goto VOLVERC
CLAVENO bsf PUERTOB,3 ;LED DE AVISO A POLICIA
goto VOLVERC
VOLVERC return
END
Saludos a todos