Ich habe jetzt nicht alles überprüft, aber der entscheidene Fehler ist auf jeden Fall der hier:
Code:
while(1);
Wenn Du hinter dem while(1) direkt ein Semikolon hast, ist die while-Schleife leer. Und da Du eine 1 als Laufbedingung hast, bleibt der Controller auf Ewig in dieser leeren Schleife gefangen.

Richtig wäre:
Code:
while(1)
{
if (...)
}
Gruß,
askazo

[edit]
Ich sehe gerade noch was ganz schlimmes...
[code]for( ; ; ){};[code]
Ich habe noch nie eine leere for-Schleife verwendet, aber das dürfte auch in einer Endlosschleife resultieren. D.h. hier würde Dein Controller schon wieder stecken bleiben. Was wolltest Du damit bezwecken?

Und noch was: Interrupts hast Du hier bisher noch nicht verwendet... aber das solltest Du auch erst mal ohne machen.
[/edit]