mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik 16 bit Zahlen umwandeln


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Ich möchte im PC in einem C-Programm eine integer-dezimal-Zahl mit
einem Wertebereich von -32000 bis +32000 so zerlegen, dass ich zwei
bytes (highbyte und lowbyte) erhalte, die die Zahl im Zweierkomplement
darstellen.Wie wandele ich das in C am elegantesten um??

Die so "berechneten" bytes sende ich anschließend per UART an den
AVR.
Im AVR möchte ich das aus Platzgründen nicht berechnen.

Danke für alle Tips!!!

Peter.

Autor: Gerhard Gunzelmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Peter

in welcher Form hast Du denn Deine integer-dezimal-Zahl ? Ist das ein
String ? dann kannste mit atoi() den integer berechnen !
Oder liegt die zahl schon als Hexzahl vor, die nur als Dezimalzahl
angezeigt wird ?

Gerhard

Autor: Dirk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaub das geht so:

int word = 0xfeda; (Beispiel)

word_copy = word; (Kopie für später)

word &= 0xff; (blende die unteren 8 Bit aus; Ergebnis = 0xfe00)
word = word >> 8; (Ergebnis = 0x00fe)
unsigned char high_byte = word; (Jetzt müsste 0xfe im low_byte stehen)

word_copy &= 0xff00 (blende die oberen 8 Bit aus; Ergebnis = 0x00da)
unsigned char low_byte = word_copy;

So oder so ähnlich habe ich das gemacht.
Dirk.

Autor: ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

Du kannst es auch über eine Union machen, mit der Du wahlweise auf das
High- oder Lowbyte zugreifst, oder direkt auf den Integerwert. Hierbei
musst Du nur auf das Format achten (Motorola/Intel), falls es da bei
dir Unterschiede gibt.

Viele Grüße,

Ralf

www.ralf-hochhausen.de

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
unsigned char lowbyte, highbyte;
int zahl;

lowbyte = zahl & 0xff;
highbyte = zahl >> 8;

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo zusammen,

erstmal vielen dank für die Tipps!

die bytes (highbyte und lowbyte) zu trennen ist die eine Sache. Wie
bekomme ich das aber so hin dass ich das Zweierkomplement habe???

Ich weiß nicht mehr weiter, habe schon so vieles ausprobiert...

Danke nochmals,

Peter.

Autor: Gerhard Gunzelmann (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Zweierkomplement ist Bitinverse + 1

also z.B.
-1 = FE + 1 = FF
-2 = FD + 1 = FE


Gerhard

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Gerhard, hallo Thorsten,

Danke für eure beiden Tips!! Es klappt nun so wie ich es wollte!!


Tausend Dank!!

Peter.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.