Buenas, antes de decir nada, quiero dar las gracias a todos los participantes del FORO que es el mejor que hay en la red para mi gusto.
Bueno voy a lanzar unas dudas que no se como las puedo resolver, a ver si se os ocurre algo. Hace tiempo terminé un proyecto para controlar desde un PC(Labview) una tarjeta que activa un RELÉ. Esta tarjeta tiene un PIC16F877 al cual lo comando desde la RS232 (gracias a unas rutinas de REDPIC). Implementé en mi programa en labview un botón de RESET. Este botón envía un comando y resetea mi PIC.El comando que reinicializa es RESET_CPU(). Hasta aquí va todo bien. El problema está, que cuando reseteo mi PIC y el relé que controla está conectado, pues como es lógico este deja de crujir. Esto no me puedo ocurrir porque mi sistema se vendría abajo, entonces os preguntáis ¿Para qué necesitas el RESET? Pues muy sencillo si por cualquier motivo mi PIC se va de viaje que pueda inicializarlo pero sin que se venga abajo mi sistema. Tengo activado el Watchdog a 144ms y la función restart cause() por si el watchdog desborda, por un microreset en la patilla MCLR o por un ruído en la alimentación que mi relé no deje de crujir. TODO esto me funciona muy bien, he simulado tanto un micro reset en la patilla MCLR como un ruído en la alimentación y va muy bien pero a la hora de hacer un reset desde el PC no se como hacerlo. Los valores del Relé los guardo en la EEPROM del PIC. En la posición 0 de la EEPROM guardo el Valor 0 ó 1 según si está activa o no.
if(cbuff[0]=='R'&&cbuff[1]=='E'&&cbuff[2]=='S'&&cbuff[3]=='E'&&cbuff[4]=='T'&&cbuff[6]==0x00){
/* flag_Fuente1=read_eeprom(0);
flag=1;
#zero_ram
printf("RESET");
reset_cpu(); // Resetea el pic y ya no se ejecuta lo que hay bajo Buffff ...
if (flag_Fuente1==1)
{
output_high(PIN_B1);
}
else
{
output_low(PIN_B1);
}*/
}