En todo programa debe existir un solo while(true) o while(1), esto es un loop infinito.
El while va a ejecutar lo que tenga dentro mientras la condicion dentro de sus parentesis sea verdadera ( o distinto de 0 ). Ejemplo:
int i=0;
while( i < 7 )
{
i++;
output_toggle(LED2);
delay_ms(500);
}
while(true);
Este ejemplo va a comenzar con i = 0, lo cual la condicion es verdadera y ejecuta el codigo dentro, el primer paso se incrementa i a 1, se enciende el LED2 y espera 500ms, segundo paso i=2, se apaga el LED2 y espera otros 500ms. Asi hasta que i vale 6, cuando entra de nuevo al codigo i se aumenta a 7, se cambia el estado de la salida, espera 500ms, y al valer 7 ya no cumple mas la condicion de i menor a 7, por lo tanto no se ejecuta mas.
El while(true) que puse al final es para que se quede ahi sin hacer mas nada hasta que se resetee el micro. ( Como dije siempre debe existir un while(true) )
Respecto a tu programa entra a tu primer while, y cuando llega al final se fija en la condicion, al seguir siendo verdadera ( true ) vuelve a repetirlo. Una y otra ves, por lo cual NUNCA va a salir de alli.
Si quisieras que se ejecute lo otro, incorporalo todo dentro de un solo while:
void main(void)
{
//Led Rotatorio
while(true)
{
output_high(LED1);
output_low(LED2);
delay_ms(500);
output_high(LED2);
output_low(LED1);
delay_ms(500);
//Led Parpadeo 1 o consiguientes
output_low(LED3);
delay_ms(500);
output_high(LED3);
delay_ms(500);
output_low(LED4);
delay_ms(500);
output_high(LED4);
delay_ms(500);
output_low(LED5);
delay_ms(500);
output_high(LED5);
delay_ms(500);
}
}
Buscate un tutorial sobre los loops y control de flujo de C, para que aprendas sobre los if, while, for, do..while , switch, etc.
Seguro que hay ejemplos y de esa forma podes ver las diferencias.