Tastaureingabe ohne warten zu müssen abfragen

Gast #75486
Lesenswert?

Hallo erstmal.
In dem Tutoria2l "I/O Grundlagen" stand am ende folgender Satz:

>>>Dieses Programm wartet so lange in eine Schleife ("loop:"..."rjmp
loop"), bis Bit 0 im Register PIND 0 wird, also die erste Taste
gedrückt ist.<<<

Ich habe auch ein Programm, das innerhalb einer schleife eine
tastaturabgabe macht. (Programm ist in C, nicht ASM) Jetzt stellt sich
dort das Problem, das die Schleife immer auf eine Tastatureinage
wartet, also nur durchläuft wenn ich eine Taste drücke.

Ich würd es aber gerne so habe, dass die schleife immer läuft und ich
die Taste dennoch abfragen kann. Die Tastenabfrage soll nämlich ein
frühzeitiges abbrechen der Schleife ermöglichen, wenn es eine andere
möglichkeit gibt, die Schleife auf Tastendruck zu beenden, als eine
simple Tastanabfrage wär mir das auch recht, solange ich nicht immer
was drücken muss, damit das Programm ausgeführt wird :-)

Danke für die Hilfe. cya
Gast #75489
Lesenswert?

@Peter:

So wie ich Martin verstanden habe, möchte er sein Programm nicht mit
unnötigem Warten auf eine Taste anhalten. Wenn er den Flankenwechsle
der Taste mit einem Interrupt erkennt, kann er sie nachträglich immer
noch entprellen, sofern der Interrupt gesperrt ist (so kenn ich das
noch auch 8051-Zeiten).
Gruß Rahul
Gast #75490
Lesenswert?

Hallo,

ich schreibe solche schleifen in C so:

for(;;)
{
  if (PINB&0x01)
  {
    break;
  }

  //Tue irgendwas während der Schleife
  //z.b.:
  temp=temp+10;
  temp=temp-10;
}

Solange der PINB.0 LOW-Potential hat, wird die Schleife immer
wiederholt. In der Schleife kann z.B. eine Messwertabfrage o.ä.
stehen.
Wenn nun der PINB.0 High-Potential führt, wird meine for-Schleife
abgebrochen.

Gruß, Florian
Gast #75491
Lesenswert?

Danke für die vielen Tipps. das mit dem Pin ist klar, das Problem ist
aber, dass es sich nicht um einen Schalter, sondern um eine Tastatur
handelt, die abgefragt werden soll, deswegen geht das ganze so leider
nicht :-(
Gast #75493
Lesenswert?

Was für eine Tastatur??? - wenn es eine PC-Tastatur ist, so kannst du
die in einer Application note beschriebene schaltung verwenden. Da ist
alles Interruptgesteuert (Abfrage bzw. Empfangen der Tastatursignale).
Wenn du ein Zeichen empfangen hast, kannst du eine Variable setzen. In
der Schleife frägst du dann die Variable ab, ob eine Taste empfangen
wurde oder nicht und danach den weitern verlauf der schleife
bestimmen.

Gruß, Florian
Gast #75494
Lesenswert?

Sollte es sich um eine 4x4-Tastatur handeln, gibt es direkt bei Atmel
eine Application Note (AN240 etwa). Dabei handelt es sich um eine
hexadezimale Tastatur. Die Funktionsweise ist recht einfach und braucht
nur einen Port.
Eine PC-Tastatur abzufragen ist etwas unständlicher, aber lösbar.
Notfalls gibt es auch fertige Code-Schloss-IC.
Gruß Rahul

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