-         

Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 15

Thema: 16 bit Wert vergleichen?

  1. #1
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.03.2006
    Beiträge
    200

    16 bit Wert vergleichen?

    Anzeige

    Hallo,

    kann mir jemand sagen wie ich am schnellsten zwei 16-bit Werte miteinander vergleichen kann?

    Hintergrund:
    Ich habe mir als Schleife einen 16-Bit Zähler mit R24/R25 aufgebaut, kann aber nicht vergleichen um die Schleife bei Erreichen eines bestimmten Zählerstandes zu verlassen

    Grüße, JK

  2. #2
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    22.11.2005
    Ort
    Braunschweig
    Alter
    41
    Beiträge
    685
    moin!
    hmm, damals zu C64'er Zeiten habe ich 16 Bit Zähler immer rückwärts gegen null laufen lassen, dann muß man am Ende 'nur' schauen, ob beide Bytes 0 sind, am besten erst das Highbyte testen, wenn das nicht null ist, kann man die Prüfung des Lowbytes eh gleich weglassen.
    MfG Volker
    Meine kleine Seite
    http://home.arcor.de/volker.klaffehn
    http://vklaffehn.funpic.de/cms
    neuer Avatar, meine geheime Identität

  3. #3
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.03.2006
    Beiträge
    200
    mein Problem ist, dass ich die Ergebnisse beider Vergleiche und-verknüpfen muss.

  4. #4
    Erfahrener Benutzer Roboter Experte
    Registriert seit
    22.11.2005
    Ort
    Braunschweig
    Alter
    41
    Beiträge
    685
    Moin!
    Achso, hmm, müßte doch aber im Prinzip trotzdem gehen, ein Byte vergleichen, wenn gleich, dann 2. Byte vergleiche, wenn auch gleich -> fertig....
    leider habe ich bisher noch keinen AVR in Assembler programmiert, daher weiß ich nicht inwieweit man mit Hilfe irgendwelcher Flags Register vergleicht.... Evtl. jeweils die Bytes voneinander abziehen und bei Zero-Flag ist es fertig? So hab ich das damals gemacht.....

    MfG Volker
    Meine kleine Seite
    http://home.arcor.de/volker.klaffehn
    http://vklaffehn.funpic.de/cms
    neuer Avatar, meine geheime Identität

  5. #5
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.03.2006
    Beiträge
    200
    wenn ich zwei Werte miteinander vergleiche und diese sind gleich, wird das Z-Flag gesetzt. nur Leider kann ich das Z-flag nicht speichern zumindest wüsste ich jetzt nicht wie?!

    Weitere Frage: wäre es nicht sinnvoller zwei der drei 16-Bit Register für einen Vergleich zu nehmen?

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Was soll den Verglichen werden r24/r25 mit 2 anderen Registern, oder mit einer Konstante ?

    Wenn 2 andere Register ist es ja einfach:
    Code:
    cp r24,r2 ;r2 ist Low Register Deiner 2 Zahl
    cpc r25,r3 ; r3 ist High Register Deiner 2 Zahl
    Je nachdem werden jetzt entsprechende Flags im SREG gesetzt und Du kannst
    nach Lust und Laune mit breq brne brmi brge usw. verzweigen.

    Oder verstehe ich Dein Problem jetzt nicht ?

    Gruß Sebastian

    EDIT:
    wäre es nicht sinnvoller zwei der drei 16-Bit Register für einen Vergleich zu nehmen?
    Welche 3 16-Bit Register meinst Du ?
    Software is like s e x: its better when its free.
    Linus Torvald

  7. #7
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.03.2006
    Beiträge
    200
    Doch, hast du schon verstanden
    Die Lösung ist zwar easy, ich wäre aber nicht von allein drauf gekommen.

    danke

    ich meine die x/y/z-Register. Ich habe mit den Registern bis jetzt noch nicht gearbeitet, weiß also nicht ob mit einem Befehl die Inhalte vergleichen kann

  8. #8
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    ich meine die x/y/z-Register. Ich habe mit den Registern bis jetzt noch nicht gearbeitet, weiß also nicht ob mit einem Befehl die Inhalte vergleichen kann
    Ach die meinst Du...
    Dann füge ich noch x/y/z-Register Paare hinzu,
    damit keiner meint, es gibt 16 Bit Register auf dem avr...

    Ich meine man kann nicht mit einem Befehl vergleichen, man fängt immer mit dem niedrigsten Byte(LOW) an mit cp und arbeitet sich langsam Richtung HIGH mit cpc durch.
    Alternativ kan man natürlich mit dem HIGH anfangen, wie vklaffehn schon vorgeschlagen hat, wenn die nicht gleich sind braucht man nicht weiter zu vergleichen...

    Am sonsten wünsche ich noch einen erfolgreichen Programmierabend

    Gruß Sebastian
    Software is like s e x: its better when its free.
    Linus Torvald

  9. #9
    Erfahrener Benutzer Roboter-Spezialist
    Registriert seit
    22.03.2006
    Beiträge
    200
    was ich im Moment nicht verstehe, ich subtrahiere Register B von Register A und ziehe zusätzlich noch das Z-Flag ab. Also wird gesprungen wenn Register B+1=A ist

  10. #10
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    08.05.2005
    Ort
    Issum
    Alter
    45
    Beiträge
    2.236
    Also wird gesprungen wenn Register B+1=A ist
    Du mußt die zwei Operationen als eine Einheit sehen.
    was da im Carry steht ist nicht 1 sondern der Überlauf der 9. Bit sozusagen, der nicht mehr passt.
    Der muß im High Byte mit abgezogen werden und hier steht der ja nicht mehr für 1 sondern für 256
    Schau mal hier
    habe ich versucht das zu erklären...
    Sonst, hast Du AVR Studio ?
    Schreib Dir mal ein paar Zeilen Code wo sowas gemacht wird, setze verschiedene Werte in die Register rein und schaue, was da alles mit SREG passiert...
    So Sachen, wie 200 von 5 abziehen usw.

    Viel Spaß

    Gruß Sebastian

    Edit
    und ziehe zusätzlich noch das Z-Flag ab
    Nein nicht Z -> Zero sondern C -> Carry
    Software is like s e x: its better when its free.
    Linus Torvald

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

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