Сразу пишу - это мои "домыслы":
- в книжках советуют наоборот, в функции прерывания прочесть датчик, выставить флаг и сразу вернуть прочитанные данные в основную программу - и там, обнаружив флаг, обрабатывать их. Но! не думаю, что причина описанных проблем в этом...