- MultiPlus Wechselrichter Insel und Nulleinspeisung Conrad         
Ergebnis 1 bis 8 von 8

Thema: BCD in Hexa umwandeln

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    01.12.2004
    Ort
    Wien
    Alter
    39
    Beiträge
    74

    BCD in Hexa umwandeln

    Hi
    Wir arbeiten in der Schule im Moment mit Assembler und Amtel Prozessoren.
    Mein Leher gab mir die Aufgabe einen 4 stelligen BCD-Hex Wandler zu porgrammieren.


    mein erster Ansatz wäre nun dieser gewesen:
    583 in Hex:
    583 / 16 = 36 Rest 7
    36 / 16 = 2 Rest 4
    2 / 16 = 0 Resr 2

    Hex: 247

    Dann is mir eingefallen,dass ich ja nicht dividieren kann,da es eine dez zahl ist,und das Ergbniss nicht stimmen würde.

    hatt wer eine Idee wie man diese Aufgabe lösen könnte?


    mfg

    BIG_Muzzy

  2. #2
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    15.07.2004
    Alter
    39
    Beiträge
    807
    Du ziehst von der Zahl 583 die Zahl 16 ab und zählst wie oft das geht. Die Anzahl, "wie oft es geht" ist dein Ergebnis ganzahliger Division und das was übrig bleibt ist... joar das was übrig bleibt, der Rest halt. Das Schwänzen was du für die Hexzahl brauchst.

  3. #3
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    19.02.2005
    Alter
    36
    Beiträge
    470
    Dividieren duch 2erPotenzen ist easy: einfach Binär nach rechts schieben ( shiften ), mit mahl 2erPotenzen eifach ein leftshift
    Können neue MEGAS nicht Dividieren? also Multipizieren können sie aber Div?

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    17.02.2006
    Alter
    54
    Beiträge
    781
    Die Megas können nicht dividieren und werden es wohl auch nie können, für sowas sind DSPs zuständig.
    Die AVR32-er können das wahrscheinlich (sind ja DSPs), aber die haben mit den alten AVRs außer dem Namen nicht viel gemein.

    Wenn du BCDs in Binärwerte umwandeln willst (im Grunde macht es keinen Unterschied ob binär oder hexadezimal: Die Schreibweise im Prozessor ist immer binär, nur im Programmtext werden die Binärzahlen durch hexadezimalwerte ersetzt um's übersichtlicher zu machen), würde ich mir nacheinander die 4 Bits von jeder Stelle nehmen und ne Art for-Schleife bauen. Diese wird so oft durchlaufen, wie die jwlg. Ziffer groß ist. Bei jedem Durchlauf wird ne 1 für die 1er-Stelle, ne 10 für die 10er-Stelle usw. zuu nem Ergebnisregister addiert.
    Das muss halt für jede Stelle ein mal gemacht werden, danach hast du das Ergebnis in angesprochenem Ergebnis-Register liegen.

    MfG

  5. #5
    Benutzer Stammmitglied
    Registriert seit
    01.12.2004
    Ort
    Wien
    Alter
    39
    Beiträge
    74
    Danke für eure Antworten

    Also eine einfache schnelle Möglichkeit gibt es da wohl nicht.
    Werde eure Vorschläge mal versuchen umzusetzten.

    Hatte auch die Idee das über eine Tabelle zu machen,mit 2 stellen is das machbar, aber für 4 sind es einfach zu viele Möglichkeiten.

    mfg

    BIG_Muzzy

  6. #6
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    73
    Beiträge
    11.077
    Hallo BIG Muzzy!

    Ich bin leider ein PIC user und kenne die Befehle der Atmel Prozessoren nicht. Am einfachsten geht dividieren durch 16 mit swapen von nibbles.

    MfG

  7. #7
    Erfahrener Benutzer Roboter Genie
    Registriert seit
    15.07.2004
    Alter
    39
    Beiträge
    807
    Gute idee, bin gar nicht drauf gekommen weil ich es zu fuss gemacht hab. Mit

    swap 'registername'

    lassen sich die nibbles vertauschen, das entspricht 4 shifts bzw. eine binäre division durch 16.

  8. #8
    Super-Moderator Robotik Visionär Avatar von PicNick
    Registriert seit
    23.11.2004
    Ort
    Wien
    Beiträge
    6.842
    Moment mal, ich glaub ihr überseht, daß er ja eine BCD-Zahl kriegt.
    Die schaut dann z.B. so aus
    0x00583
    um das umzuwandeln, muß er MULTIPLIZIEREN
    5 * 100 + 8 * 10 + 3
    0x0064 * 5 = 0x01F4
    0x000A * 8 = 0x0050
    0x0001 * 3 = 0x0003
    --------------------------
    .................= 0x0247
    mfg robert
    Wer glaubt zu wissen, muß wissen, er glaubt.

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen