Hey all, another newbie question.

I'm trying to run a servo (later to be expanded to 2 servos) with timer1 interrupts. The program compiles nicely, but never gets to the interrupt routine. I've never used interrupts or the timer before, but I've read all that I can, and just can't figure it out.

I'm running on the 16F690

Here's my code:

Code:
define OSC 4
ON INTERRUPT GOTO INTCODE


DEFINE HSER_TXSTA 20h       'SET THE TRANSMIT REGISTER TO TRANSMITTER ENABLED
DEFINE HSER_BAUD 2400       'SET BAUD RATE
                            'DEFINE ADCIN PARAMETERS
Define ADC_BITS	10          'SET NUMBER OF BITS IN RESULT
Define ADC_CLOCK 3          'SET CLOCK SOURCE (3=RC)
Define ADC_SAMPLEUS 50	    'SET SAMPLEING TIME IN uS
define LOADER_USED 1

SELECTOR    VAR BYTE        'SELECTS PROGRAM TYPE
TEMP        VAR WORD        'TEMPORY VARIABLE FOR ANY USE
POSITION    VAR WORD        'POSITION OF SERVO1 1250 - 2500
OFFWIDTH    VAR WORD        'HOW LONG THE PULSE NEEDS TO BE OFF FOR
FREQ        VAR WORD        'FREQUENCY TO RUN THE SERVOS AT
PICOSC      VAR BYTE BANK0  'TO STORE OSCILLATOR FREQUENCY IN
PERIOD      VAR WORD        'TEMPORY VARIABLE TO DISPLAY THE PERIOD OF PULSE
PRESCALER   VAR WORD        'STORES THE TIMER1 PRESCALER VALUE
TMROFF      VAR WORD        'STORES THE TIME THAT THE SERVO1 PULSE WILL BE LOW
RUN         VAR BIT         'IS THE PROGRAM RUNNING

SERVO1      var PORTA.0     'OUTPUT PIN FOR SERVO1
STARTSTOP   VAR PORTB.6     'INPUT PIN FOR PUSHBUTTON
TRISB.4 = 1                 'INPUT FOR SELECTOR SWITCH PIN 13
TRISA.0 = 0                 'MAKES PIN 19 AN OUTPUT FOR SERVO1
TRISB.6 = 1                 'MAKES PIN 11 AN INPUT FOR PUSHBUTTON

PRESCALER = 8               'DEFINES THE TIMER1 PRESCALER AS 18
FREQ = 50                   'CONSTANT FREQUENCY FOR THE SERVOS
RUN = 0                     'TEMPORARY VARIABLE FOR SERVO RUNNING

T1CON  = %00110000          'SETS THE TIMER1 VALUES - PRESCALER = 8
GIE         var INTCON.7
PEIE        var INTCON.6
TMR1IE      var PIE1.0
TMR1ON      var T1CON.0
  
ADCON1 = %10000010          'SET PORTA ANALOGUE AND RIGHT JUSTIFY THE RESULT

GOSUB GETOSC 

MAINLOOP
        GOSUB FINDPROGRAM
        GOSUB STARTPULSE
        'GOSUB STOPPULSE
GOTO MAINLOOP

FINDPROGRAM                'SELECTS BETWEEN SEVERAL TYPES OF MOTION
    ADCIN 10, TEMP          'READ CHANNEL 10 TO TEMP
    IF TEMP = 15000 THEN POSITION = 125                    'USES VOLTAGE DIVIDER TO
    IF TEMP  15000 AND TEMP = 22000 THEN POSITION = 150   'VARY THE VOLTAGE ON CH10.
    IF TEMP  22000 AND TEMP = 35000 THEN POSITION = 175   'THIS CONVERTS AND STORES
    IF TEMP  35000 AND TEMP = 47000 THEN POSITION = 200   'TO 'TEMP'.
    IF TEMP  47000 AND TEMP = 60000 THEN POSITION = 225   
    IF TEMP  60000 THEN POSITION = 250
    GOSUB SETPULSE   
RETURN

DISABLE INTERRUPT
INTCODE
    IF SERVO1 = 0 THEN
        TMR1H = ((65535 - POSITION)256)            'EXTRACT HIGH BYTE INTO TIMER1
        TMR1L = ((65535 - POSITION)-(TMR1H256))    'EXTRACT LOW BYTE
        HSEROUT [HIGH , DEC TMR1H, LOW , DEC TMR1L,10,10,13]
        HIGH SERVO1
    ENDIF
    
    IF SERVO1 = 1 THEN
        TMR1H = ((65535 - TMROFF)256)              'EXTRACT HIGH BYTE INTO TIMER1
        TMR1L = ((65535 - TMROFF)-(TMR1H256))      'EXTRACT LOW BYTE
        HSEROUT [HIGH , DEC TMR1H, LOW , DEC TMR1L,10,10,13]
        LOW SERVO1
    ENDIF
RESUME
ENABLE INTERRUPT

SETPULSE
    POSITION = POSITION MIN 250  'MIN POSITION LIMITED TO 0 DEGREES
    POSITION = POSITION MAX 125  'MAX POSITION LIMITED TO 180 DEGREES
    HSEROUT [POSITION = ,DEC POSITION,10,13]
    TMROFF = (((((10000  FREQ)  10)  PRESCALER)10) - POSITION)
    'HSEROUT [TMROFF = ,DEC TMROFF,10,10]
    'PERIOD = TMROFF + POSITION
    'HSEROUT [PERIOD = ,DEC PERIOD,10,10]
    
RETURN

STARTPULSE
    HSEROUT [PULSE STARTED,10,10]
    LOW SERVO1
    GIE = 1             'GLOBAL INTERRUPT ENABLE
    PEIE = 1            'PERIPHRIAL INTERRUPT ENABLE
    TMR1H = 255         'SETS TIMER1 TO 65535 
    TMR1L = 255         'NEXT TICK WILL INTERRUPT
    TMR1ON = 1
RETURN

STOPPULSE
    HSEROUT [PULSE STOPPED,10,10]
    LOW SERVO1
    PEIE =0
RETURN

GETOSC

asm
    ifdef OSC
       MOVECB   OSC, _PICOSC
    else
       MOVECB   4, _PICOSC
    endif
endasm
RETURN

END
Thanks for any help, the learning curve seems steep at times.