After looking at http://www.rentron.com/PIC16F84.htm I thought I would try some experimenting with the serial I/O expander. Using a keypad to send the data with the [254] qualifier I am able to turn each relay on, however, I would like to be able to turn a relay on and hold it on while I am pressing the button on the keypad but as soon as I let go of the button I want the relay to turn off.
Also I am using PicBasic Pro compiler and have read through the manual but a lot of things remain unclear. Is there any supplement to this manual or other clear examples to shed some light on things like i=i+1? Here is the code I've been trying to make work the original version is www.rentron.com/PIC16F84.htm Any suggestion?

INCLUDE "bs2defs.bas"
relay VAR b3 'relay number storage variable
stat VAR b4 'relay status ON/OFF variable
serpin VAR porta.4 'serial input pin
trisa = %00010000
trisb = %00000000

loop:
SERIN serpin,N2400,[254],relay,stat
IF relay = 1 THEN outr1
IF relay = 2 THEN outr2
IF relay = 3 THEN outr3
IF relay = 4 THEN outr4
IF relay = 5 THEN outr5
IF relay = 6 THEN outr6
IF relay = 7 THEN outr7
IF relay = 8 THEN outr8
IF relay = 9 THEN outr9
IF relay = 10 THEN outr10
IF relay = 11 THEN outr11
IF relay = 12 THEN outr12
GOTO loop

outr1:
IF stat = 1 THEN high1
LOW 0: GOTO loop
high1:
HIGH 0:
gosub loop1
low 0: GOTO loop

outr2:
IF stat = 1 THEN high2
LOW 1: GOTO loop

high2:
HIGH 1:
gosub loop1
low 1: GOTO loop

outr3:
IF stat = 1 THEN high3
LOW 2: GOTO loop

high3:
HIGH 2:
gosub loop1
low 2: GOTO loop

outr4:
IF stat = 1 THEN high4
LOW 3: GOTO loop

high4:
HIGH 3:
gosub loop1
low 3: GOTO loop

outr5:
IF stat = 1 THEN high5
LOW 4: GOTO loop

high5:
HIGH 4:
gosub loop1
low 4: GOTO loop

outr6:
IF stat = 1 THEN high6
LOW 5: GOTO loop

high6:
HIGH 5:
gosub loop1
low 5: GOTO loop

outr7:
IF stat = 1 THEN high7
LOW 6: GOTO loop

high7:
HIGH 6:
gosub loop1
low 6: GOTO loop

outr8:
IF stat = 1 THEN high8
LOW 7: GOTO loop

high8:
HIGH 7:
gosub loop1
low 7: GOTO loop

outr9:
IF stat = 1 THEN high9
porta.0 = 0: GOTO loop

high9:
porta.0 = 1:
gosub loop1
porta.0 = 0: GOTO loop

outr10:
IF stat = 1 THEN high10
porta.1 = 0: GOTO loop

high10:
porta.1 = 1:
gosub loop1
porta.1 = 0: GOTO loop

outr11:
IF stat = 1 THEN high11
porta.2 = 0: GOTO loop

high11:
porta.2 = 1:
gosub loop1
porta.2 = 0: GOTO loop

outr12:
IF stat = 1 THEN high12
porta.3 = 0: GOTO loop

high12:
porta.3 = 1:
gosub loop1
porta.3 = 0: GOTO loop

loop1:
SERIN serpin,N2400,[254],relay,stat
IF relay = 1 THEN loop
IF relay = 2 THEN loop
IF relay = 3 THEN loop
IF relay = 4 THEN loop
IF relay = 5 THEN loop
IF relay = 6 THEN loop
IF relay = 7 THEN loop
IF relay = 8 THEN loop
IF relay = 9 THEN loop
IF relay = 10 THEN loop
IF relay = 11 THEN loop
IF relay = 12 THEN loop
return

I am using a 4Mhz resonator, and have set my config at XT, is this correct?
Thanks to all of you for any help.