Datasheet

173
ATtiny828 [DATASHEET]
8371A–AVR–08/12
17.6.5 Disabling the Transmitter
Clearing TXEN will disable the transmitter but the change will not become effective before any ongoing and pending
transmissions are completed, i.e. not before the transmit shift register and transmit buffer register are cleared of data to
be transmitted. When disabled, the transmitter will no longer override the TxD pin.
17.7 Data Reception – The USART Receiver
The USART receiver is enabled by writing the Receive Enable bit (RXEN) (see “UCSRB – USART Control and Status
Register B” on page 185). When the receiver is enabled, the normal operation of the RxD pin is overridden by the
USART and given the function as the receiver’s serial input. The baud rate, mode of operation and frame format must be
set up once before any serial reception can be done. If synchronous operation is used, the clock on the XCK pin will be
used as transfer clock.
17.7.1 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 then 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 it will be moved into the receive buffer. The receive buffer can then be read by
reading UDR.
The following code example shows a simple USART receive function based on polling of the Receive Complete flag
(RXC). 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. See “Code Examples” on page 7.
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.
Assembly Code Example
(1)
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
(1)
unsigned char USART_Receive( void )
{
/* Wait for data to be received */
while ( !(UCSRA & (1<<RXC)) )
;
/* Get and return received data from buffer */
return UDR;
}