В очередной раз объясню.
Хоть на главную выставляй
При использовании прерываний в проектах необходимо учитывать ряд аспектов:
При срабатывании/вызове прерывания основная программа приостанавливается,
выполняется под-программа, находящаяся в описании прерывания, будь то энкодер, скоростной счётчик и т.д.
Затем, после завершения обработки под-программы прерывания, основная программа продолжит работу с того места, в котором она была остановлена.
Если Вы используете данные с выхода под-программы(обработчика) прерывания, они будут обработаны в том момент, когда до них дойдет очередь в программе.
Соответственно, если Вы пытаетесь подсчитать количество импульсов и по достижении определённого значения остановить/реверснуть, в момент, когда программа дойдёт до Вашего компаратора, не исключено, что там будет значение, намного/не-очень отличающееся от Ваших ожиданий.
Это будет связано с тем, что пока Вы выводили на дисплей, который вносит значительные временные задержки в цикл выполнения программы, отравляли в уарт, ещё чего там, пришло некоторое время и ещё несколько импульсов на вход прерывания, и он их, соответственно их посчитал!!!
Учитывайте это!!!