Darrel may be better placed to answer this one, Having setup interupts for timer 2 and timer 4, programme is not jumping out out to service timer4 interrupt.

Could you check if it is something I am doing wrong or if its something else.

Device is 18F46K22

Cheers,
Tim.

Code:
'PIC 18F46K22
'PROGRAMME WITH HS OSC
'                MCLR ENABLED
'                PLL no multiply
'                BORV 2.5v


'Ver 1
'First write of code


'================================================
'    Constants and Defines
'================================================
DEFINE OSC 20                                    '20 Mhz resonator


B9600_H        con 2
B9600_L        CON 8
PRELOAD        CON 60542                            'MAKES TIMER 1 TICK AT 1 MSEC PERIODS
LOOP_TIME    CON 1000                            '1000 Msec TICK
INT_PERIOD    CON 1                                'PERIOD BETWEEN INTERRUPTS IN MSEC

'================================================
'    Bit Variables
'================================================
RX_FLAG1    VAR BIT
TX_FLAG1    VAR BIT
RX_FLAG2    VAR BIT
TX_FLAG2    VAR BIT
TICK        VAR BIT
TEMPA        VAR BIT
TEMPB        VAR BIT
DTA1_TOUT_FLAG    VAR BIT
DTA2_TOUT_FLAG    VAR BIT

'================================================
'    Byte Variables
'================================================
PRELOADH     VAR BYTE                            'HIGH BYTE USED TO RESET TIMER 1
PRELOADL     VAR BYTE                            'LOW BYTE USED TO RESET TIMER 1
TX_BYTE        VAR BYTE
HEAD_NO        VAR BYTE
HEAD         VAR BYTE                            'Incoming Head address number
FUNC         VAR BYTE                            'Function to perform
PAN         VAR BYTE                            'Pan value
TILT         VAR BYTE                            'Tilt value
ZOOM         VAR BYTE                            'Zoom value
FOCUS         VAR BYTE                            'Incoming Focus value
HEAD_NEW    VAR BYTE
FUNC_NEW    VAR BYTE
PAN_NEW        VAR BYTE
TILT_NEW    VAR BYTE
ZOOM_NEW    VAR BYTE
FOCUS_NEW    VAR BYTE
FUNC_OUT1    VAR BYTE
FUNC_OUT2    VAR BYTE
ZOOM_OUT    VAR BYTE
FOCUS_OUT    VAR BYTE
ERROR_OUT1    VAR BYTE
ERROR_OUT2    VAR BYTE
TXBYTE1        VAR BYTE
TXBYTE2        VAR BYTE
VALID        VAR BYTE
GASH        VAR BYTE
FUNC_IN        VAR BYTE
DATR1        VAR BYTE
DATR2        VAR BYTE
DATR3        VAR BYTE
DATR4        VAR BYTE
DATR5        VAR BYTE
TEMP1        VAR BYTE
TEMP2        VAR BYTE
TEMP3        VAR BYTE
iTEMP1        VAR BYTE
iTEMP2        VAR BYTE
RX1_1 VAR BYTE : RX1_2 VAR BYTE : RX1_3 VAR BYTE : RX1_4 VAR BYTE : RX1_5 VAR BYTE
RX1_6 VAR BYTE : RX1_7 VAR BYTE : RX1_8 VAR BYTE : RX1_9 VAR BYTE
RX2_1 VAR BYTE : RX2_2 VAR BYTE : RX2_3 VAR BYTE : RX2_4 VAR BYTE : RX2_5 VAR BYTE
RX2_6 VAR BYTE : RX2_7 VAR BYTE : RX2_8 VAR BYTE : RX2_9 VAR BYTE
TX1_1 VAR BYTE : TX1_2 VAR BYTE : TX1_3 VAR BYTE : TX1_4 VAR BYTE : TX1_5 VAR BYTE
TX1_6 VAR BYTE : TX1_7 VAR BYTE : TX1_8 VAR BYTE : TX1_9 VAR BYTE
PAN_DEMAND    VAR BYTE
STEP_FLAG    VAR BYTE

'================================================
'    Word Variables
'================================================
N             VAR WORD        'General variable
uSEC        VAR WORD
MSEC        VAR WORD
TEMP10        VAR WORD
DTA1_TOUT    VAR WORD
DTA2_TOUT    VAR WORD
TILT_DEMAND    VAR WORD
PAN_OFF_TIME VAR WORD
P_INTVAL    VAR BYTE
TIME        VAR WORD

'================================================
'    Register Variables
'================================================
ADFM        VAR ADCON2.7    'right justified number format
FERR1        VAR RCSTA1.2
OERR1        VAR RCSTA1.1
CREN1        VAR RCSTA1.4
TRMT1        VAR TXSTA1.1
TX1iF        VAR PIR1.4
RC1IF        VAR PIR1.5
FERR2        VAR RCSTA2.2
OERR2        VAR RCSTA2.1
CREN2        VAR RCSTA2.4
TRMT2        VAR TXSTA2.1
TX2iF        VAR PIR3.4
RC2IF        VAR PIR3.5
TMR0IF        VAR INTCON.2
GIE            VAR INTCON.7


'================================================
'    Port Variables
'================================================
'             VAR PORTA.0        'D O not used
'            VAR PORTA.1        'D O not used
LDTA_EN        VAR PORTA.2        'D O lens data out EN. High for data out to Lens
CDTA_EN        VAR PORTA.3        'D O Cable data out EN. High for data out to RS485
TRIGGER        VAR PORTA.4        'D I Focus hold/trigger active. Low for active
'            VAR PORTA.5        'D O not used
'            VAR PORTA.6        'D I used for XTAL
'            VAR PORTA.7        'D I used for XTAL

'             VAR PORTB.0        'D O not used
'            VAR PORTB.1        'D O not used
PAN_SLEEP    VAR PORTB.2        'D O PAN Sleep. High to run
TILT_SLEEP    VAR PORTB.3        'D O TILT Sleep. High to run
'            VAR PORTB.4        'D O not used
'            VAR PORTB.5        'D O not used
'            VAR PORTB.6        'D O ICSP
'            VAR PORTB.7        'D O ICSP

PAN_MS2         VAR PORTC.0        'D O PAN MS2
PAN_EN        VAR PORTC.1        'D O PAN Enable
PAN_STEP    VAR PORTC.2        'D O PAN Step
PAN_DIR        VAR PORTC.3        'D O PAN Direction
TILT_DIR    VAR PORTC.4        'D O TILT Direction
TILT_MS1    VAR PORTC.5        'D O TILT MS1
'            VAR PORTC.6        'D I Hardware data out to camera
'            VAR PORTC.7        'D I Hardware data in from camera

PAN_MS1     VAR PORTD.0        'D O PAN MS1
TILT_MS2    VAR PORTD.1        'D O TILT MS2
TILT_EN        VAR PORTD.2        'D O TILT Enable
TILT_STEP    VAR PORTD.3        'D O TILT Step
REN            VAR PORTD.4        'D O RS485 Receive EN. Receive active low
TEN            VAR PORTD.5        'D O RS485 Transmit EN. Transmitter active high
'            VAR PORTD.6        'D I Hardware data out (RS485/LENS)
'            VAR PORTD.7        'D I Hardware data in (RS485)

LED2         VAR PORTE.0        'D O LED2
'            VAR PORTE.1        'D O not used
'            VAR PORTE.2        'D O not used

'================================================
INCLUDE "DT_INTS-18.bas"     ; Base Interrupt System
INCLUDE "ReEnterPBP-18.bas"     ; Include if using PBP interrupts
ASM
INT_LIST  macro    ; IntSource,        Label,  Type, ResetFlag?
        INT_Handler    RX1_INT,  _SERIALIN1,   PBP,  no
        INT_Handler    TX1_INT,  _SERIALOUT1,  PBP,  no
        INT_Handler    RX2_INT,  _SERIALIN2,   PBP,  no
        INT_Handler    TX2_INT,  _SERIALOUT2,  PBP,  no
        INT_Handler    TMR1_INT, _COUNTER1,    PBP,  yes
        INT_Handler    TMR2_INT, _COUNTER2,    PBP,  yes
        INT_Handler    TMR4_INT, _COUNTER4,    PBP,  yes
    endm
    INT_CREATE               ; Creates the interrupt processor
ENDASM

'================================================
'    Programme Runs From Here
'================================================
INIT:        TRISA =%11010000                    'PortA ins & outs
            TRISB =%00000000                    'PortB ins & outs
            TRISC =%11000000                    'PortC ins & outs
            TRISD =%11000000                    'PORTD ins & outs
            TRISE =%00000000                    'PORTE ins & outs
            
            ANSELA =0                            'porta as digital
            ANSELB =0                            'portb as digital
            ANSELC =0                            'portc as digital
            ANSELD =0                            'portd as digital
            ANSELE =0                            'porte as digital
            
            'Setup internal variables
            TICK =0                                'interval flag
            RX_FLAG1 =0                            'packet received flag
            TX_FLAG1 =0
            RX_FLAG2 =0                            'packet received flag
            TX_FLAG2 =0
            uSEC =0                                
            MSEC =0
            DTA1_TOUT =0
            DTA2_TOUT =0
            DTA1_TOUT_FLAG =0
            DTA2_TOUT_FLAG =0
            P_INTVAL =0
            PAN_DEMAND =0
            
            'Setup idle state for ports
            PAN_EN =1                             '1 = DISABLED
            PAN_SLEEP =0
            PAN_MS1 =0                            '00 = FULL STEP
            PAN_MS2 =0                            '00 = FULL STEP
            PAN_STEP =0                            'IDLE
            PAN_DIR =0                            '
            TILT_EN =1                             '1 = DISABLED
            TILT_SLEEP =0
            TILT_MS1 =0                            '00 = FULL STEP
            TILT_MS2 =0                            '00 = FULL STEP
            TILT_STEP =0                        'IDLE
            TILT_DIR =0                            '
            LED2 =0
            REN =0                                'RS485 RECEIVE ENABLE
            TEN =0                                'RS485 TRANSMIT DISABLE
            LDTA_EN =0                            'LENS DATA OUT =OFF
            CDTA_EN =0                            'CABLE DATA OUT =OFF
            
            'Setup serial port
            RCSTA1 = %10010000                    ' Enable serial port & continuous receive
            TXSTA1 = %00100100                    ' Enable transmit, BRGH = 1
            BAUDCON1.3 = 1                         ' Enable 16 bit baudrate generator
            SPBRGH1 = B9600_H
            SPBRG1 =  B9600_L                    
            
            RCSTA2 = %10010000                    ' Enable serial port & continuous receive
            TXSTA2 = %00100100                    ' Enable transmit, BRGH = 1
            BAUDCON2.3 = 1                         ' Enable 16 bit baudrate generator
            SPBRGH2 = B9600_H
            SPBRG2 =  B9600_L                    
            
            'Setup internal timer1
            T1CON =%00000001                    'CONFIGURES TIMER1 TO INT CLOCKING, DIVIDER = 1
            PRELOADH =PRELOAD /$100
            PRELOADL =PRELOAD //$100
            
            'Setup internal timer2
            T2CON =%01111111
            PR2 =255
            
            'Setup internal timer4
            T4CON =%01111111
            PR4 =255
            
            'Switch on interrupts
            @ INT_ENABLE  TMR1_INT        ; enable Timer 1 interrupts
            @ INT_ENABLE  TMR2_INT        ; enable Timer 2 interrupts
            @ INT_ENABLE  TMR4_INT        ; enable Timer 4 interrupts
            @ INT_ENABLE  RX1_INT        ; enable Async RX 1 interrupts
            @ INT_ENABLE  RX2_INT        ; enable Async RX 2 interrupts
            
            'Re-load variables
            VALID =0                            'EEPROM data validity flag
            GOSUB READ_SETTINGS                    'reload from eeprom
            IF VALID <>1 THEN GOSUB RESTORE        'first time load of default values
            
            'Flash LED's
            FOR TEMP3 =1 TO 3
                LED2 =1
                PAUSE 200
                LED2 =0
                PAUSE 300
            NEXT
            
            PAN_SLEEP =1                        'Wake up stepper driver
            TILT_SLEEP =1                        'wake up stepper driver
            GOTO MAIN
            
'================================================
'------ SUBROUTINES -----------------------------
'================================================
READ_SETTINGS:    
            READ  0,VALID
            RETURN

'================================================
RESTORE:    VALID =1
            
WRITE_SETTINGS:    
            GIE =0
            WRITE  0,VALID
            GIE =1
            RETURN

'================================================
'INTERRUPT ROUTINES HERE
'================================================    
SERIALIN1:    IF FERR1 THEN
                GASH =RCREG1
                GOTO INT_END
            ENDIF
            
            RX1_9 =RX1_8                        'H
            RX1_8 =RX1_7                        '*
            RX1_7 =RX1_6                        'FUNC_IN
            RX1_6 =RX1_5                        'DATR1
            RX1_5 =RX1_4                        'DATR2
            RX1_4 =RX1_3                        'DATR3
            RX1_3 =RX1_2                        'DATR4
            RX1_2 =RX1_1                        'DATR5
            RX1_1 =RCREG1                        'ERROR
            
            IF RX1_9 ="H" AND RX1_8 ="*" THEN
                ITEMP2 =(RX1_7 + RX1_6 + RX1_5 + RX1_4 + RX1_3 + RX1_2) ^$FF
                IF ITEMP2 = RX1_1 THEN D_OK1
            ENDIF
            GOTO INT_END
            
D_OK1:        FUNC_IN  =RX1_7
            DATR1  =RX1_6
            DATR2  =RX1_5
            DATR3  =RX1_4
            DATR4  =RX1_3
            DATR5  =RX1_2
            RX_FLAG1 =1
            DTA1_TOUT =400
            RX1_8 =0
            RX1_7 =0
            RX1_6 =0
            RX1_5 =0
            RX1_4 =0
            RX1_3 =0
            RX1_2 =0
            RX1_1 =0
            GOTO INT_END
            
'================================================
SERIALIN2:    IF FERR2 THEN
                GASH =RCREG2
                GOTO INT_END
            ENDIF
            
            RX2_9 =RX2_8                        'D
            RX2_8 =RX2_7                        '*
            RX2_7 =RX2_6                        'HEAD
            RX2_6 =RX2_5                        'FUNC
            RX2_5 =RX2_4                        'PAN
            RX2_4 =RX2_3                        'TILT
            RX2_3 =RX2_2                        'ZOOM
            RX2_2 =RX2_1                        'FOCUS
            RX2_1 =RCREG2                        'ERROR
            
            IF RX2_9 ="D" AND RX2_8 ="*" THEN
                ITEMP2 =(RX2_7 + RX2_6 + RX2_5 + RX2_4 + RX2_3 + RX2_2) ^$FF
                IF ITEMP2 = RX2_1 THEN D_OK2
            ENDIF
            GOTO INT_END
            
D_OK2:        HEAD_NEW  =RX2_7
            FUNC_NEW  =RX2_6
            PAN_NEW   =RX2_5
            TILT_NEW  =RX2_4
            ZOOM_NEW  =RX2_3
            FOCUS_NEW =RX2_2
            RX_FLAG2 =1
            DTA2_TOUT =400
            RX2_8 =0
            RX2_7 =0
            RX2_6 =0
            RX2_5 =0
            RX2_4 =0
            RX2_3 =0
            RX2_2 =0
            RX2_1 =0
            GOTO INT_END

'================================================
SERIALOUT1:    LOOKUP2 TXBYTE1,["H", "*", FUNC_OUT1, DATR1, DATR2, DATR3, DATR4, DATR5, ERROR_OUT1],TXREG1
            TXBYTE1 =TXBYTE1 +1
            IF TXBYTE1 >= 9 THEN
                @ INT_DISABLE  TX1_INT
            ENDIF
            GOTO INT_END
            
'================================================
SERIALOUT2:    LOOKUP2 TXBYTE2,["S", FUNC_OUT2, ZOOM_OUT, FOCUS_OUT, ERROR_OUT2],TXREG2
            TXBYTE2 =TXBYTE2 +1
            IF TXBYTE2 >= 5 THEN
                @ INT_DISABLE  TX2_INT
            ENDIF
            GOTO INT_END
            
'================================================
COUNTER1:    TMR1H =PRELOADH                                'PRELOAD ADJUSTS TIMER 1 TO ROLLOVER EVERY (INT_PERIOD)
            TMR1L =PRELOADL
            MSEC =MSEC + INT_PERIOD                        'ROLLING COUNT
            
            IF MSEC //LOOP_TIME =0 THEN TICK =1
            
            IF DTA1_TOUT >0 THEN
                DTA1_TOUT =DTA1_TOUT -1
                IF DTA1_TOUT =0 THEN DTA1_TOUT_FLAG =1
            ENDIF
            IF DTA2_TOUT >0 THEN
                DTA2_TOUT =DTA2_TOUT -1
                IF DTA2_TOUT =0 THEN DTA2_TOUT_FLAG =1
            ENDIF
            
            GOTO INT_END

'================================================
COUNTER2:    TOGGLE PAN_STEP                        'advance pan motor one step
            GOTO INT_END

'================================================
COUNTER4:    TOGGLE TILT_STEP                    'advance tilt motor one step
            GOTO INT_END

'================================================
INT_END:    @ INT_RETURN
            
'================================================
'************************************************
'================================================
MAIN:        IF OERR1 THEN                        'RX buffer overflow
                CREN1 =0
                CREN1 =1
            ENDIF
            IF OERR2 THEN                        'RX buffer overflow
                CREN2 =0
                CREN2 =1
            ENDIF
            IF TICK THEN UPDATE                    'loop time
            IF RX_FLAG1 THEN DATA_IN1            'H* camera packet arrived
            IF RX_FLAG2 THEN DATA_IN2            'D* packet arrived
            IF DTA1_TOUT_FLAG THEN                'no data timeout flag
                DTA1_TOUT_FLAG =0
            ENDIF
            IF DTA2_TOUT_FLAG THEN                'no data timeout flag
                DTA2_TOUT_FLAG =0
                LED2 =0
                GOTO ALLSTOP
            ENDIF
            GOTO MAIN
            
'================================================
'Data incoming for camera data
DATA_IN1:    RX_FLAG1 =0
            'insert camera routine here
            GOTO MAIN
            
'================================================
'Data incoming for PTZF data
DATA_IN2:    RX_FLAG2 =0
            TOGGLE LED2
            HEAD =HEAD_NEW
            FUNC =FUNC_NEW
            PAN  =PAN_NEW
            TILT =TILT_NEW
            ZOOM =ZOOM_NEW
            FOCUS =FOCUS_NEW
            
            FUNC_OUT2 =FUNC                        'echo Zoom and Focus to lens driver
            ZOOM_OUT =ZOOM
            FOCUS_OUT =FOCUS
            CDTA_EN =0                            'Cable data disabled
            LDTA_EN =1                            'Lens data enabled
            GOSUB PREP_TX2                        'Send it
            
            PAN_DEMAND =PAN -127
            PAN_DIR =PAN_DEMAND.7
            PAN_DEMAND = ABS PAN_DEMAND
            
            TILT_DEMAND =TILT -127
            TILT_DIR =TILT_DEMAND.7
            TILT_DEMAND = ABS TILT_DEMAND
            
            IF PAN_DEMAND < 3 THEN                'add cdeadband
                PAN_DEMAND =0
            ELSE
                PAN_DEMAND = PAN_DEMAND - 3        'offset deadband
            ENDIF
            
            IF TILT_DEMAND < 3 THEN                'add deadband
                TILT_DEMAND =0
            ELSE
                TILT_DEMAND = TILT_DEMAND - 3    'offset deadband
            ENDIF
            
            IF PAN_DEMAND =0 AND TILT_DEMAND =0 THEN ALLSTOP
            PAN_EN =0                            'motor active
            TILT_EN =0                            'motor active
            PR2 =137 - PAN_DEMAND                'pan speed
            PR4 =137 - TILT_DEMAND                'tilt speed (min 127 + 10)
            
            GOTO MAIN
            
'================================================
ALLSTOP:    PAN_EN =1                            'Turn off pan drive
            TILT_EN =1                            'Turn off tilt drive
            PAN_DEMAND =0
            TILT_DEMAND =0
            GOTO MAIN

'================================================
UPDATE:        TICK =0
            
            GOTO MAIN
            
'================================================
PREP_TX1:    ERROR_OUT1 =(FUNC_OUT1 + DATR1 + DATR2 + DATR3 + DATR4 + DATR5) ^ $FF
            TXBYTE1 =0
            @ INT_ENABLE  TX1_INT
            RETURN
            
'================================================
PREP_TX2:    ERROR_OUT2 =(FUNC_OUT2 + ZOOM_OUT + FOCUS_OUT) ^ $FF
            TXBYTE2 =0
            @ INT_ENABLE  TX2_INT
            RETURN
            
'================================================

END