Dear Darrel,

If you are still there, please read this adaption of my code to use your instant interrupts.
Something is still not right, it does not seem to get the values.

'************************************************* ***************

'JUST NEED TO SEND THE VALUE IN EACH BYTE ONCE THE PACKET HAS BEEN COLLECTED

'************************************************* ***************
'@ device hs_OSC, wdt_on, pwrt_on, protect_off
define osc 20
Include "modedefs.bas"
INCLUDE "DT_INTS-14.bas" ' Base Interrupt System
INCLUDE "ReEnterPBP.bas" ' Include if using PBP interrupts

trisc.6=0
TRISC.7=1
TRISA.0=0


RCSTA = %10010000 ' ENABLE USART AND SET TO CONTINUOUS RECEIVE
SPBRG = 64 'SET TO 4800bps
INTCON = %11000000 'ENABLE GLOBAL & PERIFERAL INTERRUPTS
RCIF VAR PIR1.5 'FLAG IS THE INTERRUPT WHEN A BYTE IS IN THE USART BUFFER
RCIE VAR PIE1.5
OERR VAR RCSTA.1
CREN VAR RCSTA.4
test var porta.0
BAUD CON 16390
start var bit

BUFFER VAR BYTE[8] 'BUFFER FROM USART TO COLLECT THE 8 BYTES
PELCO VAR BYTE[8]
BYTECOUNTER VAR BYTE 'USED TO COUNTER BYTES INTO THE BUFFER
BFULL VAR BIT 'FLAGS THAT THE BUFFER HAS ALL 8 BYTES
VALUE VAR BYTE 'A TEMP SINGLE BYTE RECEIVED FROM THE USART
COUNTER VAR WORD 'USED FOR LOOP IN MAIN PROGRAM
GOT VAR BIT 'USED TO PREVENT REPEATED SENDING OF SAME PACKET VIA SEROUT2

ASM
INT_LIST macro ; IntSource, Label, Type, ResetFlag? GOTO MAIN:
INT_Handler RX_INT, _GETDATA, PBP, yes
endm
INT_CREATE ; Creates the interrupt processor disable
ENDASM

@ INT_ENABLE RX_INT ; enable RX USART interrupts



PELCO=0
BUFFER = 0
BYTECOUNTER = 0
BFULL = 0
VALUE = 0
RCIE=1 'ENABLE USART RECEIVE INTERRUPT FLAG
GOT=0



'================================================= ====================================

MAIN:



if counter= 5000 THEN 'SEND PELCO VALUE EVERY FEW LOOPS

IF GOT=1 THEN 'IF THE PACKET IS NEW THEN SEND ELSE JUST KEEP LOOPING
serout2 test,BAUD,[HEX BUFFER[0],",",HEX BUFFER[1],",",HEX BUFFER[2],",",HEX BUFFER[3],",",HEX BUFFER[6],10,13] 'JUST CHECK 1ST 2 VALUES
GOT=0
ENDIF
toggle portd.1 'LED TO INDICATE TO ME THAT THE LOOP IS LOOPING
counter=0
else
counter=counter+1
endif

goto main

end


'====================INTERRUPT ROUTINE ==============================

GETDATA:

TOGGLE PORTD.0
IF RCIF=1 THEN

VALUE=RCREG
IF VALUE = $A0 THEN 'CHECK TO SEE IF THE BYTE IS THE START BYTE
BYTECOUNTER=0
ENDIF


IF BYTECOUNTER < 8 THEN
BUFFER[BYTECOUNTER] = VALUE 'ADD BYTE TO PACKET
BYTECOUNTER=BYTECOUNTER+1 'INCREMENT COUNTER
ENDIF

'CHECK IF OVERRUN HAS OCCURRED:

IF OERR=1 THEN
Serout2 test,BAUD,["OERR",10,13] 'TO SHOW OVERFLOW
PAUSE 1000
CREN=0 'STOP CONTINUOUS RECEIVE
CREN=1 'RESTART CONTINUOS RECIEVE & CLEAR THE OVERRUN FLAG
BYTECOUNTER=0 'RESET COUNTER AS PART OF PACKET HAS BEEN LOST SO START AGAIN
BUFFER=0
GOTO GETDATA
ENDIF

'*** PACKET MUST START WITH $A0 AND HAVE $AF AS IT'S 7TH BYTE. ******
IF BYTECOUNTER=7 AND BUFFER[0]=$A0 AND BUFFER[6]=$AF THEN
GOT=1 'INDICATE THAT THIS IS A NEW PACKET
GOTO MAIN 'RETURN TO MAIN PROGRAM
ELSE
GOTO GETDATA 'GO BACK AND WAIT FOR NEXT PACKET
ENDIF
ENDIF


@ INT_RETURN
'================================================= ====================================