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 =)
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...
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...
'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
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?
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
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.
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
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 ...
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.
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 ...