Eingabe abbrechen/übergehen

Gast #1461407
Lesenswert?

Hi

Ich suche einen befehl oder ein code schnipsel mit dem man eine eingabe 
übergehen/abbrechen kann. Das prog soll fürn 8051 TFH-ONE-Board sein. 
Der compiler ist der JensFileEditor.

bsp.
-------------------------------------------------------
char taste;
int impuls;

void main (void)
{
while(1)
{
    impuls++;
    printf("\n Zähler: %d ",impuls);
    taste=getchar();                 // Hier soll er nicht auf einen
                                     // Eingabe warten wenn keine kommt
if(taste==1)
{
impuls=impuls+10;
}
if(taste==2)
{
impuls=impuls+20;
}}}
---------------------------------------------------------

(alterrnativ könnte die eingabe auch eine zeit zB. 5Sek. warten)

hoffe ihr könnt mir helfen
MFG André
Gast #1461559
Lesenswert?

sry. aber bin nicht so gut im programmieren.
Die CompilerDoku ist nicht so besonders (ist von einem Prof. Dr. Herrn 
Bernd vom Berg, sagt einigen bestimmt was), da steige ich nicht durch.

Habe es auch schon mit einem Interrupt über die UART versucht, da ja 
wenn etwas gesendet wird die if abfrage kommen soll. Nur habe ich das 
auch net hinbekommen (Es wurde immer etwas gesendet). Eine andere 
möglichkeit wäre mit einer while Schleife wo die bedingung 
(taste=getchar()==0) oder so ist funktioniert aber auch nicht.

Dachte es gibt irgendwie sowas wie:
1
impuls++;
2
printf("\n Zähler: %d ",impuls);
3
taste=getchar();
4
if( EineTasteGedrueckt )        // und wenn eine gedrückt dann die If Abfragen
5
{
6
 // if Abfragen
7
}
8
else                            // Keine Taste gedrückt
9
 // Restlicher Quelltext

Gruß André
Persönliche Seite #1461574
Lesenswert?

Das geht so nicht. Die Funktion getchar wartet so lange, bis eine 
Taste gedrückt ist und liefert deren Tastencode.

Hier ist vielmehr eine Funktion à la kbhit oder keypressed 
erforderlich, die zurückliefert, ob eine Taste gedrückt wurde oder 
nicht.
In Abhängigkeit vom Resultat kann dann getchar aufgerufen werden oder 
eben die andere Aktivität durchgeführt werden, die hier durchgeführt 
werden soll.

Solche Funktionen aber gehören nicht zum C-Standard, sondern sind nur 
auf manchen Plattformen verfügbar.
Gast #1463705
Lesenswert?

Anderer Vorschlag:
Damit meine Programme an keiner Stelle stehen bleiben müssen, verwende 
ich selbstgebaute Timer, die per Interrupt heruntergezählt werden.

Aufbau:
1 Byte reservieren und beispielsweise Timer_A nennen

IRQ-Prog basteln, dass alle soundsoviel msec durchlaufen wird, sagen wir 
mal alle 100 msec. Im Interrupt wird nachgesehen, ob die Timer_A auf 
Null ist, wenn nicht wird Timer_A decrementiert.

Soll nun auf "irgendwas" max. 10 sec gewartet werden, wird der Timer_A 
auf 100 gesetzt. Nun kann das Programm weiterlaufen. Wenn es wieder bei 
"auf_irgendwas_warten" vorbeikommt, ist entweder "irgendwas" angekommen 
(weiter mit Prog. verarbeiten) oder die Zeit abgelaufen (weiter mit 
Prog. ärgern).

Damit lassen sich beliebig viele unabhängige Timer und mit Vorteiler im 
IRQ-Prog auch lange Zeiten realisieren.

Gruß  Allu

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