Lo que tenes que hacer es muy facil, yo trabajo con el 89C51CC01 pero el concepto es exactamente el mismo, fijate en la hoja de datos que seguramente el micro que vos utilizas tiene watchdog, el WD es un timer programable como cualquier otro pero tiene como particularidad que al momento de overflow si fue configurado resetea la CPU. Si vos en tu programa configuras y habilitas el WD, y tenes un loop lo tenes que resetear de vez en cuando, por ej:
void ResetWD ()
{
//sentencias que resetean el WD de tu micro
}
while (1)
{
// tu codigo
.......
.......
ResetWD();
}
de esta manera si vos queres que tu CPU se resetee por soft deberias "clavar" el programa de esta forma:
while (1);
al hacer esto el WD no vuelve a resetearse y por lo tanto llega a overflow, por concecuencia reset del CPU.
Si no fui claro con la explicacion mandame un mail a
zappia_andres@hotmail.com porque estoy en el laburo y no tengo mucho tiempo

espero te sirva igual