[an error occurred while processing this directive]
|
unsigned int USART_Receive( void )
{
unsigned char status, resh, resl;
/* Ожидание окончания приема данных */
while ( !(UCSRA & (1 << RXC)) );
/* Опрос статусных бит и 9-го бита данных перед чтением данных из буфера */
status = UCSRA;
resh = UCSRB;
resl = UDR;
/* Если ошибка, то возврат -1 */
if ( status & (1 << FE)|(1 << DOR)|(1 << UPE) )
return -1;/* Выделение 9-го бита данных перед выходом */
resh = (resh >> 1) & 0x01;
return ((resh << 8) | resl);
}
но если бит RXB8 не сбросится то второе слово будет считано ошибочно..