Forum: Mikrocontroller und Digitale Elektronik Warten auf Tastendruck in C


von Hannes M. (cyberfox)


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

von Thomas (Gast)


Lesenswert?

interrupt?

von Carlos (Gast)


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

von Hannes M. (cyberfox)


Lesenswert?

Danke für die schnelle antwort

ich verwende jetzt

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

von marcel (Gast)


Lesenswert?

hallo

ich würde schreiben

while(!kbhit());


dafür brauchst du allerding die conio.h

von HildeK (Gast)


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.

von Hannes M. (cyberfox)


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

von Michael Wilhelm (Gast)


Lesenswert?

Versuchs mal mit UDR.

MW

von Timmo H. (masterfx)


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)

von Hannes M. (cyberfox)


Lesenswert?

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

müsste doch funktionieren oder?

von Carlos (Gast)


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.

von Hannes M. (cyberfox)


Lesenswert?

super danke

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

von Sven (Gast)


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

von gast (Gast)


Lesenswert?

fflush (stdin)
dann scanf bzw. getchar()



oder alternativ:
 cin.get;

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
Noch kein Account? Hier anmelden.