Rainbow-electronics ATmega8515L Manual do Utilizador Página 142

  • Descarregar
  • Adicionar aos meus manuais
  • Imprimir
  • Página
    / 223
  • Índice
  • MARCADORES
  • Avaliado. / 5. Com base em avaliações de clientes
Vista de página 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);
}
Vista de página 141
1 2 ... 137 138 139 140 141 142 143 144 145 146 147 ... 222 223

Comentários a estes Manuais

Sem comentários