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

Thema: Problem mit Aufgabenstellung für eine Prüfung

  1. #1

    Problem mit Aufgabenstellung für eine Prüfung

    Anzeige

    E-Bike
    HI, erstaml sorry für Doppelposting, aber im Programmierbereich schaut kaum wer durch. Ich brauch das Dringend für eine Prüfung in der Schule.
    original:https://www.roboternetz.de/phpBB2/viewtopic.php?t=26789

    Könnt ihr mir bitte helfen, ich hab da ein seeeeehr großes Problem.

    Hab ende diese Woche eine Prüfung in uC programmieren.

    Ich bin nun auf zahlreiche Aufgabenstellungen gestoßen, bei denen verschiedene Zahlen-Formate konvertiert werden sollen.
    zb bin=>dez, okt=>hex usw,...

    bein grösstes Problem ist nun, ich habe keine Ahnung wie man eine 4 stellige BCD zahl in eine Hex umwandeln kann.

    Das Programm soll laut Prof. in wenigen Zeilen programmiert sein.

    Die BCD Zahlen kann ich aus den Registern hohlen: zb. für die ziffer 2345: r1=23 r2=45
    Wir verwenden folgenden Prozessor: 80C51X

    Könnt ihr mir bitte Helfen.
    kennt vielleicht Jemand eine Seite wo solche Konvertierungen erklärt werden?

    Vielen Dank für die Hilfe

    mfg

    atax62

  2. #2
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    74
    Beiträge
    2.063
    Hallo,
    Erklärungen zu Zahlensystemen findest Du hier.
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  3. #3
    hallo,
    Zahlensysteme kenne ich eh nur die Umwandlung in Assembler macht mir Probleme

  4. #4
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    74
    Beiträge
    2.063
    Dann verstehe ich Dein Problem nicht so ganz.
    Der µC speichert Bits ab, entweder als Byte (8 Bit) oder Word (16 Bit), teilweise auch als Double-Word (32 Bit).
    Intern mußt Du auf nichts aufpassen, weder beim Addieren, noch sonst wo.
    Wenn Du 2 Speicher-Variablen addierst, in denen 10 und 20 steht, ist nach dem Additions-Befehl das Ergebnis 30. Daß dieses Ergebnis in der µC-Hardware als Bits abgelegt ist, interessiert niemanden wirklich.

    Zum Tragen kommt dieses 'Format' erst, wenn ein Wert raus oder rein soll, und zwar so, daß wir es als Dezimal-Zahl wieder verstehen.
    In Assembler mußt Du also eine dezimale Eingabe tatsächlich Stelle für Stelle mit 10 multiplizieren und addieren, damit es intern ein Binär-Wert wird.
    Umgekehrt muß für eine Ausgabe jedes Byte, Word oder was auch immer durch 10.000, 1.000, 100 und 10 dividiert werden, damit wir es wieder erkennen können.
    Beispiele in Assembler findest Du hier
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  5. #5
    Vielen Dank für deine Antwort

    Ich muss den bcd Wert also 2345 dez in den registern r1=23h, r2=45h in einen Hex wert umwandeln 2345=>929 r1=09h r2=29h
    wie komm ich nun von 2345dez auf 929hex

    Danke für eure Hilfe

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    74
    Beiträge
    2.063
    Es gibt Controller mit Befehlen für BCD-Arithmetik; ob Deiner das kann, weis ich nicht.
    Mein PIC kennt keine BCD-Arithmetik und ich verwende deshalb die Routine "Such0_9" (Ziffer suchen) bei den Assembler-Beispielen.
    2 Unterschiede:
    1. bei mir ist es nur ein Byte (0...255), Du mußt es auf 2 Byte erweitern.
    2. ich Suche nach ASCII-Zahlen und muß diese entsprechend in BCD 0...9 umwandeln, bei Dir sind es bereits BCD-Werte, die Du nibble-weise von links nach rechts abarbeiten mußt:
    2 * 10 ... + 3
    23 * 10 ... + 4
    234 * 10 ... + 5
    Das ganze steht dann als 16 Bit-Wert 0929h in 2 Registern mit je 8 Bit.
    Wenn Dein Controller einen MULtiplikations-Befehl hat, super.
    Andernfalls: Eine Multiplikation mit 10 kannst Du einfach realisieren, indem Du den Wert 1 mal nach links schiebst (* 2) und dann kopierst. Die Kopie schiebst Du noch 2 mal nach links (... * 4 ... * 8 ). Dann addierst Du dieses Ergebnis zu dem mit 2 multiplizierten Wert. Das Ergebnis ist dann * 2 + * 8 = * 10
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

  7. #7
    Erfahrener Benutzer Robotik Einstein Avatar von wkrug
    Registriert seit
    17.08.2006
    Ort
    Dietfurt
    Beiträge
    2.214
    Nun

    Ich würd jede Stelle einzeln dekrementieren und dabei den jeweiligen Stellenwert addieren.

    2345
    Du bearbeitest die Tausender Stelle
    Pseudo Code....

    Anfang Tausend:
    ist die Erste stelle 0 ? Ja -> Zu anfang 100
    Nein->Ergebnis ist Ergebnis + 1000
    Tausenderstelle -1
    gehe nach Anfang Tausend

    Anfang 100
    ist die Hunderterstelle 0 ? Ja -> Zu Anfang 10
    Nein -> Ergebnis ist Ergebnis + 100
    Hunderterstelle - 1
    gehe nach Anfang 100

    Anfang 10..........usw.

    Die Tausender Routine wird 2x Durchlaufen, die 100er 3x, die 10er 4x und die 1er kannst Du direkt dazuaddieren.
    Am Ende hast Du im Ergebnisregister deine 929Hex.
    Dieses Register muß natürlich aus 2 Byte bestehen.
    Das Ganze sollte sich in Assembler relativ geschmeidig Proggen lassen.
    Es mag schnellere Methoden geben, aber diese ist relativ leicht zu durchschauen.
    Du kannst natürlich auch mit den 1er Stellen anfangen.
    Wenn deine BCD Zahl in Nibbles (halben Bytes) vorliegt, musst Du die Nibbles natürlich einzeln bearbeiten, also vorher trennen.

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    07.12.2005
    Ort
    Euskirchen-Großbüllesheim
    Alter
    74
    Beiträge
    2.063
    @wkrug
    Deine Methode wende ich bei Division eines Byte durch 10 an, da halten sich die Schleifen noch in Grenzen: maximal 2 mal durch 100 und 9 mal durch 10; durch 1 ist ja geschenkt.
    In dem Fall mit dem Beispiel '2345' hier geht es auch noch .... na ja ....
    Bei '9999' sind es allerdings 4 * 9 = 36 Schleifen und wenn die BCD-Zahl z.B. '065535' wäre, müßtest Du auch noch mit 10.000 einige Runden drehen.
    Aber, es geht auch so.
    MfG Karl-Heinz
    HobbyElektronik hier klicken ....

Berechtigungen

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

LiFePO4 Speicher Test