Из трёх старших битов USART'ового регистра STATUS
вручную сбрасывается только бит TXCIF, только он R/W
for(i = 0; i < 128; i++)
{
putchar(i); // Выводы TxD и RxD соединены
while(!(USARTD0.STATUS & 0x80));// Ждём-с
delay_ms(10); // Бережёного бог бережёт
temp = USARTD0.STATUS;
USARTD0.STATUS = temp; //Попытка сбросить стоящие биты
// Сбросился только TXCIF
USARTD0.STATUS = temp; // Ещё одна
USARTD0.STATUS = temp; // и ещё
// RXCIF and DREIF стоят
j = getchar();
// А вот теперь RXCIF обнулился
}