hola amigo J1M te cuento que he logrado comunicar mi pic con mi pc con windows 7 en realidad eso no me dio problema alguno. El poroble está en que ya determine que no puedo utilizar interrupciones ni externas ni del timer0 xq al dispararse se cuelga la cumunicacion con la pc y el programa no avnaza mas del punto en que se quedo. Es mas aunq la interrupcion por timer no este activada al desbordar el timer el pic se cuelga lo he intentado muchas veces y solo logre determinar que el problema es con las interrupciones.
este es mi codigo uso un 18f4550:
#include <18F4550.h>
#device adc=10
#FUSES HS,HSPLL,NOWDT,NOPROTECT,NOLVP,USBDIV,NODEBUG,PLL5,CPUDIV1,VREGEN,NOBROWNOUT
#USE DELAY (clock=48000000)
#include <usb_cdc.h> //Siempre va antes del include usb_desc_cdc.h
#include <usb_desc_cdc.h>
#DEFINE pull_1 pin_a2
#DEFINE pull_2 pin_a3
#BYTE INTCON= 0xff2
#bit TMR0IF = INTCON.2
#byte UCON = 0xF6D
#bit USBEN = UCON.3
#byte UCFG = 0xF6F
#bit USBTRANS = UCFG.3
float v_a,v_b;
int16 v_1,v_2,tiempo;
float tiempo_2,tiempo_3,cont,cont1;
void main()
{
usb_cdc_init();
usb_init(); //inicializamos el USB
output_high(PIN_B3);
output_low(PIN_B4); //se enciende el led rojo
while (!usb_cdc_connected())
{ }//Se queda aquí mientras usb no esté conectado correctamente
//printf(usb_cdc_putc,"Usb correctamente conectado\r\n");
usb_task();
if(usb_enumerated()){
delay_ms(100);
//printf(usb_cdc_putc,"listo....\r\n");
output_high(PIN_B4);
output_low(PIN_B3);
// CONFIGURACION
/////////////////////////////////////////////
enable_interrupts(INT_RDA);
setup_adc_ports(AN0_TO_AN1); // A0 y A1 como analogicas.
setup_adc(ADC_CLOCK_INTERNAL);
//ext_int_edge(L_TO_H);
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_256);
set_timer0(0);
enable_interrupts(INT_TIMER0); //Habilita interrupción timer0
enable_interrupts(global);
cont=0;
cont1=0;
while(1)
{
set_adc_channel(0); //Adquisision del Sensor de entrada.
delay_us(20);
v_1= read_adc();
v_a=5.0*v_1/1024.0;
tiempo=get_timer0();
tiempo_2=tiempo*(1.0/20000000.0)*256.0;
tiempo_3=tiempo_2+cont1;
set_adc_channel(1); //Adquisision del Sensor de salida.
delay_us(20);
v_2 = read_adc();
v_b=5.0*v_2/1024.0;
if(cont==17){
set_timer0(0);
cont=0;
cont1=cont1+0.1;
};
cont=cont+1;
printf(usb_cdc_putc," %01.4f\r\n",v_a);
printf(usb_cdc_putc," %01.4f\r\n",v_b);
printf(usb_cdc_putc,"%01.4f\r\n",tiempo_3);
}
}}
lo que ves que hice con el timer fue para evitar su desborde pero con la interrupcion externa no pude y me toco eliminarla me podrias ayudar desde ya muchas gracias.