I changed TRISIO, put brackets around the [val] variable and changed addr to a word sized variable .When I start up the microcontroller it sends the first serial out command to the computer but when I send a serial command to the microcontroller from the pc the microcontroller goes into a loop and repeats the first serial command non stop until I disconnect the power.

Code:
define OSC 4
Define CHAR_PACING 1000

CMCON0 = 7
ANSEL  = %00000000
TRISIO = %00000010

cont  con %10100000
scl   var GPIO.5
sda   var GPIO.4
sout  var GPIO.2
sein  var GPIO.1
addr  var word
wr    var byte
val   var byte

Main:

serout sout, 6, ["To write to EEPROM press w", 13, "To read EEPROM press r", 13]
    serin sein, 6, wr
    if (wr = "w") then goto ewrite 
    if (wr = "r") then goto eread
    goto main 
               
ewrite:

serout sout, 6, ["Write", 13]
serout sout, 6, ["Enter address 0 - 15", 13]
serin sein, 6, addr
serout sout, 6, ["Enter value 0 - 255", 13] 
serin sein, 6, val

i2cwrite sda, scl, cont, addr, [val]
pause 10

serout sout, 6, ["Write complete", 13]
goto main

eread:

serout sout, 6, ["Read", 13]
serout sout, 6, ["Enter address 0 - 15", 13]
serin sein, 6, addr

i2cread sda, scl, cont, addr, [val]
pause 10

serout sout, 6, [#val, 13]
serout sout, 6, ["Read complete", 13]
goto main