Supongo que esa rutina que has pegado la tienes dentro de la interrupción.
Si es así, y tu interés es que sólo se ejecute una vez, ¿porqué le pones un "while"?
De todas formas, los retrasos los puedes implementar con delay_ms (x)
Por cierto, si me permites un consejo, tu programa quedaría mucho más legible con
switch, mira su funcionamiento en la ayuda de CCS y verás como te gusta.
Editado: vaya, me acabo de dar cuenta que el mensaje está duplicado y un compañero ya había contestado en el otro. Pego aquí un link a la otra respuesta:
http://miarroba.com/foros/ver.php?foroid=46840&temaid=3716114