Zahl >1Byte über USART-Interrupt auswerten

Gast #1976769
Lesenswert?

Hallo,
ich sende aus meiner SW ein High- und LowByte und empfange es mit meinem 
ATmega32 via USART-Interrupt. Allerdings funktioniert das nicht mit 
Zahlen >1 Byte.
Wie stelle ich es an um Werte bis 512 auszuwerten?
Vielen Dank!

RESET_START:

LDI temp, LOW(RAMEND)
OUT SPL, temp
LDI temp, HIGH(RAMEND)
OUT SPH, temp

//outputs
LDI temp, 0xFF
OUT DDRA, temp
LDI temp, 0x0F
OUT DDRC, temp

// init Interrupts
LDI temp, (1<<ISC01) | (1<<ISC11)
OUT MCUCR, temp
LDI temp, (1<<INT0) | (1<<INT1)
OUT GICR, temp
//InitUSART
CLR temp
OUT UBRRH, temp
LDI temp, ((CLOCK/4000000)-1)
OUT UBRRL, temp

LDI temp, (1<<URSEL)|(3<<UCSZ0)|(1<<USBS)
OUT UCSRC, temp
IN temp, UDR
CLR temp
OUT UCSRA, temp
SBI UCSRB, RXCIE
SBI UCSRB, RXEN
      SEI
loop:    RJMP  loop
//Interrupt
USART_RXC:
    in R4, HIGH(udr)
    in R5, LOW(udr)

    //rcall  binBCD

    OUT    PORTA, R3
    OUT    PORTC, R2

    RETI
#1976809
Lesenswert?

1
USART_RXC:
2
    in R4, HIGH(udr)
3
    in R5, LOW(udr)
4

5
    //rcall  binBCD
6

7
    OUT    PORTA, R3
8
    OUT    PORTC, R2
9

10
    RETI

Du musst schon warten, bis beide Bytes da sind!
Wenn 2 Bytes daherkommen, werden auch 2 Interrupts ausgelöst. Für jedes 
einer. Das heißt du zählst mit, der wievielte Interrupt es ist und bei 
jeweils jedem 2.ten sind beide Bytes da. Das jeweils andere musst du 
eben in der Zwischenzeit irgendwo zwischenspeichern.



    in R4, HIGH(udr)
    in R5, LOW(udr)

darüber schweigen wir mal lieber.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren