USART ISR on TXC breaking delays from ?
The ISR is incorrectly defined, the ISR names must be identical how AVR-LIBC defines them. So as it is now, every time your code sends the letter 'A' to data register, it is transmitted out and will cause a transmit complete interrupt, which is undefined and AVR ends up running main again to send another letter and will loop this forever.

Another issue might be that you define the FOSC after including delay.h, so it is possible that delay.h does not know the clock rate so delay times are incorrect.