Tasten und aufrufe

Gast #97606
Lesenswert?

Hallo,

Irgendwie kriege ich das nicht richtig hin - bzw. ich komme nicht drauf
wie man es besser machen kann.
Also:

ich habe drei taster, ein LCD und wenn die erste taste gedrückt wird,
dann soll "text" auf dem LCD stehen, wenn man eine andere Taste
drückt, dann soll ein anderer Text auf dem lcd stehen.

So habe ich es gemacht:

schleife:
loop1:
  sbic PINC, 1
  rjmp loop1
  ... Text1

loop2:
  sbic PINC, 2
  rjmp loop2
  ... Text2

loop3:
  sbic PINC, 3
  rjmp loop3
  ... Text3

rjmp schleife

das problem ist halt nur ich halt nur diese reihenfolge der tasten
drücken kann, also erts taste 1 dann die zweite taste und dann die
dritte taste. Aber wenn ich erst die erste taste drücke und dann die
dritte taste drücke dann passiert natürlich nichts, weil das programm
im "loop2" festhängt und wartet bis taste 2 gedrückt wird.

Wie kann man das noch realisieren

Ich komme irgendwie nicht drauf.

MFG
Gast #97607
Lesenswert?

Hallo,

ich kenne zwar den Assemler nicht so genau, aber versuche 'mal
folgendes:

schleife:

  sbis PINC, 1
  ... Text1

  sbis PINC, 2
  ... Text2

  sbis PINC, 3
  ... Text3

rjmp schleife

Gruß Micha
#97609
Lesenswert?

Am besten ist es, wenn man die Tasten erstmal entprellt und dann das nur
Drücken erkennt (Wechsel von Losgelassen nach Gedrückt).

Das macht man im Timerinterrupt, damit nicht unnütz Rechenzeit
verwartet wird und kann dann im Hauptprogramm gemütlich die Auswertung
vornehmen.

Hier mal ein Beispielcode, der 8 LEDs mit 8 Tasten wechselt:

http://www.mikrocontroller.net/attachment.php/20554/Get8key4.asm


Peter
Gast #97610
Lesenswert?

Du hast schon in dem Text von Michael die "sbis" in die für dein
programm benötigten "sbic" geändert, wenn du das vergessen haben
solltest, dann schreibt er der reihe nach "TEXT1" "TEXT2" "TEXT3"
auf das display und fängt wieder von vorne an.

Mfg Jochen.
Gast #97611
Lesenswert?

Ja genau, mit "sbis" macht der das wie du sagst (Jochen).

@peter:
mit dem entprellen kann man ja ersteinmal vernachlässigen.
Das mit der Rechenzeit versteh ich - ist ja klar, er "wartet" in der
Schleife so lange bis man nach ner stunde mal die Taste drückt.
Und wie soll ich das anstellen mit dem Timerinterrupt?


MFG
Gast #97613
Lesenswert?

schleife:
  loop1:
    sbic PINC, 1
    rjmp loop2
    ... Text1
    rjmp schleife

  loop2:
    sbic PINC, 2
    rjmp loop3
    ... Text2
    rjmp schleife

  loop3:
    sbic PINC, 3
    rjmp schleife
    ... Text3

rjmp schleife

oder nicht?
Bin nicht so ASM-bewandert (und habe gerade keine Lust im Instruction
Set Summary nachzugucken), gehe aber davon aus, dass sbic ein Test auf
Null (skip if bit is clear?) ist und die folgende Anweisung
übersprungen wird, sobald die Bedingung erfüllt ist (low-aktive
Taster?!).
Es wir also getestet, ob die Taste gedrückt wird.
Ist das nicht der Fall, wird die folgende Anweisung (rjmp)
ausgeführt, und das Programm an der nächsten Abfrage weiter geführt.
Wird die Taste gedrückt, erscheint der Text auf dem Display, und es
wird mit der allgemeinen Abafrage fortgefahren.
Problem, das sich stellt:
Es wird solange der Text an das Display geschickt, wie die Taste
gedrückt wird.
Also noch eine Abfrage, die das Programm quasi anhält, solange die
Taste gedrückt wird.
Also:

schleife:
  loop1:
    sbic PINC, 1
    rjmp loop2
    ... Text1
    warte1:
      sbis PINC,1
      rjmp warte1

    rjmp schleife

  loop2:
    sbic PINC, 2
    rjmp loop3
    ... Text2
    warte2:
      sbis PINC,2
      rjmp warte1
    rjmp schleife

  loop3:
    sbic PINC, 3
    rjmp schleife
    ... Text3
    warte3:
      sbis PINC,3
      rjmp warte1

rjmp schleife

unter der Vorraussetzung, dass SBIS "skip if Bit is set" heisst...
Gruß Rahul
Gast #97614
Lesenswert?

an dem code oben sollte man noch die sprunglabel anpassen (warte1-3 sind
falsch :) und eine pause vor der warteschleife zum taste loslassen. dann
ist der tester gleich ein wenig entprellt. ich würd für die pause eine
schleife bis 255 und eine so bis 10 oder so nehmen (kommt auf deinen
takt an, beispiel für 4mhz)
Gast #97617
Lesenswert?

@Peter,

dein Code ist so brillant und so optimiert, dass ihn ein Anfänger nicht
so leicht verstehen kann.

Daher wundere ich mich nicht, dass du damit auf taube Ohren (blinde
Augen?) stößt.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren