mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Warten auf Tastendruck in C


Autor: Hannes Maier (cyberfox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo

Ich habe folgendes Problem:
Ich möchte ein Programm für den Atmega8 schreiben welches über die RS232 
Schnittstelle mit dem PC kommuniziert.
Dabei möchte ich das Programm solange anhalten bis eine beliebige Taste 
am Computer gedrückt wird. Dazu deaktiviere ich alle interrupts und 
warte dann auf den Tastendruck.
Welche routine muss ich dafür verwenden?
Habe probleme mit scanf() da bei einem Tastendruck gleich mehrere 
scanf() (bei welchen das Programm wieder stehen sollte) übersprungen 
werden.

Vielen Dank schon im vorraus

MfG
Hannes Maier

Autor: Thomas (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
interrupt?

Autor: Carlos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,
versuch es einmal hiermit:

unsigned char c1;
.....
.....
c1=getchar();   //getchar() wartet solange, bis eine Taste gedrückt 
wird.

Alternativ (je nach Compiler) heißt die Funktion auch getkey();

Gruß
Carlos

Autor: Hannes Maier (cyberfox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle antwort

ich verwende jetzt

getchar();
müsste eigentlich funktinieren
kann es aber erst morgen ausprobieren

Autor: marcel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hallo

ich würde schreiben

while(!kbhit());


dafür brauchst du allerding die conio.h

Autor: HildeK (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>while(!kbhit());

Da braucht man dann die berühmte Any-Key-Taste ... ;-)

Zumindest in älteren C-Versionen war es sinnvoll, anschließend den 
Tastaturbuffer zu leeren.

Autor: Hannes Maier (cyberfox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
danke
wie cleare ich den buffer vom usart am besten?

mir wäre schon geholfen wenn mir wer erklären könnte wie
ich auf das RXC register im codevision zugreifen kann
RXC wird nämlich nicht erkannt

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Versuchs mal mit UDR.

MW

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
RXC ist nur ein Flag (Receive Complete) das im Register UCSRA liegt (Bit 
7). Das wird imho automatisch gelöscht, wenn du den Receive-Buffer 
ausliest (UDR)

Autor: Hannes Maier (cyberfox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
void USART_Flush(void)
{
    unsigned char dummy;
    while(UCSRA & 0x80) dummy=UDR;
}

müsste doch funktionieren oder?

Autor: Carlos (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Bei

c1=getchar();

brauchtst Du Dich um das Leeren des Buffers gar nicht zu kümmern, das 
wird ja automatisch gemacht, da der Wert in c1 abgelegt wird.
Das ist nun  mal am einfachsten.

Carlos.

Autor: Hannes Maier (cyberfox)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
super danke

eine frage hätte ich aber noch:
Wie kann ich auf den eeprom speicher schreiben und lesen?

Autor: Sven (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> eine frage hätte ich aber noch:
> Wie kann ich auf den eeprom speicher schreiben und lesen?

Das steht in der Hilfe.

Gruß Sven

Autor: gast (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
fflush (stdin)
dann scanf bzw. getchar()



oder alternativ:
 cin.get;

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.