Я думал о прерываниях, но немного в другую сторону, внешнее прерывание по нажатию на кнопку.

А прерывание по переполнению и читать нажата или нет, это хороший вариант.

можно делать несколько интервалов

Код:
#define  PRESSED_ONE  1
#define  PRESSED_TWO 2
...
...
...
if (tp_cnt > PRESSED_ONE && tp_cnt < PRESSED_TWO) {
/// Кратковременное нажатие
}

if (tp_cnt > PRESSED_TWO) {
/// Долгое нажатие
}
только сократить временной интервал, не секунду, а 0.25

Код:
if (loop_cnt == 25)
если надо использвать uptime, то
Код:
if (loop_cnt == 100) {
 uptime++;
}

if (loop_cnt == 25) {
...
спасибо всем.