Naja,

1. Man soll beim betreten der ISR den SREG sichern.
2. Beim verlassen wiederherstellen, weißt Du überhaupt wann sie verlassen wird?
3. ADC Auslesen ADCL und ADCH sollen beide ausgelesen werden, auch wenn Du den Wert der in ADCL steht eventuell nicht brauchst.
4. Der Sprung aus der ISR nach serout:, das kann man irgendwie eleganter machen...
überleg mal, Du schaltest die Interrupts wieder ein, dann springst Du nach serout:, die Rücksprungadresse von dem Interrupt liegt aber noch auf dem Stack, je nachdem wie lange serout: braucht tritt eventuell ein neuer Interrupt, obwohl, der alte noch nicht abgearbeitet ist, also wieder Rücksprungadresse auf den Stack, und so weiter, irgendwann knallt es, und die Bits laufen aus dem AVR auf die Platine raus.

Schau Dir mein Programm an, ich will nicht sagen, daß ich es perfekt geschrieben habe, aber so ist es mal schöner, also im Interrupt, ein Flag setzen, daß die Wandlung fertig ist, in der Hauptschleife, regelmäßig den Flag überprüfen, und wenn gesetzt, dann Ausgabe über den UART(davor noch was umrechnen) und zum Schluß den Flag wieder löschen.

Hier in Forum haben wir mal ein riesen Thread gemacht hmmm, such mal nach Assembler für anfänger, oder so, da sind paar brauchbare Sachen drin.

wenn noch was unklar ist, dann einfach fragen.

Gruß Sebastian