hello all, I need help I have a modbus communication program that works very well, but sometimes I lose communication, I have noticed that if the frame or the values are very large, I lose communication (I have an LED that tells me when the interruption occurs receive information), this LED does not light and the only way to restore communication is resetting the pic, although the program has routines that verify if the information is correct, I could not correct this behavior.

this is the main code ( I forget).

thank

Code:
include "alldigital.pbp"      
INCLUDE "P16F877A.INC"
DEFINE OSC 20                   
'*************************************** 
'* FUSE* 
'*************************************** 
@ DEVICE HS_OSC     'OSCILADOR HIGH SPEED
@ DEVICE WDT_ON ' Watchdog Timer desconectado 
@ DEVICE PWRT_ON ' Power-On Timer conectado 
@ DEVICE BOD_ON ' Brown-Out Detect conectado
@ DEVICE LVP_OFF ' Low Voltage Programming desconectado
'//******************* INICIO PUERTOS COMO SALIDAS ***************************//
PORTA = %00111111
PORTB = 0
portc = %10111110
PORTD = 0
PORTE = %00000011
TRISA = %00111111
TRISB = 0
TRISC = %10111111       ' Set TX (RC.6), RC.0 to out, rest in
TRISD = 0
TRISE = %00000011
'*************** counter,index *************************************
buffer var byte[32]             'Receiving Buffer Trama MOdbus                             
crc16 var byte[2]               'for checksum
B0        var   byte              
B1        var   byte
W0        var   word
MBFrame   var   byte
NewFrame  var   bit 
Length    var   byte
TMR1Ticks var   byte
i         var   byte
MINPUT    var   byte
SlaveAddress var byte
Baudios   VAR   BYTE
TMR1Ticks = 0       
Length = 0
MINPUT = 0

'//********************* Inicializo USART *****************************

RCSTA.7 = 1  'abilito puerto serial configura RC6 y RC7 para RX/TX
RCSTA.6 = 0  ' seleccino modo 8 bit en recepcion
RCSTA.5 = 0  ' no usado
RCSTA.4 = 1  'abilito recpcion continua = 1
RCSTA.3 = 0  'desabilito deteccion direccion
RCSTA.2 = 0  'guarda error de trama 0 = sin error
RCSTA.1 = 0  'guarda error de overrun 0 = sin error
RCSTA.0 = 0  'guarda el noveno bit de los datos recibidos uso paridad
' Enable transmit and asynchronous mode
    if baudios=64 then
        TXSTA = %00100100   
    else 
        TXSTA = %00100000
    endif
SPBRG = Baudios          ' Baudrate =  9600 or 19200
INTCON = %11000000	 ' Enable interrupts
PIE1.5 = 1		 ' Enable interrupt on RECEPCION USART
PIE1.1 = 1          	 ' Enable interrupt on TMR2
T2CON.1 = 1 		 ' TMR1 prescaler 1:16
TMR2 = 0                 ' TMR2 Holding register = 0
ON INTERRUPT GoTo readMB ' Declare interrupt handler routine
'********************* PROGRAMA PRINCIPAL ******************************
Main:
'****************************** Read input *************************

MINPUT.7 = not PORTE.1
MINPUT.6 = not PORTE.0
MINPUT.5 = not PORTA.5
MINPUT.4 = not PORTA.4
MINPUT.3 = not PORTA.3 
MINPUT.0 = not PORTA.0
MINPUT.2 = not PORTA.2
MINPUT.1 = not PORTA.1
        
Goto Main

'!!!! Desabilito interrupcion no colocar ningun codigo del user !!!!

Disable
                                     
'********************* interrupt  ***********************

readMB:	

If RCSTA.1 OR RCSTA.2 then          ' If USART error then clear the error flag
      RCSTA.4=0                     ' // clear the error
      RCSTA.4=1                     ' // enable receiving again
EndIf

if (PIR1.5 = 1) then                        	' USART Interrupt
TMR1Ticks = 0
 If (NewFrame = 1) Or (Length = 0) Then     	'New modbus frame start
    NewFrame = 0
    T2CON.2 = 1                         	' Enable Timer2
    Length = 1
 EndIf
 while (PIR1.5 = 1)                     	'Write modbus frame to buffer
   buffer [Length] = RCREG
   Length = Length + 1	
   If Length >= 20 Then                 'Max modbus frame to buffer 20 char
    Length = 0
   EndIf
 Wend
EndIf

if (PIR1.1 = 1) then                      ' Timer2 interrupt
 PIR1.1 = 0
 T2CON.2 = 0                              ' Timer2 disable
 TMR1Ticks = TMR1Ticks + 1
 
 If TMR1Ticks > 120 Then                  ' ~ 10 ms without new char
    'There was no new char on USART => end of modbus frame
    NewFrame = 1                            
 Else
    T2CON.2 = 1                             'Enable timer
 EndIf
EndIf
Resume
ENABLE
End