это не время отрицательное, это неаккуратное отношение к типам переменных ))) ну, а то что у вас слишком много кода в прерывание запихано было ясно сразу. Проанализируйте необходимость выполнения в каждом вызове всего кода - наверняка удастся разложить на отдельные потоки, намного короче чем все тело.