nabend es geht um assembler code ! wie kann ich "if-schleifen" quasi parallel kontrollieren ohne interrupts ? als beispiel: ich habe 3 taster die liegen auf bin 0-2 auf PORTA am AVR. dann habe ich schleigen wie diese: loop: sbic PINA, PA0 rjmp loop -> befehl ! mach das ! so und jetzt halt 3 taster nicht nur einer ! wie mache ich es, dass alle 3 taster hintereinander abgefragt werden ohne das die befehle unter den schleifen ausgeführt werden und ohne interrupts, sondern mit solchen schleifen ? wenn das nicht funktioniert nennt mir eine andere lösung bitte. grüße g1o
loop: sbis PINA, PA0 ; MERKE: hier sbis nicht sbic rjmp machPA0 sbis PINA, PA1 rjmp machPA1 sbis PINA, PA2 rjmp machPA1 rjmp loop machPA0: -> befehl ! mach das ! rjmp loop machPA1: -> befehl ! mach das ! rjmp loop machPA2: -> befehl ! mach das ! rjmp loop so jetze hab ich dir die Steigeisen gehalten, reiten musst du nun selbst. Also streng dinenen Grips an, dann kommst du selbst drauf. Übrigens Interrupts können auch nicht für dich denken, eher im Gegenteil. Also frisch ans Werk und viel Spass ciao Remo
danke ! stimmt hätte ich auch selbst draufkommen können ! "MERKE: hier sbis nicht sbic" warum das ? eigentlich nicht...meine taster sind gegen GND geschaltet, das heißt am PIN0-2 muss ich 5V anlegen durch: ldi r19, 0x00 out DDRA, r19 <- für eingang, hab ich allerdings weggelassen, geht auch so ldi r19, 0xFF out PORTA, r19 wenn der taster nicht gedrückt ist hängt am pin weder 5V noch GND, daher muss ich sie auf hohes potential setzen, damit die integrierten pull-ups eingeschaltet werden. ansonsten würde bei tasterdruck gar nichts passieren.
Der Befehl "sbis" steht für "Skip if Bit Is Set", das heißt, überspringe den nächsten Befehl, wenn das abgefragte Bit gesetzt ist. Und der folgende rjmp soll ja übersprungen werden, wenn der Taster nicht gedrückt ist, also wenn das Bit gesetzt ist...
> "MERKE: hier sbis nicht sbic" > warum das ? Weil sich die Sprunglogik umgedreht hat. Im Original heist es: Springe zu Loop wenn Taster nicht gedrückt In der Veränderung heist es: Springe zur Bearbeitungsfunktion wenn Taster gedrückt
das bit ist gesetzt wenn es auf potential liegt sehe ich das richtig ? das kann bei mir aber nie der fall sein weils nicht gegen Vcc sondern gegen GND angeschlossen ist. also muss ich doch den pin auf potential setzen, dank der eingebauten pull ups kein problem, und dann wird bei taster druck das bit gecleard.
Du musst die Pull-Ups aktivieren, damit ein definierter (High-) Pegel anliegt, wenn der Taster nicht gedrückt ist. Wenn er gedrückt ist, dann hast Du am Pin Low-Pegel, also ist auch das entsprechende Bit in PINx low. In dem Posting von remo wird der rjmp zur Ereignis-Bearbeitung übersprungen, wenn das Bit in PINx gesetzt ist, also wenn der Taster nicht gedrückt ist. Wenn er gedrückt ist, also wenn PINx Low-Pegel hat und damit das sbis keinen Sprung ausführt, dann wird der rjmp zur Ereignis-Bearbeitung ausgeführt.
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.