¿Me podrían decir si está correcto el programa?
; El sistema controla tres entradas, para accionar sobre cinco salidas.
;
;
; ZONA DE DATOS **********************************************************************
LIST P=16F84A
INCLUDE <P16F84A.INC>
INCLUDE <RETARDOS.INC>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
CBLOCK 0x0C ; En esta posición empieza la RAM de usuario.
ENDC
;
; ZONA DE CÓDIGOS *******************************************************************
ORG 0
;--- configuramos puertos
bsf h'03',5 ;Ponemos a 1 el bit 5 del registro status
MOVLW b'11111111' ;cargamos en w '11111111'
movwf h'05' ;Configuramos TRISA (05h) como entradas
movlw b'00000000' ;Cargamos 0 en w
movwf h'06' ;Configuramos TRISB (06H) como salidas
bcf h'03',5 ;Ponemos a 0 el bit 5 de STATUS y pasamos a bank0
;----- INICIO DE PROGRAMA PRINCIPAL --------
Inicio
btfsc porta,ra0 ;si A0 es cero salta la proxima línea
goto manual ;pasa el sistema a manual, con la rutina manual, desactivando electromagnética por RB2 y alarma por RB1
btfsc porta,ra1 ;si A1 es cero salta la proxima línea
goto acceso ;permiso concedido, activando RB1 para desarmar alarma y RB2 para desactivar la CEM.
btfsc porta,ra2 ;si A2 es cero salta la proxima línea
goto alarma ;activa sistema de alarma, con la rutina alarma. activando buzzer por RB3 y alarma por RB1.
movlw b'00000000' ;cargamos en w '00000000'
movwf trisb ;sistema en reposo
goto inicio ;vuelve a testear entradas
manual
movlw b'01100000' ;cargamos en w '01100000'
movwf trisb ;activamos RB1 y RB2
goto inicio ;vuelve a testear entradas
acceso
movlw b'01101000' ;cargamos en w '01101000'
movwf trisb ;activamos RB1, RB2 y RB5(motorizada)
call Retardo_5s ;retardo de 5 segundos
btfss porta,ra1 ;si A1 es uno salta la proxima línea
goto inicio ;inicio del programa
goto buzzer ;Vamos a la subrutina buzzer
goto inicio ;Vuelve a sensar las tres entradas
buzzer
movlw b'01110000' ;cargamos en w '01110000'
movwf trisb ;activamos RB1, RB2 y RB3 (desarme alarma, desactivacion CEM,activa BZ)
call Retardo_200ms ;200ms BZ on
call Retardo_200ms ;200ms BZ on
movlw b'01100000' ;cargamos en w '01100000'
movwf trisb ;activamos RB1 y RB2 apagamos BZ
call Retardo_200ms ;200ms BZ off
call Retardo_100ms ;100ms BZ off
btfsc porta,ra1 ;si A1 es cero salta la proxima línea
goto buzzer ;continua subrutina de buzzer
return
Alarma
call Retardo_100ms ;100ms de demora
btfss porta,ra2 ;si A2 es uno salta la proxima línea
goto inicio ;vuelve a sensar entradas
movlw b'10010000' ;cargamos en w '10010000'
movwf trisb ;activamos RB0 (dispara alarma) y RB3 encendemos BZ
goto inicio
END