Hallo Assemblerfreaks,
kann man folgenden Code-Teil "eleganter" lösen.
Es geht darum Pind.2 mit Pind.3 zu vergleichen...
Bin in Sachen Assembler noch am Anfang.
ldi r19,0
sbic PIND,2
ldi r19,1
ldi r18,0
sbic PIND,3
ldi r18,1
CPSE r19,r18
.......
Gruss Gerhard
@Sebastian and mmerten,
Danke für die raschen Antworten.
Werd ich heute abend gleich mal testen.
Ein bischen Speed müsste es ja bringen...
@Hagen
Hi, die Befehle sbrc und sbrs sind nur bei den Registern 0-31
anzuwenden . trotzdem Danke.
Gruss Gerhard
ja, die meinte ich auch, war'n langer Tag heute (shit Trial&Error
Programmierer :)
Also sbic/sbis ist richtig, so müsste so gehen:
sbic PIND, 2
sbis PIND, 3
rjmp XYZ
..0b01100
XZY:
Hat halt nur den Vorteil das man Register spart.
Gruß Hagen
@ Hagen,
stimmt schon so wie Peter meint.
Ich will einen Vergleich ob die beiden Pin's gleich oder ungleich
sind.
Das ganze ohne Benutzung von Registern zu proggen wäre super.
Würde mir zusätzlich noch 2x "push und pop" ersparen.
Gruss Gerhard
Mit der sequentiellen Abfrage könnte es Zeitprobleme geben, denn
zwischen dem ersten sbic bis zur letzten Abfrage könnte sich der Port
Status ja wieder geändert haben. Ich würde doch lieber mit einem Port
Zugriff alle Pins auslesen wollen.
sicherer ist es so
push temp
in temp, PIND
andi temp, 0b01100
breq _1
cpi temp, 0b01100
brne _2
_1:
.. 0b01100 oder 0b00000
_2:
pop temp
also wie schon oben vorgeschlagen.
Gruß Hagen
>@gerhard>hat aber den nachteil, daß du keine konsistenten portzustand hast>(mehre Lesezugriffe auf PIN) . Es sei denn man baut noch cli und sei>ein.
Hat CLI und SEI direkte Auswirkungen auf die Veränderung der Staties an
den PORT's ? Ich habe dazu nichts im Datenblatt gefunden.
Gruß Hagen
Hallo mmerten und Hagen,
nochmals Danke für Eure tolle Hilfe.
Der Code-Teil aus meinem ersten Posting ist aus einer
Interruptroutine (INT0).
Das Ganze brauche ich zum Zähler von Drehgeberimpulsen.
Also das Problem mit dem doppelten Lesen des Ports werde ich
beseitigen.
Muss halt trotzdem 1 Register verwenden.
Aber auf jeden Fall ist die Sache sicherer als vorher.
Gruss Gerhard
Eine eigene Frage?
Dieser Thread ist über 22 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.