#include <18F4550.h>
#DEVICE ADC=8
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48MHZ)
#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
#define USB_HID_DEVICE     FALSE             //deshabilitamos el uso de las directivas HID
#define USB_EP1_TX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for IN bulk/interrupt transfers
#define USB_EP1_RX_ENABLE  USB_ENABLE_BULK   //turn on EP1(EndPoint1) for OUT bulk/interrupt transfers
#define USB_EP1_TX_SIZE    1                 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE    3                 //size to allocate for the rx endpoint 1 buffer
#include <pic18_usb.h>     					//Microchip PIC18Fxx5x Hardware layer for CCS's PIC USB driver
#include <PicUSB.h>	      					//Configuración del USB y los descriptores para este dispositivo
#include <usb.c>        					//handles usb setup tokens and get descriptor reports
#define modo      recibe[0]
#define param1    recibe[1]
#define param2    recibe[2]
#define resultado envia[0]
void main(void)
{
   unsigned char recibe[3];                  //declaramos variables 
   unsigned char adc[1]; 
   unsigned int contador; 
   setup_adc_ports(ALL_ANALOG);
   setup_adc(ADC_CLOCK_DIV_2);
   set_adc_channel(0);
   delay_us(10);
   usb_init();                      		//inicializamos el USB
   usb_task();                      		//habilita periferico usb e interrupciones
   usb_wait_for_enumeration();      		//esperamos hasta que el PoteUSB sea configurado por el host
 
   while (TRUE)
   {
      if(usb_enumerated())          		//si el PoteUSB está configurado
      {
         while(TRUE)
               {
                adc[0] = read_adc();
                delay_us(10);
                usb_put_packet(1, adc, 1, USB_DTS_TOGGLE);
                printf("El valor de AD0 es: %2u\n\r",adc[0]);
                delay_ms(500);
               }
      }
  }
}