mit cli() hälst Du alle Interrupts an.
Somit läuft auch die delay() Funktion nicht mehr, da diese einen Hardwaretimer benutzt...
Ausserdem wird auch die serielle Kommunikation nicht mehr klappen, da der UART nicht mehr senden wird, oder klappt das bei Dir noch?
grundsätzlich macht man das ISR_anhalten so:
void ISR_anhaltenn () {
uint8_t sreg = SREG;
cli();
//irgendwas machen
SREG = sreg;
}
Interrupts sind ein sehr komplexes Thema, ich empfehle dazu, das Datenblatt vom ATMega168 ausführlich zu studieren.
Am sinnvollsten wäre es, nur den Timer zu stoppen und dann wieder neu zu starten, also stoppen mit
TCCR2B &= ~(1 << CS22);
in Deinem Fall. Und starten so wie Du es in setup() machst.
Also nicht cli() und sei() benutzen, sondern nur den Timer stoppen und neu starten...