TRISA = 31
TRISB = 0
LED1 VAR PORTB.0
LED2 VAR PORTB.1
LEDA VAR PORTB.2
reles var byte[2]
rele1 var byte[2]
rele2 var byte[2]
rele3 var byte[2]
abrir var byte[2]
comp var byte[2]
rele var byte[2]
abre var byte[2]
i var byte
porta=0
INICIO:
RELES[0]="R" : RELES[1]="E"
RELE1[0]="R" : RELE1[1]="1"
RELE2[0]="R" : RELE2[1]="2"
RELE3[0]="R" : RELE3[1]="3"
ABRIR[0]="A" : ABRIR[1]="B"
SELECT CASE PORTA
CASE %00000
GOSUB ALLOF
CASE %00001
COMP[0]="R" : COMP[1]="E"
RELE[0]="R" : RELE[1]="1"
ABRE[0]="A" : ABRE[1]="B"
GOSUB COMPARA
CASE %00010
COMP[0]="R" : COMP[1]="E"
RELE[0]="R" : RELE[1]="1"
ABRE[0]="C" : ABRE[1]="E"
GOSUB COMPARA
CASE %00100
COMP[0]="R" : COMP[1]="E"
RELE[0]="R" : RELE[1]="2"
ABRE[0]="A" : ABRE[1]="B"
GOSUB COMPARA
CASE %01000
COMP[0]="R" : COMP[1]="E"
RELE[0]="R" : RELE[1]="2"
ABRE[0]="C" : ABRE[1]="E"
GOSUB COMPARA
CASE %10000
GOSUB ERROR
END SELECT
goto inicio
ALLOF:
PORTB=0
RETURN
COMPARA:
for i=0 to 1
if comp[i] <> reles[i] then
goto nomatch
' else
' high led1
' pause 500
' low led1
' pause 500
endif
next i
for i=0 to 1
if rele[i] <> rele1[i] then
goto nomatch
' else
' high led1
' pause 500
' low led1
' pause 500
endif
next i
for i=0 to 1
if abre[i] <> abrir[i] then
goto nomatch
else
goto hled1
endif
next i
return
nomatch:
high leda
pause 500
low leda
pause 500
goto inicio
hled1:
portb=255
return
error:
high leda
pause 500
low leda
pause 500
return