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


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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.