Es würde dich genügen, in der ISR nur ein Merker zu setzen, daß 30s vorbei sind, und im Hauptprogramm die Arbeit machen? Wahrscheinlich dauert das alles viel zu lange...
getTemp... loopt wahrscheinlich ewig in einer ADC-Schleife rum?

BTW:

OCR1B = 0xf43;
TCNT1=0;

Was soll das TCNT1 = 0 in der ISR?


Hast du irgendwo Warteschleifen drin, deren Variable in einer ISR gezählt wird? Das kann nicht gehen...