I am glad that finaly your program works as you wanted. Make sure to add the two corrections in red, to your code, otherwise you could experiment some wierd behaviour.

Al.


Code:
Include "modedefs.bas"
define osc 4
PORTA = 1
PORTB = 0

KEY VAR BIT [7]
KEY1 VAR BIT [7]
ADR VAR BYTE
COD VAR BYTE
SYMBOL SCLK = PORTB.0
SYMBOL SDAT = PORTB.1
SYMBOL BUZ  = PORTB.2
SYMBOL LED1 = PORTB.4
SYMBOL RELY = PORTB.3
SYMBOL STRT = PORTA.0
SYMBOL UNLCK = PORTA.1
SYMBOL BLCK = PORTA.2

START:
IF STRT = 0 THEN GOSUB SCAN
IF BLCK = 0 THEN GOTO ANGRY 
IF STRT = 1  THEN
HIGH LED1
PAUSE 100
LOW LED1
IF STRT = 0 THEN GOSUB SCAN
IF BLCK = 0 THEN GOTO ANGRY 
PAUSE 100
ENDIF
GOTO START

SCAN:
FOR ADR = 0 TO 7
I2CREAD SDAT,SCLK,$A0,ADR,[KEY]
READ ADR,KEY1
IF KEY != KEY1 THEN ERROR   ' Not GOSUB ERROR
IF (KEY == KEY1) THEN COD = 1
IF RELY = 1 THEN  SEROUT LED1,N2400,["ITS UNLOCKED HERO"]
NEXT ADR
PAUSE 10
RELY = COD 
PAUSE 2000
LOW RELY
RETURN

ANGRY:
SOUND BUZ,[102,75]
HIGH LED1
PAUSE 1000
SLEEP 30
NOP
SOUND BUZ,[102,75]
PAUSE 1000
GOTO START

ERROR:
LOW RELY
SOUND BUZ,[102,75]
PAUSE 1000
HIGH LED1
PAUSE 1000
LOW LED1 
PAUSE 1000
SOUND BUZ,[102,75]
HIGH LED1
SOUND BUZ,[102,75]
SLEEP 10 
RETURN     ' Not GOTO START

END 
DATA @0,$14,$21,$47,$56,$02,$11,$22,$33
'