Forum: Mikrocontroller und Digitale Elektronik Assembler , wer hilft mir weiter


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Gerhard (Gast)


Lesenswert?

Hallo Leute,

wer kann mir bei unterem Programmcode weiterhelfen.
Ich will die 16Bit Zahl in R28:R29 überprüfen ob sie
zwischen -250 und + 250 liegt.
Liegt sie ausserhalb dieser Werte muss PortB.4 auf 0 gesetzt werden.
Eigendlich funzt der Code biem simulieren , jedoch in der Steuerung
noch nicht zuverlässig.

Gruss Gerhard


LDI R20,250      'lade DEZ 250 in r16
LDI R21,0        'lade DEZ 0 in r17
CP R20,R28       'Vergleiche untere Bytes
CPC R21,R29      'Vergleiche obere Bytes
brcc weiter      'wenn Carry 0 ist dann springe zu weiter
brpl weiter      'wenn zahl positiv ist dann springe auf weiter
CBI PortB,4      'Portb.4 = 0
Weiter:
LDI R20,5        'lade DEZ 5 in r20
LDI R21,255      'lade DEZ 0 in r21
CP R20,R28       'Vergleiche untere Bytes
CPC R21,R29      'Vergleiche obere Bytes
brcs ende        'wenn Carry 1 ist dann springe zu ende
brmi ende        'wenn zahl positiv ist dann springe auf ende
CBI PortB,4      'Portb.4 = 0
Ende:

von elektron (Gast)


Lesenswert?

mach das ganze mal mit

cpi [register],0x??

vergleich mit konstanten

und dann nach jedem vergeich einen bedingten sprung setzten. dann
sollte es gehen.

von Gerhard (Gast)


Lesenswert?

Hi elektron ,

aber wie soll ich mit cpi einen 16 Bit Wert vergleichen

von Frank Linde (Gast)


Lesenswert?

Elektron meint vermutlich, dass Du Dir die Kopieraktion in die Register
20/21 sparen kannst, weil man Register 28/29 mit dem CPI-Befehl direkt
gegen eine Konstante testen kann.

Den 16 Bit Wert vergleichst Du byteweise, so wie Du es auch schon
versucht hast.

Gruß, Frank

von Uwe (Gast)


Lesenswert?

Hi!
Habe dein Prog zwar nicht vollständig durchdacht, aber eigentlich ist
es der richtige Weg. In deinem Falle würde ich allerdings kürzer
schreiben:

      TST R28      'higbyte = 0?
      brne min     'nein-> minus?
      cpi R29,251  '250 + 1 für C-Flag
      brcs Ende    'solange C=1 alles ok -> Ende
      rjmp aus     'sonst löschen
min:  cpi R28,255  'higbyte max -250?
      brne aus     'nein also löschen
      cpi R29,5    '>= -250?
      brcc Ende    'ok ->Ende
aus:  cbi PortB,4
Ende:

Ich hoffe es stimmt (amkopfkratz) habe es nicht getestet

MFG Uwe

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]
  • [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.