mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik ASCII Zeichen in hex


Autor: kevin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 =)

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: kevin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: willi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: willi (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>dann sag ma so ich brauch das ASCII-Zeichen in hex dargestellt

wo brauchst du das zeichen in hex dargestellt?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: kevin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: willi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: kevin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: willi (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

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

Autor: kevin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: kevin (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ...

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.