Forum: Mikrocontroller und Digitale Elektronik bytes verbinden


von Aiwendil (Gast)


Lesenswert?

Hallo an alle

Ich schreibe gerade (als ziemlicher Hardware Anfänger) ein programm für 
einen Atmega 32, das (unbter anderem) daten über die RS232 erhält (bzw 
erhalten soll). Das Problem hierbei: eigentlich baruche ich 2byte große 
Integer, über RS232 werden aber nur 1Byte große versendet.
Meine (Teil-)Lösung:

das "Sendeprogramm" zerlegt die 2Byte großen Werte in je 2 1Byte große 
und sendet diese Nacheinander. Nur weiß ich jetzt nicht wie ich diese je 
1Byte großen werte in einer "Byte ariablen zusammenfassen kann.

hier mal ein Teil dessen was ich schon gecodet hab:
1
void getDaten(void) {
2
 uint8_t tempXL = -1;
3
 uint8_t tempXH = -1;
4
 uint16_t tempX = -1; 
5
 
6
 tempXL = usart_getc();
7
 tempXH = usart_getc(); 
8
  
9
 tempX = ??  
10
 
11
}


auf Hilfe hoffend:
Aiwendil

von G4st (Gast)


Lesenswert?

tempX = unsigned int;
tempX = tempXL | (tempXH>>8);
so ungefähr

von Thomas W. (thomas100)


Lesenswert?

so:
tempX = (tempXH <<8) | tempXL

von holger (Gast)


Lesenswert?

>tempX = unsigned int;
>tempX = tempXL | (tempXH>>8);
>so ungefähr

Nö

tempX = ((uint16_t)tempXH << 8) + tempXL;

von Karsten (Gast)


Lesenswert?

Nicht Nö! Die Lösung von Thomas Weyhrauch funktioniert auch. So 
intelligent ist der AVR-GCC dann nämlich doch schon.

von Aiwendil (Gast)


Lesenswert?

tja das gieng ja verdammt schnell!

DANKE!

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.