Forum: Mikrocontroller und Digitale Elektronik 16 bit Integer- lowbyte verschluckt


von Chris (Gast)


Lesenswert?

Sers Leute,
folgende Systemvorraussetzungen: STK500, ATMega8515, CodeVision
Compiler.
Ich habe ein Problem und zwar möchte ich eine 16 bit-Integer als 2 Byte
(highbyte, lowbyte) über uart verschicken. Das ganze geht so:

int a=420;      //420 -> 0x01A4
putchar(a>>8);  //sende highbyte  0x01
putchar(a);     //sende lowbyte   0xA4

Das Ganze ist in einem größeren Programm untergebracht, wobei mein
Flash schon mit 70% ausgelastet ist.
Das Problem ist, dass nun das lowbyte nur noch als 0x00 ankommt.
Setze ich nun diesen Programteil als eigenständiges lauffähiges
Programm auf, funktioniert die Übertragung einwandfrei.
Mit was könnte dieses Problem zusmmenhängen?
Danke bereits schon im voraus für eure postings
Gruß Christian

von Gerhard Gunzelmann (Gast)


Lesenswert?

Hallo

ich bin kein AVR Spezialist. Aber ist es nicht so, daß "int" die
Registerbreite repräsentiert, also hier 8 Bit ? Muß für 16 Bit nicht
sowas wie int16 spezifiziert werden ?


Gerhard

von Sssssss (Gast)


Lesenswert?

Hi!

Hast du mal das hier probiert:
int a=420;      //420 -> 0x01A4
putchar((a>>8)&0xFF);  //sende highbyte  0x01
putchar(a&0xFF);     //sende lowbyte   0xA4

Evtl vermasselt der Compiler irgendwas bei der 16->8Bit Umwandlung.

Oder shiftet er gar a um 8 nach rechts ? :-X

von Jens M. (jensbert)


Lesenswert?

Hallo,

die Maske für das zweite putchar ist dringend zu empfehlen, denn
putchar bekommt einen Integer als Parameter, schneidet also das
Highbyte nicht weg.

Was damit aber praktisch angefangen wird - außer im EOF-Fall ein -1
übertragen zu können -, weiss ich nicht.

Gruß

Jens

von Rolf Magnus (Gast)


Lesenswert?

In C sind Zeichenliterale (z.B. 'x') vom Typ int. Alle
Standardfunktionen, die mit einzelnen Zeichen arbeiten, verwenden dafür
int.

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.