#include <18F4550.h>
#device adc=10
#fuses HSPLL,MCLR,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL5,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include <lcd.c>
#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 32 //size to allocate for the tx endpoint 1 buffer
#define USB_EP1_RX_SIZE 32 //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>
#define a envio[0]
#define b recepcion[0]
#define c recepcion[1]
#define d recepcion[2]
int envio[1],recepcion[3];
void main() {
set_tris_b(0xff);
set_tris_c(0x00);
output_c(0x00);
usb_init();
usb_task();
usb_wait_for_enumeration();
while(true){
if(usb_enumerated()) //si estamos correctamente conectados y reconocidos por la PC
{
if (usb_kbhit(1)) //si el endpoint de salida contiene datos del host
{
usb_get_packet(1, recepcion, 3); //recibimos el paquete de tamaño 2 bytes del
if(b==1)
{output_high(pin_c0);}
if(c==2)
{output_high(pin_c1);}
if(d==3)
{output_high(pin_c2);}
if(b==0)
{output_low(pin_c0);}
if(c==0)
{output_low(pin_c1);}
if(d==0)
{output_low(pin_c2);}
if(input(pin_b0)==1)
{a=1;
usb_put_packet(1,envio, 1, USB_DTS_TOGGLE); //enviamos el paquete de tamaño 1 byte del EP1 al PC}
}
if(input(pin_b1)==1)
{a=2;
usb_put_packet(1,envio, 1, USB_DTS_TOGGLE); //enviamos el paquete de tamaño 1 byte del EP1 al PC}
}
if(input(pin_b2)==1)
{a=3;
usb_put_packet(1,envio, 1, USB_DTS_TOGGLE); //enviamos el paquete de tamaño 1 byte del EP1 al PC
}
}
}
}
}