El periférico USART de los Mega AVR tiene doble búfer de los datos seriales recibidos; El registro de cambio de recepción y el registro de datos de E / S USART 0 (UDR0) son los dos buffers.
EstopermitequeelprocesadorleadatosdeUDR0mientraselsiguientebytededatosyaseestádesplazandoalregistrodedesplazamientoderecepción.Cuandoserecibeunbitdeparada,losdatoscontenidosenelregistrodecambioderecepciónsetransferiránautomáticamenteaUDR0,yseestableceráelindicadorderecepcióncompletadeUSART(RXC0).
PuederecibirlosdatostanrápidocomolleganalleersiempreelbyterecibidodesdeUDR0tanprontocomoseestableceelindicadorRXC0.Estosepuedehacerconelsondeo:
setup_usart_for_asynchronous_data_at_desired_baudrate();//receive64bytesuint8_trxBuffer[64];uint8_trxBufferIndex=0;while(rxBufferIndex<64){while(!(UCSR0A&(1<<RXC0)));//waituntilanewdatabytehasbeenreceivedrxBuffer[rxBufferIndex]=UDR0;//storethebyteinthebuffer}
Sideseaprocesarcosasensegundoplanomientrasrecibedatos(enlugardeesperarquelosdatoslleguenfotogramaafotograma),puedehacerlomismoconlasinterrupciones.PuedeconfigurarunainterrupciónparaqueseactivecadavezquesetransfieraunnuevomarcodedatosaUDR0,yluegomoverlosdatosrecibidosaunbúferdentrodelcódigodelarutinadeserviciodeinterrupción.
ParaobtenermásinformaciónsobreelperiféricoUSART,consulteel hoja de datos
Si necesita recibir más de un bus serie asíncrono simultáneamente, tendrá que sondear los puertos IO y realizar un procesamiento bastante complejo para extraer los datos en el software.
Como alternativa, quizás desee considerar I2C o SPI en su lugar. Estos buses le permiten conectar varios chips al mismo tranceiver serie de hardware.