Hola a todos, soy nuevo en el foro, y no se a quien mas recurrir

Tengo un proyecto que consta de un PIC18F4553 con un xtal de 40 Mhz, donde necesito recibir 250 Kbytes de un microfono en un segundo, el circuito es muy sencillo por ahora solo esta el microfono conectado al PIC y de ahi se conecta a la computadora por metodo Bulk, en la computadora leo los paquetes de 64 bytes con Labview.
El problema que tengo es que solo llegue a 5,000 Bytes por segundo aproximadamente, pero leo en internet que activando mas endpoints puedo mandar mas paquetes, pero no lo se hacer, alguien podria por donde podria empezar?
Ademas, tambien leia que el Isocrono es mas rapido, es muy dificil de implementar?
#include <18F4553.h>
#DEVICE ADC=8
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL10,CPUDIV1,VREGEN,MCLR
#use delay(clock=48000000)
#define USB_HID_DEVICE FALSE
#define USB_EP1_TX_ENABLE USB_ENABLE_BULK
#define USB_EP1_RX_ENABLE USB_ENABLE_BULK
#define USB_EP1_TX_SIZE 64 //put_packet
#define USB_EP1_RX_SIZE 64
#include <pic18_usb.h> //Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include "Interfaz_USB.h" //Configuración del USB y los descriptores para este dispositivo
#include <usb.c> //handles usb setup tokens and get descriptor reports
#use fast_io(a)
#use fast_io(b)
#use fast_io(c)
#byte ADCON2 = 0XFC0
#byte ADCON1 = 0XFC1
#byte ADCON0 = 0XFC2
#byte UCON = 0XF6D
#byte UCFG = 0XF6F
#byte porta = 0xf80 // Identificador para el puerto A.
#byte portb = 0xf81 // Identificador para el puerto B.
int8 recibir[6];
int enviar[64];
int16 Dato_RA0;
#define Activar_Int recibir[0]
#define Salida_Dig1 recibir[1]
#define Salida_Dig2 recibir[2]
#define LED_ON output_high // Función para encender el LED.
#define LED_OFF output_low // Función para apagar el LED.
#define IN1 PIN_B1
#define IN2 PIN_B2
#define OUT_PWM PIN_C2
#define OUT1 PIN_B5
#define OUT2 PIN_B3
void main(void)
{
int i = 0;
ADCON1 = 0b00001110;
ADCON0 = 0b00000011;
ADCON2 = 0b00001110;
UCON = 0b00101100;
UCFG = 0b00010100;
usb_init();
usb_task();
usb_wait_for_enumeration();
delay_ms(50);
// Secuencia de confirmación de enumeración.
LED_ON(OUT1);
delay_ms(250);
LED_OFF(OUT1);
while (TRUE)
{
if(usb_enumerated()) // True si el USB ha sido enumerado.
{
if (usb_kbhit(1)) // True si hay datos en el buffer de recepción.
{
usb_get_packet(1,recibir,8);
if (Activar_Int==1) // Salidas activadas
{
if(Salida_Dig1 == 1) LED_ON(OUT1);
else LED_OFF(OUT1);
if(Salida_Dig2 == 1) LED_ON(OUT2);
else LED_OFF(OUT2);
}
}
for(i = 0; i<=63; i= i+1){
enviar[i]=read_adc(); // Muestrear para mayor estabilidad en la lectura.
// enviar[i]= Dato_RA0 >> 8;
// enviar[i+1] = Dato_RA0 & 0xFF;
}
usb_put_packet(1,enviar,64,USB_DTS_TOGGLE); //Envío los datos al USB
}
}
}
Estaria muy agradecido con sus comentarios.
Saludos!