Кейл умеет дизассемблер показывать и в нём шагать? Может стоит
попробовать? Или он вам неинформативен будет? Тут ещё где-то
пролетала тема, что в версии для х51 может одна и та же область под
разные переменные использоваться, вроде как using или подобная
директива лечила. Плавучка, в прерывани без FPU? На х51? Странное решение. Я бы считал тики таймера, и во внешнем цикле пересчитывал во что нужно, желательно с копированием значения в static-переменную. До копирования бы может и не дошло бы, но если бы увидел глюки - первое, что рассмотрел бы. Или "семафор" бы изобразил, если памяти в обрез.
Можно ещё в первом варианте попробовать так:
temp += 0.12f * (float)t16 + 0.12f; // Раскрыли скобки и явно привели тип
.