Tastaureingabe ohne warten zu müssen abfragen

Gast #75486
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
Hallo Martin!
Wieso legst du die Taste nicht auf einen interruptfähigen Pin und
bastelst dir die entsprechende Interrupt-Routine?
Schön Gruß
Rahul
Gast
@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
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
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
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
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
Gast
Was für möglichkeiten gibt es, eine Pc-Tastatur über die Ports
abzufragen, oder gibt es fertige Schaltungen oder Ics, wenn ja welche?

Gruß Sam

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 22 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.