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
>dann sag ma so ich brauch das ASCII-Zeichen in hex dargestellt
wo brauchst du das zeichen in hex dargestellt?
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?
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...
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
Vermutlich will der Threadstarter nicht ein ASCII-Zeichen umwandeln, sondern gleich mehrere auf einmal, "123" soll zu 0x7B werden ...
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 ...
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.