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
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
mmmmhh, nee ist nicht so das wahre was du da geschrieben hast. Das LCD zeigt irgendwelche Kombinationen von den drei Texten an. Aber trotzdem danke :-)
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
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.
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
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
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)
JA!!! Das mit den anderen SChleifen ist mir nicht eingefallen. Ganz herzlichen dank an euch allen. Bis denne
copy'n'paste-Fehler... hatte keine Lust den ganzen Quatsch x-mal zu tippen...
@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.
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.