209
8271D–AVR–05/11
ATmega48A/PA/88A/PA/168A/PA/328/P
be used to check that there are no unread data in the receive buffer. Note that the TXCn Flag
must be cleared before each transmission (before UDRn is written) if it is used for this purpose.
The following simple USART initialization code examples show one assembly and one C func-
tion that are equal in functionality. The examples assume polling (no interrupts enabled). The
baud rate is given as a function parameter. For the assembly code, the baud rate parameter is
assumed to be stored in the r17:r16 registers.
Note:
1.
See ”About Code Examples” on page 8.
Assembly Code Example
USART_Init:
clr
r18
out
UBRRnH,r18
out
UBRRnL,r18
; Setting the XCKn port pin as output, enables master mode.
sbi
XCKn_DDR, XCKn
; Set MSPI mode of operation and SPI data mode 0.
ldi
r18, (1<<UMSELn1)|(1<<UMSELn0)|(0<<UCPHAn)|(0<<UCPOLn)
out
UCSRnC,r18
; Enable receiver and transmitter.
ldi
r18, (1<<RXENn)|(1<<TXENn)
out
UCSRnB,r18
; Set baud rate.
; IMPORTANT: The Baud Rate must be set after the transmitter is enabled!
out
UBRRnH, r17
out
UBRRnL, r18
ret
C Code Example
void
USART_Init(
unsigned int
baud )
{
UBRRn = 0;
/* Setting the XCKn port pin as output, enables master mode. */
XCKn_DDR |= (1<<XCKn);
/* Set MSPI mode of operation and SPI data mode 0. */
UCSRnC = (1<<UMSELn1)|(1<<UMSELn0)|(0<<UCPHAn)|(0<<UCPOLn);
/* Enable receiver and transmitter. */
UCSRnB = (1<<RXENn)|(1<<TXENn);
/* Set baud rate. */
/* IMPORTANT: The Baud Rate must be set after the transmitter is enabled
*/
UBRRn = baud;
}