Programm kurz warten lassen
-
Hallo,
ich habe ein Problem bezüglich eines kleinen Programms in C.
Und zwar möchte ich das Programm an einer bestimmten Stelle warten lassen.
Hab ich im Programm als Kommentar geschrieben. Findet man weiter untenNicht wundern wenn dort unverständliche Kommentare sind, aber das Programm ist für einen kleinen Mikrocontroller geschrieben (also z.b. PortA oder PortB)
Ich habe es schon mit delay.h probiert, jedoch nicht zu einem richtigen Ergebnis gekommen, bzw. er hat das Programm nicht richtig kompiliert.
// Datei: Phaserec.c // Bi-Phasen RC5 Empfänger // Zwölf Kanäle // // hk@holger-klabunde.de // www.holger-klabunde.de // 30.04.2001 // Compiler CC5x #include "prozess.h" // Der verwendete Prozessor #include "Phaserec.h" #include "protos.h" //Na wenn das man ANSI-C ist //Statt alle Module einzeln zu compilieren und dann zu linken, //müssen bei CC5x alle Module included werden ! #include "phase.c" unsigned char shift; //Register für die Abtastung unsigned char subcode; //Der RC5 Gerätecode unsigned char comcode; //Der RC5 Kommandocode unsigned char combuf; //Puffer für Kommandocode. Für Verify unsigned char subbuf; unsigned char toggle; //Das empfangene Togglebit //******************************************************* // Hauptprogramm //******************************************************* void main() { unsigned char by,buf; CLRWDT; //Vor ändern des Prescalers auf Timer0 laut Microchip //Takt des PIC 4MHz, ein Zyklus = 1us OPTION=0b10000010; //Pullups off,Prescaler auf TMR0, 1:8 TRISA=0b11110000; //PA3..0 Ausgänge, PA4 Eingang TRISB=0b00000000; //PB7..0 Ausgänge PORTB=0x00; PORTA=0x00; shift=0; //Empfangsregister löschen while(1) // Programm-Endlosschleife { do { by=PhaseDemod(); //Warten auf eingehende Impulse }while(by==0); combuf=comcode; //Eben empfangenen Code speichern subbuf=subcode; do //Code ein zweites mal empfangen { by=PhaseDemod(); //Warten auf eingehende Impulse }while(by==0); if(comcode==combuf && subcode==subbuf) //Beide Codes gleich ? { if(subcode==SUBID) //Stimmt der Gerätecode ? { if(comcode<12) //Gültiger Kanal ? { if(comcode<8) //Die Ausgänge an PORTB { buf=PORTB; //Alten Zustand von PORTB lesen by=1<<comcode; //Ausgang an die richtige Stelle schieben if(toggle==ONE) //Ein Ausgang soll eingeschaltet werden. Ich denke hier muss die Pause hin, // also der Ausgang soll eingeschaltet werden und nach einer Sekunde wieder ausgeschaltet werden. // unten weiter das gleiche { buf|=by; //Bit setzen } else //Ein Ausgang soll ausgeschaltet werden { buf&=~by; //Bit zurücksetzen } PORTB=buf; //Und ausgeben } else //Die Ausgänge an PORTA { buf=PORTA; //Alten Zustand von PORTA lesen //Das hier ist Standard C. Kann CC5x aber nicht. Zu kompliziert !?? // by=1<<(comcode-8); //Ausgang an die richtige Stelle schieben // Erst wenn man es auseinandernimmt gehts comcode-=8; by=1<<comcode; //Ausgang an die richtige Stelle schieben if(toggle==ONE) //Ein Ausgang soll eingeschaltet werden. Und zwar hier. Wieder ca. eine Sekunde warten lassen. { buf|=by; //Bit setzen } else //Ein Ausgang soll ausgeschaltet werden { buf&=~by; //Bit zurücksetzen } PORTA=buf; //Und ausgeben } }//if comcode<12 }// ifsubcode==SUBID } //if(comcode==combuf && subcode==subbuf) } //while(1) Endlosschleife }
Ich hoffe ihr könnte mir weiterhelfen, bin echt verzweifelt
MfG Der Stuhl
-
Unglaublich, noch jemand außer mir der Wert auf ANSI C legt, muss wohl an Weihnachten liegen:
#include <time.h> void sleep( clock_t msec ) { /* wartet Millisekunden */ clock_t ende = msec+clock(); while( ende>clock() ); }
In der Hoffnung, dass dein Compiler ein wirklicher ANSI C Compiler ist und clock implementiert, sonst bliebe noch der Weg mit time(0).
-
Was hast du denn mit delay.h probiert?
_delay_ms(1000)?
-
ja genau das hab ich gemacht
aber der hat ein Fehler beim kompilieren angezeigt.
-
Fusselparty schrieb:
ja genau das hab ich gemacht
aber der hat ein Fehler beim kompilieren angezeigt.Welchen?