mikrocontroller.net

Forum: PC-Programmierung Eingabe abbrechen/übergehen


Autor: Andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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é

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andre (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
impuls++;
printf("\n Zähler: %d ",impuls);
taste=getchar();
if( EineTasteGedrueckt )        // und wenn eine gedrückt dann die If Abfragen
{
 // if Abfragen
}
else                            // Keine Taste gedrückt
 // Restlicher Quelltext

Gruß André

Autor: Rufus Τ. Firefly (rufus) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Timmo H. (masterfx)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Andre (Gast)
Datum:

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

Besten Danke an alle ;)

Autor: Allu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

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.