Цитата(west329_ @ Dec 20 2007, 15:24)

int putchar(int c)
{
// if (_textmode && c == '\n')
putchar('\r');
//while ((USR & 0x20) == 0) // UDRE, data register empty
// ;
while ( !( UCSRA & (1<<UDRE)) );
UDR = c;
return c;
}
Вы в функции int putchar(int c) вызываете putchar('\r'); т.е. саму себя и происходит зацикливание не дойдя до строчки UDR = c;
Все может быть и быть все может, и лишь того не может быть-чего уж точно быть не может, хотя..и это может быть.