Forum: Mikrocontroller und Digitale Elektronik Hexzahl per Assembler in Dezimal


von Ben B. (bambule)


Lesenswert?

Hallo,

ich bin gerade dabei den Mikrocontroller Cypress CY8C29466 (mit 
PSoC-Designer) mit Assembler zu programmieren. Ich habe eine Reihe von 
Temperatursensoren, die ihre Daten per CAN übertragen. Diese Werte sind 
in einer Tabelle als Hexzahlen dargestellt. Ich soll nun diese in 
Dezimalzahlen umwandeln, ohne ein externes Programm dafür zu verwenden. 
Das heißt, man bekommt eine Tabelle mit Dezimalzahlen, womit auch Laien 
etwas anfangen können.

Habt ihr vielleicht eine Idee wie das möglich wäre?

ich hoffe ihr habt die Problemstellung verstanden ;)

Grüße

Ben

: Bearbeitet durch User
von Karl H. (kbuchegg)


Lesenswert?

Ben Bambule schrieb:

> Habt ihr vielleicht eine Idee wie das möglich wäre?


zunächst mal gibt es im Computer keine UNterscheidung zwischen Hex und 
Dezimal. Alles sind erst mal nur Zahlen, dargestellt durch Bits die 0 
oder 1 sein können.

Ob in dieser Tabelle dann Hex-Zahlen oder Dezimalzahlen aufscheinen, ist 
eine reine Frage der Schreibweise, aber die Zahlen sind nach wie vor 
dieselben.

D.h. dein Weg ist also: du kriegst die Werte von den Sensoren. Wie geht 
es weiter? Wie kommen die in die Tabelle? Was ist das überhaupt für eine 
Tabelle? Was passiert mit der? Wie kann ein Benutzer diese Tabelle 
ansehen?

Speziell der letzte Punkt könnte der wichtige sein. Denn wenn die 
Tabelle die Werte als Bytes vom Sensor speichert, dann liegt genau beim 
letzten Punkt dein Angriffspunkt. Anstatt die Werte als Hex-Zahlen 
auszugeben, werden sie eben als Dezimalzahlen ausgegeben.
Ich nehme mal an, dass es sich um 1 Byte Werte handelt. D.h. die 
Messwerte können nur im Bereich 0 bis 255 liegen.

Dann zieht man eben solange 100 ab, bis man einen Unterlauf hat und 
zählt mit, wie oft das ging. Diese ANzahl ist die 100-er Stelle, die 
auszugeben ist.
Danach bleibt nur noch eine Zahl im Bereich 0 bis 99 übrig. Selbes 
Spiel: solange 10 abziehen, bis man einen Unterlauf hat und dabei 
mitzählen wie oft man das machen konnte. Diese Anzahl ist die 10-er 
Stelle, die auszugeben ist.
Und dann bleiben noch die Einer übrig. Die können direkt ausgegeben 
werden.

: Bearbeitet durch User
von Cyblord -. (cyblord)


Lesenswert?

Bitte werd dir erstmal über den Unterschied zwischen Zahlenwerten und 
Zahlendarstellung klar.

Und deine Darstellung des Sachverhalts ist eine Katastrophe. Bitte denk 
dran, WIR kennen deine Aufgabe nicht. Die paar Brocken erklären gar 
nichts.

> Diese Werte sind in einer Tabelle als Hexzahlen dargestellt.
Grade wurden sie noch per CAN übertragen und jetzt stehen sie in einer 
Tabelle? Wie das? Ist da ein Display dran oder wie?

>Ich soll nun diese in
> Dezimalzahlen umwandeln, ohne ein externes Programm dafür zu verwenden.
Also du hast erstmal ZAHLENWERTE in deinem Controller vorliegen. Die 
haben erstmal keine Darstellung als HEX, BIN oder DEZ (ausser die liegen 
dir als String vor, dann muss man den String vorher zu einem Wert 
machen).

Jetzt sollst du diese Werte dezimal ausgeben? Also in einen String 
umwandeln und dann z.B. auf einem Display ausgeben?

Dazu kann man sich z.B. die ITOA Funktionen von C anschauen und dort 
abgucken wie das gemacht wird, und dann in ASM nachprogrammieren. Oder 
du suchst nach einer fertigen ASM Routine die eine Zahl in einen String 
umwandelt.

gruß cyblord

von piet (Gast)


Lesenswert?

Vielleicht hilft Dir auch die application note AN204, von atmel, weiter. 
Da ist eine AVR-Assemblerroutine beschrieben, mit der man binär- bzw. 
hex-Zahlen in BCD-Form umwandelt.

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.