Hello all,

This post is somewhat related to my "ADC lcd display help" post.
I guess I kinda put the cart ahead of the horse, so to speak. Can one of you fine folks take
a peek at my code (be gentle, it's my first "live" app on chip). The problem I seem to
be having is, when I un-comment the ADC portion of my code, it trashes everything else?
Any thoughts or guidance wound be great!
Code:
'****************************************************************
'*  Name    : UNTITLED.BAS                                      *
'*  Author  : Me, Silly                                         *
'*  Notice  : Copyright (c) 2009 None                           *
'*          : All Rights Reserved                               *
'*  Date    : 11/19/2009                                        *
'*  Version : 1.0                                               *
'*  Notes   : PIC16F886                                         *
'*          :                                                   *
'****************************************************************
INCLUDE "DT_INTS-14-MOD.bas"
INCLUDE "ReEnterPBP.bas"

'Clock setup
	Define OSC 8			'Set PicBasic Pro processor speed to 8 Mhz (Must match oscillator value)  
	OSCCON = %01110001 		'Internal 8 mhz Osc
'Comparator setup
	CM1CON0 = 0 			'Comparator Off
	CM2CON0 = 0 			'Comparator Off
'ADC setups
'    DEFINE ADC_BITS 10
'    DEFINE ADC_SAMPLEUS 50
'    ADCON0 = %10001001      'Fosc / 32, Select ch.2, enable ADC
'    ADCON1 = %10010000      'Right Justify, VRef = VDD
'Pin setups
    ANSEL = %00000110       'PortA: 0,1,2 = analog input
    ANSELH= %00000000
    TRISA = %00001111       'PortA: 0,1,2,3 = input, 4,5 = output
    TRISB = %00000000       'PortB: 0-7 = output
    TRISC = %10000000       'PortC: 0-6 = output, 7 = input
    TRISE = %00001111
    OPTION_REG.7 = 1        'Disable PORTB weak pull-ups
'LCD setup (20 x 4 lines)
    DEFINE LCD_LINES 4
    Define LCD_BITS 4       '4 data interface lines
    Define LCD_DREG PORTC   'LCD data port
    Define LCD_DBIT 0       'LCD data bits, pic starting pin 0 or 4
    Define LCD_RSREG PORTC  'LCD register select port
    Define LCD_RSBIT 4      'LCD register select bit
    Define LCD_EREG PORTA   'LCD enable port
    Define LCD_EBIT 6       'LCD enable bit
 'Usart setups
    DEFINE HSER_RCSTA 90h ' Enable serial port & continuous receive
    DEFINE HSER_TXSTA 20h ' Enable transmit, BRGH = 0
    DEFINE HSER_CLROERR 1 ' Clear overflow automatically
    DEFINE HSER_SPBRG 51  ' 9600 Baud @ 8MHz, 0.16%
    SPBRGH = 0
    BAUDCTL.3 = 1         ' Enable 16 bit baudrate generator
'----------------------------------------------------------------------------
 ASM
INT_LIST  macro    ; IntSource,        Label,  Type, ResetFlag?
        INT_Handler    RX_INT,  _NewSerial,   PBP,  yes
    endm
    INT_CREATE               ; Creates the interrupt processor

    INT_ENABLE   RX_INT     ; enable RX interrupt
ENDASM

'Variable setups
SerBuff var BYTE
SerInRX var PIR1.5
SerInTX var PIR1.4
Cmd var byte
CmdValBuff var word
TVal var word
HVal var word
OVal var word
ADCFlag var PIR1.6
ADCInt var PIE1.6
ADCGo var ADCON0.2
FirstStandby var bit
FirstSuspend var bit
FirstWait var bit
FirstTrack var bit
LoopCnt VAR BYTE
TorchVNow var word
TorchVAve var word
NewSerFlag var BYTE
SerGarbage var byte
ADVal VAR WORD
Quanta CON 489	'VREF/1024 = 5/1024 = .00488 = 489
VoltageDivider CON 70
ADCVolts VAR BYTE
LCDVolts VAR WORD
ADCCntTarget VAR WORD
ADCHystTarget var BYTE
TValMult CON 2926
cmdCommVal var word
OutStatus var BIT
OutNumb var BYTE
OutputMSG var bit
LCDCnt VAR BYTE

'Ports and Pins Aliases
InEnable  var PORTA.0
InIsMoving  var PORTA.3
InAnaTorch var PORTA.2
InAna1 var PORTA.1
OutUp  var PORTA.4
OutDn var PORTA.5
Out8 var PORTB.7
Out7 var PORTB.6
Out6 var PORTB.5
Out5 var PORTB.4
Out4 var PORTB.3
Out3 var PORTB.2
Out2 var PORTB.1
Out1 var PORTB.0

'Initial variable values
TVal = 120
HVal = 1
LOW Out1
LOW Out2
LOW Out3
LOW Out4
LOW Out5
LOW Out6
LOW Out7
LOW Out8
FirstStandby =1
FirstSuspend =1
FirstWait =1
FirstTrack =1
NewSerFlag = 0
ADCCntTarget=(tval*TValMult)/1000
ADCHystTarget=(Hval*TValMult)/1000

pause 500         'Uncomment this line for real-world operation
LCDout $fe, 1
LCDout $fe, 2,   "    DOWN BY FIVE    "
Lcdout $fe, $C0, "********************"
Lcdout $fe, $94, "TORCH HEIGHT CONTROL"
Lcdout $fe, $D4, "   FIRMWARE v1.00   "
pause 5000         'Uncomment this line for real-world operation
hserout ["All powered up",13,10]
LCDout $fe, 1
LCDout $fe, 2,   "LOADING DEFAULTS...."
Lcdout $fe, $C0, "LOCK TO VALUE: ",#TVal
Lcdout $fe, $94, "DEADBAND VALUE: +/-",#hVal
Lcdout $fe, $D4, "OUTS:",DEC PORTB.0,"-",DEC PORTB.1,"-",DEC PORTB.2,"-",DEC PORTB.3,"-",_
                          DEC PORTB.4,"-",DEC PORTB.5,"-",DEC PORTB.6,"-",DEC PORTB.7
pause 5000


'------------------PROGRAM---------------------

Start:
    if InEnable THEN
        gosub EnableHigh
    else
        gosub EnableLow
    endif
    SELECT CASE NewSerFlag
        CASE 1                  'T or H was received
            GOSUB CmdCommOut
            NewSerFlag = 0    
        CASE 2                  'O was received
            gosub CmdOutput
            NewSerFlag = 0    
        CASE 3                  'A was received
            GOSUB AboutDTHC
            NewSerFlag = 0
        CASE 4                  'ERROR was received
            GOSUB CMDERR
            NewSerFlag = 0            
    END SELECT    
goto Start

'------------------PROGRAM---------------------

EnableHigh:
IF InIsMoving then   '(OFF)
    FirstSuspend =1
    FirstWait =1
    FirstTrack =1
    if firststandby = 1 then
        LCDout $fe, 1                           
        LCDout $fe, 2, "STATUS:      STANDBY"        
        Lcdout $fe, $C0, "WAITING FOR A SETUP "        
        LCDout $fe, $94, " COMMAND FROM MACH3 "
        LCDout $fe, $D4, "********************"
        firststandby = 0
    ENDIF
else
    FirstStandby =1
    FirstWait =1
    FirstTrack =1
    if firstsuspend = 1 then
        LCDout $fe, 1                           
        LCDout $fe, 2, "STATUS:    SUSPENDED"        
        Lcdout $fe, $C0, "TORCH VOLTS:     XXX"
        LCDout $fe, $94, "LOCK TO VALUE:   ",#TVal    
        Lcdout $fe, $D4, "DEADBAND VALUE: +/-",#hVal   
        FIRSTSUSPEND = 0
    ENDIF
endif
return

EnableLow:
IF InIsMoving then   '(OFF)
    FirstStandby =1
    FirstSuspend =1
    FirstTrack =1
    if firstwait = 1 then
        LCDout $fe, 1                           
        LCDout $fe, 2, "STATUS:       PAUSED"        
        Lcdout $fe, $C0, "CONTROLLER:  ENABLED"
        LCDout $fe, $94, "WAITING FOR ARC XFER"    
        Lcdout $fe, $D4, "SIGNAL FROM PLASMA  "   
        FIRSTWAIT = 0
    ENDIF
else
    FirstStandby =1
    FirstSuspend =1
    FirstWait =1
'--------CONVERSION-------
'    TorchVave = 0
'    for loopcnt = 1 to 15
'        ADCGo = 1                               'Start ADC conversion
'        Not_Done:                               
'        if adcgo = 1 then not_done              'Stay here until conversion is done
'        adcin 0,ADVal                              
'        TorchVave = ADVal + TorchVave
'    next loopcnt
'    ADVal = TorchVave/15            'ADC AVERAGE COUNTS
'    GOSUB SERVOTORCH
'--------CONVERSION-------    
'	ADCVolts=(ADVal/1000)*Quanta
'	LCDVolts=ADCVolts*VoltageDivider
'		LCDout $fe, 1
'		LCDout $fe, 2,   "CURRENT READINGS ARE"
'		Lcdout $fe, $C0, "A/D VDC = ",DEC1 ADCVolts/100,".",DEC2 ADCVolts//100
'		Lcdout $fe, $94, "--------------------"
'		Lcdout $fe, $D4, "ACTUAL VDC = ",DEC3 LCDVolts/100,".",DEC2 LCDVolts//100
'    if Firsttrack = 1 then    
        LCDout $fe, 1                           
        LCDout $fe, 2, "STATUS:     TRACKING"        
'        Lcdout $fe, $C0, "TORCH VOLTS:  ",DEC3 LCDVolts/100,".",DEC2 LCDVolts//100
        LCDout $fe, $94, "LOCK TO VALUE:   ",#TVal    
        Lcdout $fe, $D4, "DEADBAND VALUE: +/-",#hVal   
        'FIRSTTRACK = 0
'    ELSE
'        Lcdout $fe, $C0 + 15,DEC3 LCDVolts/100,".",DEC2 LCDVolts//100
'    endif
endif
return

CmdOutput:
    select case oval
        case 11
            low Out1
            OutNumb=1
            OutStatus=1
            OutputMSG=1
        case 10
            high out1
            OutNumb=1
            OutStatus=0
            OutputMSG=1
        case 21
            low Out2
            OutNumb=2
            OutStatus=1
            OutputMSG=1
        case 20
            high out2
            OutNumb=2
            OutStatus=0
            OutputMSG=1
        case 31
            low Out3
            OutNumb=3
            OutStatus=1
            OutputMSG=1
        case 30
            high out3
            OutNumb=3
            OutStatus=0
            OutputMSG=1
        case 41
            low Out4
            OutNumb=4
            OutStatus=1
            OutputMSG=1
        case 40
            high out4
            OutNumb=4
            OutStatus=0
            OutputMSG=1
        case 51
            low Out5
            OutNumb=5
            OutStatus=1
            OutputMSG=1
        case 50
            high out5
            OutNumb=5
            OutStatus=0
            OutputMSG=1
        case 61
            low Out6
            OutNumb=6
            OutStatus=1
            OutputMSG=1
        case 60
            high out6
            OutNumb=6
            OutStatus=0
            OutputMSG=1
        case 71
            low Out7
            OutNumb=7
            OutStatus=1
            OutputMSG=1
        case 70
            high out7
            OutNumb=7
            OutStatus=0
            OutputMSG=1
        case 81
            low Out8
            OutNumb=8
            OutStatus=1
            OutputMSG=1
        case 80
            high out8
            OutNumb=8
            OutStatus=0
            OutputMSG=1
        case else
            OutputMSG=0
    end select
goto OutputComm
return

OutputComm:
    FirstStandby =1
    FirstSuspend =1
    FirstWait =1
    FirstTrack =1
        select case OutputMSG
            case 0
                hserout ["Invalid command!",13,10]
                LCDout $fe, 1
                LCDout $fe, 2,   "THE OUTPUT NUMBER ",#oval
                Lcdout $fe, $C0, "     IS INVALID!    "
                Lcdout $fe, $D4, "     TRY AGAIN!     "
                pause 4000
            case 1
                SELECT CASE OutStatus
                    CASE 0
                        hserout ["OUTPUT ",#OutNumb," HAS BEEN TURNED OFF",13,10]
                        LCDout $fe, 1
                        Lcdout $fe, $C0, "THE OUTPUT NUMBER ",#OutNumb
                        Lcdout $fe, $94, "HAS BEEN TURNED OFF" 
                        pause 4000
                    CASE 1
                        hserout ["OUTPUT ",#OutNumb," HAS BEEN TURNED ON",13,10]
                        LCDout $fe, 1
                        Lcdout $fe, $C0, "THE OUTPUT NUMBER ",#OutNumb
                        Lcdout $fe, $94, "HAS BEEN TURNED ON" 
                        pause 4000
                END SELECT
        end select            
return

CmdCommOut:
        FirstStandby =1
        FirstSuspend =1
        FirstWait =1
        FirstTrack =1
        IF CMD = "T" THEN
            hserout ["TORCH LOCK-TO VALUE HAS BEEN UPDATED TO ",#cmdCommVal,13,10]
            LCDout $fe, 1
            LCDout $fe, 2,   "TORCH LOCK-TO VALUE"
            Lcdout $fe, $C0, "HAS BEEN UPDATED TO:"
            Lcdout $fe, $94, "          ",#cmdCommVal
            pause 4000
        ENDIF
        IF CMD = "H" THEN
            hserout ["TORCH HYSTERESIS VALUE HAS BEEN UPDATED TO ",#cmdCommVal,13,10]
            LCDout $fe, 1
            LCDout $fe, 2,   "HYSTERESIS VALUE"
            Lcdout $fe, $C0, "HAS BEEN UPDATED TO:"
            Lcdout $fe, $94, "        +/-",#cmdCommVal
            pause 4000
        ENDIF
return   

AboutDTHC:
        FirstStandby =1
        FirstSuspend =1
        FirstWait =1
        FirstTrack =1
        hserout ["PROGRAMMED BY Kevlar",13,10,_
                 "FIRMWARE V1.00",13,10,_
                 "FILE: CHIPTEST.HEX",13,10]
        LCDout $fe, 1
        LCDout $fe, 2,   "PROGRAMMED BY Kevlar"
        Lcdout $fe, $C0, "FIRMWARE V1.00"
        Lcdout $fe, $94, "FILE: CHIPTEST.HEX"
        FOR LCDCnt = 0 TO 19
            Lcdout $fe, $D4 + LCDCnt, "."
            pause 300
        NEXT
return

CmdErr:
        FirstStandby =1
        FirstSuspend =1
        FirstWait =1
        FirstTrack =1
        hserout ["Invalid command!",13,10]
        LCDout $fe, 1
        LCDout $fe, 2,   "THE COMMAND RECEIVED"
        Lcdout $fe, $C0, "     IS INVALID!    "
        Lcdout $fe, $D4, "     TRY AGAIN!     "
        pause 4000
return

ServoTorch:
    if ADVal > ADCCntTarget + ADCHystTarget then
            high OutDn    'C.1
            low Outup     'C.0
        return
    endif
    if ADVal < ADCCntTarget - ADCHystTarget then
            high outup
            low outDn
        return
    endif
    low outup
    low outDn
return    

NewSerial:
    NewSerFlag = 1
    HSERIN [serBuff]
    if serbuff = "@" then
        HSERIN [cmd]
        SELECT CASE CMD
            CASE "T"
                HSERIN [dec3 tval]
                NewSerFlag = 1
                ADCCntTarget=(tval*TValMult)/1000
                cmdCommVal=tval
            CASE "H"
                HSERIN [dec Hval]
                NewSerFlag = 1
                ADCHystTarget=(Hval*TValMult)/1000
                cmdCommVal=hval
            CASE "O"
                HSERIN [dec2 Oval]
                NewSerFlag = 2
                cmdCommVal=oval
            CASE "A"
                NewSerFlag = 3
            CASE ELSE            
                NewSerFlag = 4
        END SELECT
    else
        sergarbage = RCREG
        NewSerFlag = 3
    ENDIF
@ INT_RETURN
Thanks again to you all. I certainly wouldn't be near this far without you!

Chris

PS. Any other comments or suggestions on streamlining the working code would be great too!