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é
Dafür gibt es in Standard-C kein Konstrukt. Du musst die CompilerDoku durchsehen, welche Möglichkeiten dir die spezifische Run-Time Library anbietet.
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é
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.
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.
@ Timmo H. (masterfx) aahh das könnte klappen muss ich morgen mal ausprobieren (heute keine zeit) Besten Danke an alle ;)
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.