Wenn du mechanische Schaltkontakte nutzt (die Prellen) ist es besser wenn du einen Timer zum Auslesen verwendest.

Ich hätte noch eine Verbesserung des Codes. Du prüfst mit einer If auf "0" und mit einer If auf "1". Bei einer If-Abfrage gibt es aber auch noch "else", das wird immer angesprungen wenn das If-Ergebnis nicht "1" ist.
Ein Beispiel als Pseudocode:
Code:
if (PB3 == 1)
{
   Led = 1
}

if (PB3 != 1)
{
   Led = 0
}
ist das gleiche wie:
Code:
if (PB3 == 1)
{
   Led = 1
}
else
{
   Led = 0
}
das ist auch das gleiche:
Code:
if (PB3)
{
   Led = 1
}
else
{
   Led = 0
}
Das if wird immer ausgeführt wenn das Ergebnis wahr ist und das ist immer der Fall wenn es nicht 0 ist. Wenn du auf "0" abfragen willst musst du aber "if (Variable == 0)" schreiben. Bei der while Schleife ist es das gleiche, deswegen sind auch "while(1)" Schleifen endlos.

MfG Hannes