Hola tuve algunos problemas con la recepción usb_cdc. Hice varias pruebas con el CCS 4.104 y generaba problemas en la recepción usb_cdc, ya que la rx/tx por el modulo serie funciona bien y lo que recibe por el modulo serie y retransmite por el usb_cdc funciona muy bien, quedando solo con problemas la recepción usb_cdc.
El problema se solucionó al compilar el mismo código, con una versión anterior de CCS 4.023.
Todo lo he realizado en win 7 64 bit
Este es el Cod
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#use rs232(baud=9600, xmit=pin_c6, rcv=pin_c7, bits=8, parity=N)
#include <usb_cdc_HomeScada.h> //puede ser cualquier otro a gusto del usuario
char s;
void main(){
char c=0x00;
delay_ms(300);
usb_cdc_init(); //esta en usb_cdc y configura los baudios, bit paridad etc
usb_init(); // esta en pic18_usb llama a usb_init_cs() q a su vez llama a usb_task()
while(!usb_cdc_connected()) {}
enable_interrupts(global);
enable_interrupts(int_rda);
do{
usb_task(); //está en pic18_usb
if (usb_enumerated()) {
c=usb_cdc_getc(); //if (c != 0x00){ // si lo recibido por usb no es NULL
usb_cdc_putc(c);
putc(c);
c=0x00; // lo retransmite por rs232 y hace eco usb
}
} while(true);
}
#int_rda
void serie_isr(){
if (kbhit()){
output_high(pin_c0); //enciende led para monitorea q entro en rutina de rx
s=getc();
putc(s);
delay_ms(1);
output_low(pin_c0);
usb_task(); //está en pic18_usb
if (usb_enumerated()){ if (s != 0x00) usb_cdc_putc(s); s=0x00;}
}}