И подскажите, для чего переменной dim volatile? Разве не один поток проходит через прерывания?
Любая переменная используемая в обработчике прерывания должна быть volatile