Was mir auffällt:
  1. Teilweise werden die Register nich 'voll' initialisiert, sondern nur mit sbi/cbi einselne Bits gesetzt. Grundsätzlich sollte man immer allse Config-Bits setzen! Ausserdem sollte man wegen der Portierbarkeit implizite Annahmen vermeiden, also
    Code:
    ...|(1<<UCSZ0)|(1<<UCSZ1)
    // anstatt
    ...|(3<<UCSZ0)
  2. Beim Berechnen der Baudrate über Macros gibt es Rundungsfehler, wenn die Baudrate nicht genau passt. Das ist bei dir mit 4MHz der Fall. Die Rundung geht idR nicht in die Richtung des kleinsten Fehlers. Da du nicht auf eine 'klassische' Baudrate rauskommen musst, weil ja beide AVRs 'krumm' bei 4MHz getaktet sind, würd ich auf eine andere Baudrate gehen, vielleicht 20kbps oder 16kbps.
  3. Die Leitungen hast du ja gekreuzt...?

Ich hab mit dem Mega8 keine Probleme, weder im Poll- noch im Interrupt-Betrieb. Ich hab's einfach so gemacht, wie's im Manual geschrieben steht. Allerdings in C...