Atmel ATmega328P Xplained Mini MEGA328P-XMINI MEGA328P-XMINI Ficha De Dados

Códigos do produto
MEGA328P-XMINI
Página de 657
178
ATmega48A/PA/88A/PA/168A/PA/328/P [DATASHEET]
Atmel-8271H-AVR- ATmega-Datasheet_08/2014
20.6.1 Sending Frames with 5 to 8 Data Bit
A data transmission is initiated by loading the transmit buffer with the data to be transmitted. The CPU can load 
the transmit buffer by writing to the UDRn I/O location. The buffered data in the transmit buffer will be moved to 
the Shift Register when the Shift Register is ready to send a new frame. The Shift Register is loaded with new 
data if it is in idle state (no ongoing transmission) or immediately after the last stop bit of the previous frame is 
transmitted. When the Shift Register is loaded with new data, it will transfer one complete frame at the rate 
given by the Baud Register, U2Xn bit or by XCKn depending on mode of operation.
The following code examples show a simple USART transmit function based on polling of the Data Register 
Empty
 (UDREn) Flag. When using frames with less than eight bits, the most significant bits written to the UDRn 
are ignored. The USART has to be initialized before the function can be used. For the assembly code, the data 
to be sent is assumed to be stored in Register R16
Note:
1.
The function simply waits for the transmit buffer to be empty by checking the UDREn Flag, before loading it with 
new data to be transmitted. If the Data Register Empty interrupt is utilized, the interrupt routine writes the data 
into the buffer.
20.6.2 Sending Frames with 9 Data Bit
If 9-bit characters are used (UCSZn = 7), the ninth bit must be written to the TXB8 bit in UCSRnB before the low 
byte of the character is written to UDRn. The following code examples show a transmit function that handles 9-
bit characters. For the assembly code, the data to be sent is assumed to be stored in registers R17:R16.
Assembly Code Example
USART_Transmit:
Wait for empty transmit buffer
in r16, UCSRnA
sbrs r16, UDREn
rjmp
USART_Transmit
Put data (r16) into buffer, sends the data
out
UDRn,r16
ret
C Code Example
void USART_Transmit( unsigned char data )
{
/* Wait for empty transmit buffer */
while ( !( UCSRnA & (1<<UDREn)) )
;
/* Put data into buffer, sends the data */
UDRn = data;
}