Thomas, jetzt ganz langsam,
Du hast ein chaos im Deinem Programm, da blikt wirklich kein Mensch meh durch....

z.B. hier:

pruefTonleiter:
clr zaehlerSek ;Zähler auf 0 setzen
rjmp ladeTon ;nächsten Ton laden
rjmp main ;sonst wieder zurück zu "main:"

wozu springst Du nach ladeTon,könnte das nicht direkt drunter ?
und rjmp main
Da kommt er wohl nie hin , oder ?

oder das :

TonAus:
sbiw ZL,1 ;Z um 1 erniedrigen
ldi tmp, 0 ;Timer mit 0 laden, damit er nicht mehr abspielt
out TCNT0, tmp
rjmp main ;wieder zurück zu "main:"

wozu Zl -1 ?
bist Du Dir sicher daß 0 den Timer wirklich abschaltet?

@Florian, wie gesagt, ich klage nicht, es gibt andere Wege Programme wirksam zu debuggen!
Und es gibt echt geile Editoren , z.B. Emacs geht in der Konsole, und ist das Schweizer Taschenmesser unter den Editoren.