www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik konvertierung dez hex


Autor: jerome parlebas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
ich habe folgendes Problem bei dem ich seit Tagen nicht weiterkomme:

An USART1 empfange ich Daten von einem GSM-Modem, welche in das
Empfangsbuffer RX_BUFFER1 hineingeschrieben werden.

Bsp.: Empfang von R -> RX_BUFFER1[0]=data  wobei data=82

Diese Daten möchte ich auf einem Display sowohl als hex als auch als
ASCII-Zeichen darstellen.Die Darstellung als hex (%X) funktioniert, die
Ausgabe als ASCII-Zeichen (%c) jedoch nicht.

Das ASCII-Zeichen R entspricht ja 82dez bzw. 52hex. Also habe ich
folgenden Schritt eingefügt:

if(data==82){RX1[0]=0x52;} //"Umrechnung dez in hex"

d.h. die empfangenen Daten werden als hex-wert ins Empfangsbuffer
geschrieben.

Damit funktioniert alles, aber das kann doch nicht die beste Lösung
sein. Für data=0 bis data=255 ergeben sich 256 if-Abfragen !
Kann ich das nicht irgendwie besser lösen ?

Gruß Jerome

Autor: Rahul (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
kleine Berechnung:
Teile deine Dezimalzahl durch 16. Das Ergebnis ist die höherwertige
Stelle, und der ganzzahlige Rest ist die niederwertige Stelle.
In C gibt es doch eine Funktion, die die ganzzahlige Division (mit
Rest) bildet und dann noch eine, die dir nur den Rest liefert.
Bin momentan nicht mehr ganz in der Syntax von C drin, und weiss die
jetzt nicht aus dem Kopf. Eins war der "/" und das andere weiss ich
gerade nicht.
Gruß Rahul

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
die andere war %

Autor: jerome parlebas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Problem was ich habe liegt nicht in der reinen Umrechnung der
Zahlensysteme.

Nach dem von Dir beschriebenen Verfahren ergibt sich:

82dez:

82/16 = 5 Rest 2 -> 2 als niederwertige Stelle
5/16  = 0 Rest 5 -> 5 als höherwertige Stelle

also 52hex, was ja auch vollkommen richtig ist. Die Stellen können aber
je nach umzurechnender Dezimalzahl die Werte 0...9 und A...F annehmen.


Ich habe deswegen versucht ein solches "Umrechnungsprogramm" zu
schreiben indem ich einen string mit 4 Stellen definiere in der Art

string[0]=0;
string[1]=x;
string[2]= ergebnis höherwertige Stelle
string[3]= ergebnis niederwertige Stelle

An dieser Stelle komme ich aber nicht weiter. Ich kann dieses Ergebnis
(string mit 4byte) ja dem Empfangsbuffer nicht einfach durch

RX1_buffer[0]= string

zuweisen. Vielleicht ist diese Vorgehensweise ja auch falsch.

Gruß Jerome

Autor: crazy horse (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
const unsigned char ascii_tab[16]='0',..,'F';

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.