ola q tal?
Bueno nuevamente recurro a toda la gente del foro para que me puedan guiar en un problema que tengo, primero para empezar el modulo que utilizo para conectar del pic a la pc es ft232r (serial a usb) lo pueden ver en la pagina de sparkfun, bueno lo que mi pic hace es simplemente activar y desactivar contactores por lo que a todas las entradas y saludas q utilizo estan con opto-acopladores, por ese lado no entra ningún ruido pero cuando empiezo probar esto desde la pc por unos momento envia y recibe datos de manera excelente pero de ahi colapsa el puerto de comunicaciones y no entiendo el poque les anexo el programa para ver que esta sucediendo, me olvida tamb la parte de comunicación al pic esta opto-acoplada.
Gracias ojalas me ayuden ver mi error

//******************************************************************************
#include <16F877A.h>
#fuses XT,NOWDT,PROTECT,PUT,NOLVP,NOBROWNOUT,NOCPD,NOWRT
#use delay(clock=4000000)
#use rs232(baud=9600, xmit=PIN_C6, rcv=PIN_C7,parity=N, bits=8, stream=RS232)
#use standard_io(a)
#use standard_io(b)
#use standard_io(d)
#byte port_a = 0x05
#byte port_b = 0x06
#byte port_d = 0x08
//******************************************************************************
//Variables
//******************************************************************************
void procesa(void);
int1 flagA0=0;
int1 flagA1=0;
int1 flagA2=0;
int1 flagA3=0;
int1 flagB0=0;
int1 flagB1=0;
int1 flagB2=0;
int1 flagB3=0;
int1 flagB4=0;
int1 flagB5=0;
int1 flagB6=0;
int1 flagB7=0;
int1 flagD0=0;
int1 flagD1=0;
int1 flagD2=0;
int1 flagD3=0;
char P0;
char P1;
char P2;
char Pilot;
//******************************************************************************
//INTERRUPCIONES
//******************************************************************************
/*#INT_RDA //Dato serie recibido
void intrda(void)
{
if(is_run == 0)
{
is_run = 1;
Pilot = getc ();
if(Pilot == 13)
{
procesa();
}
else
{
P2 = P1;
P1 = P0;
P0 = Pilot;
}
is_run = 0;
}
}
*/
void procesa(void)
{
if(P0==80 && P1==76 && P2==72)
{
printf("Ayuda\r\n");
printf("Comandos\r\nSTA Estatus de las entradas y salidas del sistema\r\n");
printf("Rxy Cambia el estado del relay x por estado y\r\n");
}
else if(P0==65 && P1==84 && P2==83)
{
printf("OK: ");
flagA0 = input(PIN_A0);
flagA1 = input(PIN_A1);
flagA2 = input(PIN_A2);
flagA3 = input(PIN_A3);
flagD0 = input(PIN_D0);
flagD1 = input(PIN_D1);
flagD2 = input(PIN_D2);
flagD3 = input(PIN_D3);
printf("<%u%u%u%u%u%u%u%u|%u%u%u%u%u%u%u%u>\r\n",flagA0,flagA1,flagA2,flagA3,flagD0,flagD1,flagD2,flagD3,flagB0,flagB1,flagB2,flagB3,flagB4,flagB5,flagB6,flagB7);
delay_cycles(2);
}
else if (P2 == 82 && (P0 == 48 || P0 == 49))
{
//printf("Procesando Cambio Estado en Relay\r\n");
switch(P1)
{
case 65:
if(P0==49)
{
printf("OK: RA->1\r\n");
output_bit(PIN_B0,1);
flagB0 = 1;
}
else
{
printf("OK: RA->0\r\n");
output_bit(PIN_B0,0);
flagB0 = 0;
}
break;
case 66:
if(P0==49)
{
printf("OK: RB->1\r\n");
output_bit(PIN_B1,1);
flagB1 = 1;
}
else
{
printf("OK: RB->0\r\n");
output_bit(PIN_B1,0);
flagB1 = 0;
}
break;
case 67:
if(P0==49)
{
printf("OK: RC->1\r\n");
output_bit(PIN_B2,1);
flagB2 = 1;
}
else
{
printf("OK: RC->0\r\n");
output_bit(PIN_B2,0);
flagB2 = 0;
}
break;
case 68:
if(P0==49)
{
printf("OK: RD->1\r\n");
output_bit(PIN_B3,1);
flagB3 = 1;
}
else
{
printf("OK: RD->0\r\n");
output_bit(PIN_B3,0);
flagB3 = 0;
}
break;
case 69:
if(P0==49)
{
printf("OK: RE->1\r\n");
output_bit(PIN_B4,1);
flagB4 = 1;
}
else
{
printf("OK: RE->0\r\n");
output_bit(PIN_B4,0);
flagB4 = 0;
}
break;
case 70:
if(P0==49)
{
printf("OK: RF->1\r\n");
output_bit(PIN_B5,1);
flagB5 = 1;
}
else
{
printf("OK: RF->0\r\n");
output_bit(PIN_B5,0);
flagB5 = 0;
}
break;
case 71:
if(P0==49)
{
printf("OK: RG->1\r\n");
output_bit(PIN_B6,1);
flagB6 = 1;
}
else
{
printf("OK: RG->0\r\n");
output_bit(PIN_B6,0);
flagB6 = 0;
}
break;
case 72:
if(P0==49)
{
printf("OK: RH->1\r\n");
output_bit(PIN_B7,1);
flagB7 = 1;
}
else
{
printf("OK: RH->0\r\n");
output_bit(PIN_B7,0);
flagB7 = 0;
}
break;
default:
printf("FAIL: Relay No existe\r\n");
break;
}
}
else
{
printf("FAIL: Teclee HLP para ayuda\r\n");
}
}
void main(void)
{
setup_adc_ports(NO_ANALOGS);
setup_adc(ADC_OFF);
enable_interrupts (INT_RDA) ;
enable_interrupts (GLOBAL); //activadas interrupciones
set_tris_b (0xFF);
//*********************************************************************************
//Definir estado de las entraras de los sensores a la bomba
//*********************************************************************************
//Puerto A:
input_state(PIN_A0);
input_state(PIN_A1);
input_state(PIN_A2);
input_state(PIN_A3);
//Puerto D:
input_state(PIN_D0);
input_state(PIN_D1);
input_state(PIN_D2);
input_state(PIN_D3);
//*********************************************************************************
//Definir estado de inicio de las bombas
//*********************************************************************************
output_bit (PIN_B0, 0) ;
output_bit (PIN_B1, 0) ;
output_bit (PIN_B2, 0) ;
output_bit (PIN_B3, 0) ;
output_bit (PIN_B4, 0) ;
output_bit (PIN_B5, 0) ;
output_bit (PIN_B6, 0) ;
output_bit (PIN_B7, 0) ;
//********************************************************************************
//Programa para detectar el estado de las bombas
//********************************************************************************
printf("OK: EDDAS Interface de Bombas:\n\r");
while (1)
{
delay_ms(150);
Pilot = getc ();
if(Pilot == 13)
{
procesa();
}
else
{
P2 = P1;
P1 = P0;
P0 = Pilot;
}
}
}