В начале цикла должен быть switch с перечислением всех состояний программы. В нём, под влиянием каких-то данных (у вас - флага, выставленного в прерывании и др), вычисляется следующее состояние и производятся некоторые действия перед переходом в него (инициализация переменных и тд)..