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:
mach das ganze mal mit cpi [register],0x?? vergleich mit konstanten und dann nach jedem vergeich einen bedingten sprung setzten. dann sollte es gehen.
Hi elektron , aber wie soll ich mit cpi einen 16 Bit Wert vergleichen
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.