Nicht einfach zu finden: diesen Fehler hast Du gut versteckt!
Dein erster Timer-Int setzt das T-Flag. Ok, aber wo setzt Du es wieder
zurück? Ich finde kein CLT, nirgendwo. Beim nächsten Aufruf ist deshalb
das T-Flag schon gesetzt, bevor der Timer überläuft.
Die Konstruktion mit den Timer-Ints kannst Du Dir übrigens sparen.
Einfach immer das I-Flag im SREG auf Null lassen und statt der Setzerei
mit dem T-Flag im Int das entsprechende Timer0-Int-Flag abfragen. Wenn
das I-Flag im SREG nicht gesetzt ist, dann bleibt das Timer-Int-Flag
immer gesetzt und Du kannst es auch ohne Int-Routine auslesen. So wie
die Timer-Ints bei Dir gestrickt sind, kannst Du sowieso keine Ints auch
noch für andere Zwecke verwenden.
Was willst Du mit dieser Konstruktion eigentlich erreichen:
> instruction: cbi PORTB, 0x1
> out PORTB, missage
Leider hast du Deine Gedankengänge nicht als Kommentar hinzugefügt, aber
mit diesem Ding kann irgendwas nicht stimmen. Vier- oder
Acht-Bit-Ansteuerung? Was ist missage? Wieso musst Du in der ersten
Zeile das Bit 0 zurücksetzen, wenn Du im nächsten Command sowieso alle
Bits mit "missage" vollschreibst? Dito weiter unten im Programm.
Kurz: ein wenig kommentieren müsstest Du das schon, wenn man sich nicht
den ganzen Abend durch die Zeilen quälen soll.
MfG
Gerd