Forum: Mikrocontroller und Digitale Elektronik ASCII Zeichen in hex


von kevin (Gast)


Lesenswert?

Hallo,
Ich habe ein folgendes Problem, ich programmiere in Assembler einen PIC 
und empfange mehrere ASCII-Zeichen von einem anderen PIC, jedoch 
bräuchte ich deren hex Wert um weiterarbeiten zu können.
Kann mir vlt jemand helfen wie ich die einzelnen ASCII-Zeichen, in 
Assembler, wandeln kann ?? (nur von 0-9 und A-F (zb: A -> 0x41))
Vielen Dank schon mal =)

von Peter (Gast)


Lesenswert?

Ein Byte ist und bleibt immer dasselbe Byte, egal wie Du es darstellst!

Ob Binär, Oktal, Hexadezimal, Decimal oder als Character, es ist immer 
der selbe Wert, einfach anderst dargestellt...

von kevin (Gast)


Lesenswert?

ja gut, danke weiss ich
dann sag ma so ich brauch das ASCII-Zeichen in hex dargestellt um 
weiterarbeiten zu können damit und das in Assembler am PIC anders 
darzustellen ist derzeit noch mein Problem...

von willi (Gast)


Lesenswert?

'A' = 41 hex = 101 oct = 65 dez = 01000001 bin

wobei die "darstellung" in einem µC immer binär sein wird, die 
darstelung auf einem display (meistens) 'A' sein wird

von willi (Gast)


Lesenswert?

>dann sag ma so ich brauch das ASCII-Zeichen in hex dargestellt

wo brauchst du das zeichen in hex dargestellt?

von Karl H. (kbuchegg)


Lesenswert?

kevin schrieb:
> ja gut, danke weiss ich
> dann sag ma so ich brauch das ASCII-Zeichen in hex dargestellt um
> weiterarbeiten zu können damit und das in Assembler am PIC anders
> darzustellen ist derzeit noch mein Problem...

Der ASCII Code von 0 ist hex 30

Du kriegst von der Schnittstelle die hex 30. Wenn du von diesem Wert 
also hex 30 (dezmal 48) abziehst, erhältst du 0.
Du kriegst von der Schnittstelle beispielsweise hex 34 (das ist der 
ASCII Code für '4'). Wenn du davon wieder hex 30 (also den ASCII Code 
für 0) abziehst, verbleiben 4.

-> Deine Schlussfolgerung?

Wenn du allerdings von der anderen Seite hex 41 (oder was größeres) 
kriegst, dann kann das nicht mehr im Bereich 0 bis 9 sein (9 wäre hex 
39), sondern 'A' bis 'F'.
von hex 41 musst du also was anderes abziehen, um den richtigen 
Zahlenwert zu bekommen.

? Deine Schlussfolgerung?

So. Jetzt kriegst du von der Schnittstelle 2 Bytes hintereinander, die 
den Text "A7" repräsentieren-
Oder in hex ausgedrückt  hex 41  und  hex 37

beide Teile hast du in ihre numerische Form überführt, du hast vorliegen 
hex 0A und hex 07
Jetzt musst du nur noch die beiden Teile zu einem Byte zusammenführen:
Aus hex 0A wird  hex A0  und wenn du da jetzt noch die 07 addierst, hast 
du hex A7

-> deine Schlussfolgerung?

von kevin (Gast)


Lesenswert?

Ich gehe anschließend in eine Tabelle um Werte für eine PWM zu erhalten, 
daher muss ich eben die Darstellung von ASCII in hex wandeln...

von willi (Gast)


Lesenswert?

dir ist aber schon bewusst, dass dein µC weder ASCII, noch hex, noch 
dezimal kennt, sondern nur mit der binären darstellung arbeitet?

ob du ein 'A' oder 41 hex oder 101 oct oder 65 dez an deinen µC sendest, 
es wird immer zu 01000001 bin

von kevin (Gast)


Lesenswert?

naja da is was dran, ich glaub da bekomm ich einfach etwas anderes 
geschickt als ich eigentlich dachte und dadurch steh ich jetzt an =)
aufjedenfall danke an euch falls es weitere probleme gibt werde ich mich 
melden
lg.

von willi (Gast)


Lesenswert?

du bekommst nix flasches geschickt, nur dein programm, das zur 
visualisierung dient, interpretiert den empfangenen wert anders und 
stellt ihn deshalb anders dar.

wenn ich einen weg messe und das ergebnis in zentimeter, meter, 
kilometer, fuss, doppelzoll, tagesritten, fingerlängen oder sonst wie 
darstelle, ändert das an der entfernung nix. nur die verständlichkeit 
wird gegebenenfalls einfacher

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Vermutlich will der Threadstarter nicht ein ASCII-Zeichen umwandeln, 
sondern gleich mehrere auf einmal, "123" soll zu 0x7B werden ...

von kevin (Gast)


Lesenswert?

Hallo noch einmal,
nach längeren probiern hab ich leider noch kein Ergebnis und bin jetzt 
durch erneutes hier hereinschauen draufgekommen, dass eigentlich genau 
das was rufus ansprach mein eigentliches problem ist, nur dass ich halt 
zwei ASCII-zeichen bekomme und umwandeln will ...

von Simon K. (simon) Benutzerseite


Lesenswert?

kevin schrieb:
> Hallo noch einmal,
> nach längeren probiern hab ich leider noch kein Ergebnis und bin jetzt
> durch erneutes hier hereinschauen draufgekommen, dass eigentlich genau
> das was rufus ansprach mein eigentliches problem ist, nur dass ich halt
> zwei ASCII-zeichen bekomme und umwandeln will ...

Also du bekommst HEX Zahlen als String übertragen und willst diese in 
jeweils 1 Byte "echte" HEX Zahlen umwandeln?
Dann hat Karl Heinz oben schon das passende für dich.

von kevin (Gast)


Lesenswert?

Stimmt eigentlich,
Vielen Dank für den Hinweis hab das anscheinend beim ersten mal 
übersehen
und das Tauschen von 0x0A zu 0xA0 kann ich eigentlich durch einfaches 
tauschen der Nibbles erreichen ...

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.