hola que tal mi problema parece ser sencillo pero yo simplemente no logro hallar el problema, soy nuevo en esto del C para pics, entonces estoy usando el compilador C CCS y lo que he hecho es generar un CDC por medio del USB del PIC 18f4550 y asi crear un COM ( puerto serial ) esta parte me ha funcionado sin ningun problema, cuando conecto mi dispositivo este funciona correctamente, pero el problema es: mi programa debe ir adquiriendo datos por el usb, y por medio de de las interrupciones externas del pic, INT, INT1 INT2 (RB0, RB1, RB2) hacer cierto manejo con mis variables pero cuando agrego el codigo de las interrupciones al programa la computadora ya no reconoce el dispositivo, lo quito y de nuevo funciona sin problemas, mi codigo es este: si alguien tubiera una idea de que estoy haciendo mal se los agradeceria!!!!!!!!!!!
con interrupciones: ( no reconoce windows el dispositivo)
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL2,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include <usb_cdc.h>
#include <usb_desc_cdc.h>
//-Variables
int a = 0;
int b = 0;
int cont1 = 0;
char datausb;
#int_EXT
void EXT_isr(void)
{
// Codigo de interrupcion 0
}
#int_EXT1
void EXT1_isr(void)
{
// Codigo de interrupcion 1
}
#int_EXT2
void EXT2_isr(void)
{
// Codigo de interrupcion 2
}
void main() {
usb_cdc_init();
usb_init();
set_tris_B(0x0F);
Output_B(0x00);
ext_int_edge(0,L_TO_H);
ext_int_edge(1,L_TO_H);
ext_int_edge(2,L_TO_H);
while (!usb_cdc_connected()) {}
while (true)
{
enable_interrupts(INT_EXT);
enable_interrupts(INT_EXT1);
enable_interrupts(INT_EXT2);
enable_interrupts(GLOBAL);
usb_task();
if(usb_enumerated())
{
if (usb_cdc_kbhit())
{
datausb = usb_cdc_getc();
// Codigo de Manejo de Variables
}
}
}
}
sin interrupciones: (si reconoce windows el dispositivo)
#include <18F4550.h>
#fuses HSPLL,NOWDT,NOPROTECT,NOLVP,NODEBUG,USBDIV,PLL2,CPUDIV1,VREGEN
#use delay(clock=48000000)
#include <usb_cdc.h>
#include <usb_desc_cdc.h>
int a = 0;
int b = 0;
int cont1 = 0;
char datausb;
void main() {
usb_cdc_init();
usb_init();
set_tris_B(0x0F);
Output_B(0x00);
while (!usb_cdc_connected()) {}
while (true)
{
usb_task();
if(usb_enumerated())
{
if (usb_cdc_kbhit())
{
datausb = usb_cdc_getc();
// Codigo de programa
}
}
}
}