Also...

was spuckt der AD-Wandler eigentlich aus, dass man "es" mit dieser komplizierten Formel erst umwandeln muss?
Wenn ich mich nicht verrechnet habe, müsste es ungefähr so sein. Links der ADC-Wert, rechts der Wert von Pollswitch() nach der Rechnung.

678-682 --> 32
812-821 --> 16
903-915 --> 8
956-970 --> 4
985-1000 --> 2
1001-1015 --> 1

Durch den geschickten Einsatz von fließkomma und nicht fließkomma Zahlen kann man so runden.

Code:
return  ((unsigned char) ((( 1024.0/(float)i - 1.0)) * 63.0 + 0.5));
Zum Code, ich muss zugeben, dass ich da nciht ganz durchgestiegen bin, aber müsste so eingeltich funktionieren. Wenn ich das richtig sehe, überprüfst du, was in ADMUX gesetzt ist und führst dann entsprechend aus (sinnvoll!). In der Hauptroutine prüfst du dann, ob noch irgendwas gemacht werden soll, oder "bocrmaler Code" laufen kann.

Was meint status=blocked?