beautypg.com

Rainbow Electronics ATmega3290P_V User Manual

Page 172

background image

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<

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<

;

/* Get status and 9th bit, then data */

/* from buffer */

status = UCSR0A;

resh = UCSR0B;

resl = UDRn;

/* If error, return -1 */

if

( status & (1<

return

-1;

/* Filter the 9th bit, then return */

resh = (resh >> 1) & 0x01;

return

((resh << 8) | resl);

}