I have been a lurker on this forum for quite a while and the old threads and answers have served to answer all my questions until now.

I am using a 12F683 processor, 3 pins are configured as ADC inputs, GPIO.2 is for serial communications and GPIO.5 is a digital output. GPIO.5 is taken high at the start of the program and remains hi unless the serial line sends an 'A' followed by a 1. Then GPIO.5 is taken low.

GPIO.5 controls the enable line on a voltage regulator (Microchip 1802T - 5V LDO regulator). When the shutdown line is high the regulator is on and pulling the line low disables the voltage regulator thus turning off the circuit. This is to provide a software means of shutting down a battery-powered circuit to maximize battery life.

The problem I have been experiencing is that the program sits at the SERIN2 command and never seems to recognize the 'A' so it never takes GPIO.5 low. I have cut the program down to its bare essentials but can't seem to figure out why it's not working. I have verified the serial input line is correctly sending the right sequence.

Code:
@ DEVICE PIC12F683, MCLR_OFF, INTRC_OSC_NOCLKOUT, WDT_ON, BOD_OFF
@ DEVICE PWRT_ON, FCMEN_OFF, IESO_OFF, PROTECT_OFF

DEFINE ADC_BITS       10
DEFINE ADC_CLOCK      3
DEFINE ADC_SAMPLEUS   200
DEFINE OSC            8

ANSEL  = %00111011
ADCON0 = %10000001
TRISIO = %0001111
OSCCON = %01100000
CMCON0 = %00000111
INTCON.7 = 0
INTCON.3 = 1

RESULT  VAR word[3]
value   var word
holding var word
i       var byte

MAIN:
     output GPIO.5
     GPIO.5 = 1
     Goto Main1

Main1:
     SERIN2 GPIO.2, 396, [WAIT("A"), value]
     if value = 1 then
       GPIO.5 = 0
     else
       if value = 2 then
         gosub GETADC
         gosub display1
       endif
     endif
     goto Main1
     end
     
display1:
     serout2 GPIO.2, 396, 10, [dec result[0], 13]
     serout2 GPIO.2, 396, 10, [dec result[1], 13]
     serout2 GPIO.2, 396, 10, [dec result[2], 13]
     return     
     end
     
GETADC:
     'average ADC over 10 cycles
     holding = 0
     for i = 1 to 10
       adcin 0, result[2]
       holding = holding + result[2]
       pause 10
     next i
     holding = holding/10
     result[2] = holding
     
     holding = 0
     for i = 1 to 10
       adcin 1, result[1]
       holding = holding + result[1]
       pause 10
     next i
     holding = holding/10
     result[1] = holding

     holding = 0
     for i = 1 to 10
       adcin 3, result[0]
       holding = holding + result[0]
       pause 10
     next i
     holding = holding/10
     result[0] = holding   
     return
     end
end
Hopefully someone else can see where I am going wrong!