Причем делать так как ты делаешь - нельзя. в твоем случае этого вобщем-то не так заметно, но переменная button у тебя используется как программой так и прерыванием, а прерывание может возникнуть в ЛЮБОЙ МОМЕНТ времени, даже непосредственно перед проверкой! А у тебя подряд идут целых 8 проверок. Перед такими проверками надо обеспечить неизменность переменной, иначе получишь такую ситуацию значение button = 5, только что проверили значение на 5 - совпало что-то делаем и тут возникает прерывание, button меняется на 6 заканчиваем действие и происходит очередное сравнение button с числом 6 - это условие тоже срабатывает...
Беда в том что отловить такую ситуацию крайне сложно, в тестах она будет возникать довольно редко - когда момент проверки во времени совпадет с прерыванием да еще в нужной фазе.
Как это обеспечить? до окончания проверок запретить прерывания, или скопировать значение переменной и сравнивать уже копию.
Но лучше, действовать через флаги - в прерывании можно только установить флаг, а в основной программе только сбросить и только один раз. Тогда никаких конфликтов не происходит.


