Rainbow-electronics ATmega3290P_V Manual de usuario Pagina 172

  • Descarga
  • Añadir a mis manuales
  • Imprimir
  • Pagina
    / 375
  • Tabla de contenidos
  • MARCADORES
  • Valorado. / 5. Basado en revisión del cliente
Vista de pagina 171
172
ATmega329/3290/649/6490
2552H–AVR–11/06
The following code example shows a simple USART receive function that handles both
nine bit characters and the status bits.
Note: 1. See “About Code Examples” on page 8.
The receive function example reads all the I/O Registers into the Register File before
any computation is done. This gives an optimal receive buffer utilization since the buffer
location read will be free to accept new data as early as possible.
Assembly Code Example
(1)
USART_Receive:
; Wait for data to be received
sbis UCSR0A, RXC0
rjmp USART_Receive
; Get status and 9th bit, then data from buffer
in r18, UCSR0A
in r17, UCSR0B
in r16, UDRn
; If error, return -1
andi r18,(1<<FE0)|(1<<DOR0)|(1<<UPE0)
breq USART_ReceiveNoError
ldi r17, HIGH(-1)
ldi r16, LOW(-1)
USART_ReceiveNoError:
; Filter the 9th bit, then return
lsr r17
andi r17, 0x01
ret
C Code Example
(1)
unsigned int USART_Receive( void )
{
unsigned char status, resh, resl;
/* Wait for data to be received */
while ( !(UCSR0A & (1<<RXC0)) )
;
/* Get status and 9th bit, then data */
/* from buffer */
status = UCSR0A;
resh = UCSR0B;
resl = UDRn;
/* If error, return -1 */
if ( status & (1<<FE0)|(1<<DOR0)|(1<<UPE0) )
return -1;
/* Filter the 9th bit, then return */
resh = (resh >> 1) & 0x01;
return ((resh << 8) | resl);
}
Vista de pagina 171
1 2 ... 167 168 169 170 171 172 173 174 175 176 177 ... 374 375

Comentarios a estos manuales

Sin comentarios