16 bit Integer- lowbyte verschluckt

Gast #214920
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
Gast #214922
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
#214923
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

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