mikrocontroller.net

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


Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:

Autor: elektron (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Gerhard (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi elektron ,

aber wie soll ich mit cpi einen 16 Bit Wert vergleichen

Autor: Frank Linde (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Uwe (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.