Ich habe gerade gesehen, dass du "PORTD = zaehler(Var_Out); //Aufruf Funktion" geschrieben hast. Du übergibst also den Wert von "Var_out" an die Funktion. Danach liest du den gleichen Wert wieder ein und übergibst ihn an Port D. Tausche Var_out in der geposteten Zeile gegen Var_in. Dann sollte es funktonieren. Der Grund ist, dass 0x2=0. Da wird sich nichts ändern.

PS: Warum sollte man keine globalen Variablen nehmen? Lokale Variablen kann man nur innerhalb von Funktionen verwenden (so wie du es in der Funktion gemacht hast). Globale Variablen kannst du im gesamten Programm verwenden. Es gibt dann noch Variablen mit "volatile". Diese kann man dann auch in z.B. ISR verwenden.

MfG Hannes