Soll pro Tastendruck eine weitere LED angehen und diese auch wieder durch Drücken des 2. Tasters abgezogen werden können?

Wenn Taster 1 (LED hoch) gedrückt wird, dann kannst du ja einfach machen Portwert * 2 + 1
Multiplikation mit 2 müsste die "1" genau um eine Stelle nach links verschieben und die 1 füllt die neu entstandene Lücke auf.
wenn Taster 2 gedrückt wird, dann einfach Portwert / 2 und schon hat man ne Stelle weniger.
Keine Garantie...
[1=LED leuchtet, 0=LED aus]
00000001 = 1
00000011 = 3
00000111 = 7
00001111 = 15
00011111 = 31
00111111 = 63
01111111 = 127
11111111 = 255
Also wenn du grad 5 LEDs anhast, dann hat dein Port den Wert 31. Dann drückt einer den Taster 2, also durch 2 teilen = 15.5 (da es kein Kommawert gibt, wird die 5 hinterm Komma weggeworfen und das Ergebnis ist 15, was genau den 4 angeschalteten LEDs entspricht.)
Also musst du nur deinen Wert irgendwo in ner Variablen haben und bei Tasterdruck multiplizieren bzw. teilen und ihn dann an deinen Port zuweisen.

EDIT: Das ist zwar nicht die Antwort auf deine Frage, wieso der Stack voll wird und wie man deinen Code verbessern könnte, damit das in Zukunft nicht mehr passiert aber ich versteh den Code absolut nicht (mach dir nix draus... Meine ersten Programme waren auch nie der Hammer und sind sie heute manchmal auch nicht...).