Bueno, éste código todavía no lo he probado ya que lo he modificado un poquitín respecto al anterior. Solo le tocado un poco la parte de los goto y gosub, así es posible que continue haciendo lo mismo, en cualquier caso aquí está:
include "bs2defs.bas"
define OSC 8
define LOADER_USED 1
'ADCON1=7
TRISD = 255
TRISB = 0
rele_out1 VAR PORTB.0
rele_out2 VAR PORTB.2
alarm VAR PORTB.4
RX var portd.4
TX var portd.5
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]
ntelef var byte[11]
i var byte
portd=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"
'serin2 RX,84,1000,INICIO,[wait("+CMT"),wait("+"),str ntelef\11,wait("X"),str comp\2]
serin2 RX,84,1000,INICIO,[wait("X"),str comp\2]
COMPARA:
for i=0 to 1
if comp[i] <> reles[i] then
goto error
endif
next i
serin2 RX,84, [str rele\2]
for i=0 to 1
if rele[i] <> rele1[i] then
goto rel2
endif
next i
serin2 RX,84, [str abre\2]
for i=0 to 1
if abre[i] <> abrir[i] then
gosub cerrar1
else
gosub abrir1
endif
next i
rel2:
for i=0 to 1
if rele[i] <> rele2[i] then
goto rel3
endif
next i
serin2 RX,84, [str abre\2]
for i=0 to 1
if abre[i] <> abrir[i] then
gosub cerrar2
else
gosub abrir2
endif
next i
rel3:
for i=0 to 1
if rele[i] <> rele2[i] then
goto error
endif
next i
goto inicio
abrir1:
high rele_out1
return
cerrar1:
low rele_out1
return
abrir2:
high rele_out2
return
cerrar2:
low rele_out2
return
error:
high alarm
pause 500
low alarm
pause 500
goto inicio
Un saludo.