Antes que nada muchas gracias por su atención, me encuentro desarrollando una comunicación USB CDC con PIC18F4550.
Simplemente se trata de leer una valor con el ADC y transmitirlo al Computador, dependiendo del valor recibido el computador me envia los valores '1', '2' ó '3' y con estos enciendo uno de tres led conectador al puerto B.
El código "base" se basa en el aporte de esta pagina
http://picmania.garcia-cuervo.net/usb_3_cdctransfers.php , he hecho muchas veces comunicación USB sin contratiempo alguno, sien embargo esta vez consigo que los datos se transmitan del PIC al PC, pero al intentar trasmitir del PC al PIC este solo recibe el valor 0X0F.
Resumiendo:
- El PIC si puede enviar al PC la variable "análoga".
- Pero al enviar desde el PC a PIC siempre llega el valor 0X0F.
No sé si sea algún bug en la versión del compilador aunque he probado las Versiones 4.128, 4.110, 4.104 . y no he conseguido hacer que funcione.
Cabe anotar que ya utilice el buscador y nada

, asi que cualquier sugerencia es muy bien recibida.
De antemano muchas gracias.
#include "18F4550.h"
#DEVICE ADC=8
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include ".\include\usb_cdc.h"
int8 conversion=0;
char recibe='a';
void main() {
setup_adc(ADC_CLOCK_INTERNAL); //configuro A/D
setup_adc_ports(AN0_ANALOG);
set_adc_channel(0);
output_low(PIN_B3);
output_low(PIN_B4);
output_low(PIN_B5);
set_tris_a(0b11111111);
set_tris_b(0b11000111);
//set_tris_d(0b11110000);
output_high(PIN_D2); // encendemos led en Rojo para indicar presencia de energia
output_low(PIN_D3);
delay_ms(300);
usb_cdc_init();
usb_init();
while(!usb_cdc_connected()) {}
do
{ usb_task();
if (usb_enumerated())
{ output_high(PIN_D3); // encendemos led en Verde para indicar coneccion
conversion=read_adc(); // iniciamos convercion
delay_ms(10);
if (usb_cdc_kbhit()) //si el endpoint de salida contiene datos del host
{ recibe=usb_cdc_getc();
if (recibe=='1')
{ output_low(PIN_B3); //verde
output_low(PIN_B4); //rojo
output_high(PIN_B5); //amarillo
}
if (recibe=='2')
{ output_low(PIN_B3); //verde
output_high(PIN_B4); //rojo
output_low(PIN_B5); //amarillo
}
if (recibe=='3')
{ output_high(PIN_B3); //verde
output_low(PIN_B4); //rojo
output_low(PIN_B5); //amarillo
}
}
usb_cdc_putc(conversion);
}
} while (TRUE);
}