В самом листинг все, на мой взгляд, нормально. Хотя volatile у temp
лишний и вредный. Беда где-то в другом месте, возможно в самом
обработчике systick или даже вообще в третьем месте. Keil51
прекрасен, но оверлеинг переменных может приводить к неожиданным
результатам.
Не надо делать мне как лучше, оставьте мне как хорошо