Hola, Aunque sigo opinando que lo del reset es lo menos complicado,( y si es igual que uno por Harware, comprobarlo si no lo creis), Para lo que quieres no seria necesario ni siquiera usar interrupciones por ejemplo:
while (t<t_ref){
//Lo que tengas que hacer
if (emergencia){
//apagas , enciendes etc para dejarlo como en principio.
break;
}
// lo que tengas que seguir haciendo
}//fin del while
O esta otra, que como alguien decia "me pueden saltar ala yugular"
Lo primero del loop antes que nada colocas INICIO: , y dentro del programa donde quieras y cuantas veces quieras:
if (emergencia){
//apagas , enciendes etc para dejarlo como en principio.
goto INICIO;
}
Saludos.
PD: con el reset te evitas //apagas , enciendes etc para dejarlo como en principio. Y te quedaria If(emergencia){RESET;}