
176
2513L–AVR–03/2013
ATmega162/V
Receiving Frames with
5 to 8 Data Bits
The Receiver starts data reception when it detects a valid start bit. Each bit that follows the start
bit will be sampled at the baud rate or XCK clock, and shifted into the Receive Shift Register until
the first stop bit of a frame is received. A second stop bit will be ignored by the Receiver. When
the first stop bit is received, i.e., a complete serial frame is present in the Receive Shift Register,
the contents of the Shift Register will be moved into the receive buffer. The receive buffer can
then be read by reading the UDR I/O location.
The following code example shows a simple USART receive function based on polling of the
Receive Complete (RXC) Flag. When using frames with less than eight bits the most significant
bits of the data read from the UDR will be masked to zero. The USART has to be initialized
before the function can be used.
Note:
1. The example code assumes that the part specific header file is included.
The function simply waits for data to be present in the receive buffer by checking the RXC Flag,
before reading the buffer and returning the value.
USART_Receive:
; Wait for data to be received
sbis
UCSRA, RXC
rjmp
USART_Receive
; Get and return received data from buffer
in
r16, UDR
ret
C Code Example
unsigned char
USART_Receive( void )
{
/* Wait for data to be received */
while
( !(UCSRA & (1<<RXC)) )
;
/* Get and return received data from buffer */
return
UDR;
}