Rainbow-electronics ATmega8515L Instrukcja Użytkownika Strona 142

  • Pobierz
  • Dodaj do moich podręczników
  • Drukuj
  • Strona
    / 223
  • Spis treści
  • BOOKMARKI
  • Oceniono. / 5. Na podstawie oceny klientów
Przeglądanie stron 141
142
ATmega8515(L)
2512A–AVR–04/02
Receiving Frames with 9 Data
Bits
If 9-bit characters areused(UCSZ=7)theninthbit must be readfrom theRXB8 bit in
UCSRBbefore reading the lowbitsfrom the UDR. Thisruleapplies to the FE, DOR, and
PEstatusflags aswell.Readstatusfrom UCSRA, then data from UDR. Reading the
UDR I/Olocation will change the state of the receive bufferFIFOandconsequently the
TXB8,FE,DOR, and PEbits, which all are stored in the FIFO, will change.
The following codeexample shows a simple USART receive function that handlesboth
9-bit characters and the statusbits.
Note: 1. Theexample codeassumes that the part specificheaderfileis included.
Assembly Code Example
(1)
USART_Receive:
;
Wait for data to be received
sbis UCSRA, RXC
rjmp USART_Receive
;
Get status and ninth bit, then data from buffer
in r18, UCSRA
in r17, UCSRB
in r16, UDR
;
If error, return -1
andi r18,(1<<FE)|(1<<DOR)|(1<<PE)
breq USART_ReceiveNoError
ldi r17, HIGH(-1)
ldi r16, LOW(-1)
USART_ReceiveNoError:
;
Filter the ninth bit, then return
lsr r17
andi r17, 0x01
ret
CCode Example
(1)
unsigned int USART_Receive( void )
{
unsigned char status, resh, resl;
/*
Wait for data to be received
*/
while ( !(UCSRA & (1<<RXC)) )
;
/*
Get status and ninth bit, then data
*/
/*
from buffer
*/
status = UCSRA;
resh = UCSRB;
resl = UDR;
/*
If error, return -1
*/
if ( status & (1<<FE)|(1<<DOR)|(1<<PE) )
return -1;
/*
Filter the ninth bit, then return
*/
resh = (resh >> 1) & 0x01;
return ((resh << 8) | resl);
}
Przeglądanie stron 141
1 2 ... 137 138 139 140 141 142 143 144 145 146 147 ... 222 223

Komentarze do niniejszej Instrukcji

Brak uwag