este es parte de un código que monté para transmitir por usb.
del lado del pic:
...
if(usb_cdc_kbhit()){ //en espera de nuevo(s) caracter(es) en el buffer
if(usb_cdc_getc()=='a'){ //¿lo que llegó fué el caracter a?
printf(usb_cdc_putc,"%Lx", value); // envia el ADRESH:ADRESL al HOST
...
del lado de la pc (usando visual basic)
...
Private Sub Timer2_Timer()
On Error GoTo palla1
MSComm1.Output = "a"
Exit Sub
...
el pic se queda esperando por la 'a' que debe mandar la PC, hasta que no llegue el micro no manda datos.
por su parte la PC está continuamente enviando la 'a' y se queda escuchando y captando los datos que le envía el pic.
es mas o menos una idea, se podría mejorar si el pic envía un dato de confirmación, ya sería como armar un paquete de datos, mediante tramas (sería otra historia).