mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik befehlstruktur im µC ohne interrupts


Autor: Benedikt W. (Gast)
Datum:

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

Autor: remo (Gast)
Datum:

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

Autor: Benedikt W. (Gast)
Datum:

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

Autor: johnny.m (Gast)
Datum:

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

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

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

Autor: Benedikt W. (Gast)
Datum:

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

Autor: johnny.m (Gast)
Datum:

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

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.