2 arttab
правильно так:
while( UCSR1A & 0x06 );
и кто вам сказал что это для компилятора не очевидно??? Если вашему комилятору это не очевидно - выбросьте его

... моему (iar4.11a) очевино и все работает:
1075: while( UCSR1A & 0x06 );
+00000725: 9100009B LDS R16,0x009B Load direct from data space
+00000727: 7006 ANDI R16,0x06 Logical AND with immediate
+00000728: F7E1 BRNE PC-0x03 Branch if not equal
може у вас что-то не работает (виснет) по другой причине

? например промому что вы ждете изменения одного из битов (U2X1) который никогда не изменится - он может измениться только вашей программой.