Forum: PC-Programmierung Eingabe abbrechen/übergehen


von Andre (Gast)


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é

von Karl H. (kbuchegg)


Lesenswert?

Dafür gibt es in Standard-C kein Konstrukt.
Du musst die CompilerDoku durchsehen, welche Möglichkeiten dir die 
spezifische Run-Time Library anbietet.

von Andre (Gast)


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é

von Rufus Τ. F. (rufus) Benutzerseite


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.

von Timmo H. (masterfx)


Lesenswert?

Du musst schon direkt mit den Registern des 8051 arbeiten. Du machst dir 
z.B. eine Funktion "mygetchar" und darin fragst du z.B. 5 mal das 
Receive Bit im SCON register ab, ansonsten verlässt du die Funktion 
wieder mit return 0 oder so.

von Andre (Gast)


Lesenswert?

@ Timmo H. (masterfx) aahh das könnte klappen
muss ich morgen mal ausprobieren (heute keine zeit)

Besten Danke an alle ;)

von Allu (Gast)


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

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.