Hallo µc Profis, ihr habt mir schon des Öfteren weiterhelfen können, hoffentlich jetzt auch. Das C-Programm im Anhang steuert einen Servo, der einen Zylinder zum Pumpen bedient. Das funktioniert auch Prima.... if (count <= 10000) { if (pwmimpuls <=35) Als Beispiel habe ich mal diese Zeilen aus dem Hauptprogramm herausgenommen. Die Werte 10000, 35 und analog die weiteren Werte steuern Frequenz und Pulsweite des PWM-Signals. Da ich verschiedene Werte benötige und nicht mehrere Unterprogramme schreiben will, habe ich mir überlegt, ob es möglich ist die Werte im Programm durch Platzhalter zu ersetzten und sie je nach Auswahl über ein Array zu befüllen. Wie man ein Array anlegt weis ich. Ich weis jedoch nicht ob dies Überhaupt möglich ist und wenn ja wie muss da die Syntax dazu aussehen. Ich verwende einen AT89C5131 µc, RIDE7.... Ein Tipp von euch wäre wirklich prima.... Die gestellte Aufgabe ist zwar mit diesem Programm schon gelöst aber ich habe noch Zeit bis zur Abgabe des Projekts und würde das gerne eleganter gestallten.... Ich sage schon mal DANKE.... Grüße aus Heidelberg
Step Han schrieb: > if (count <= 10000) > { > if (pwmimpuls <=35) > > Als Beispiel habe ich mal diese Zeilen aus dem Hauptprogramm > herausgenommen. Und ich specke das noch weiter ab und konzentriere mich erst mal nur auf die 10000 > Die Werte 10000, 35 und analog die weiteren Werte steuern Frequenz und > Pulsweite des PWM-Signals. Da ich verschiedene Werte benötige und nicht > mehrere Unterprogramme schreiben will, habe ich mir überlegt, ob es > möglich ist die Werte im Programm durch Platzhalter zu ersetzten Du weißt aber schon, dass man an Funktionen Argumente übergeben kann? D.h. nichts und niemand hindert dich daran, zu schreiben
1 | void Test1 ( int Schaltgrenze ) |
2 | |
3 | {
|
4 | TH0 = 0xB8; |
5 | //TH0=0xFF; //Timer auf 65335 setzen (noch 200 Intervalle bis überlauf=dauer: 0,1ms)
|
6 | //TL0=0x37;
|
7 | |
8 | count ++; |
9 | pwmimpuls ++; |
10 | |
11 | if (count <= Schaltgrenze ) |
12 | {
|
13 | ....
|
und so die Angabe der 10000 an den Aufrufer der Funktion zu delegieren.
1 | int main() |
2 | {
|
3 | |
4 | ....
|
5 | |
6 | |
7 | Test1( 10000 ); |
Und dieser Aufrufer kann sich dann wieder Methoden bedienen, wie er zu diesem Werten kommt. Ob er die Werte ausrechnet, ob er die Werte anhand von Pegeln an Eingängen bestimmt und ja: ob er die Werte aus einem Array ausliest .... das kann er machen wie er will und interessiert die Funktion Test1 wiederrum nicht. Die arbeitet dann nur noch mit diesem Wert, den sie vom Aufrufer bekommt.
Und PS. Sowas
1 | if (count <= 10000) |
2 | {
|
3 | ...
|
4 | }
|
5 | if (count > 10000) |
6 | ...
|
ist unklug! Die komplette Syntax eines if lautet if( Ausdruck ) Anweisung1 else Anweisung2 mit der Bedeutung: Wenn Ausdruck1 einen logischen Wahrheitswert von TRUE hat, dann wird Anweisung1 ausgeführt, ansonsten Anweisung2. Genau den Fall hast du hier aber! Wenn count1 nicht kleiner/gleich 10000 ist, dann MUSS count1 automatisch größer als 10000 sein. Eine andere Möglichkeit gibt es nicht mehr. D.h. du kannst das so schreiben
1 | if (count <= 10000) |
2 | {
|
3 | ...
|
4 | }
|
5 | else
|
6 | {
|
7 | ...
|
und sparst dir damit einen Vergleich und was viel wichtiger ist: Du sparst dir die 2.te Angabe der Vergleichsgröße! Denn du hast dir hier eine potentielle Fehlerquelle eingebaut, indem du bei einer Änderung
1 | if (count <= 10005) |
2 | {
|
3 | ...
|
4 | }
|
5 | if (count > 10000) |
6 | ...
|
zwar den ersten Vergleich verändert hast, aber auf den 2-ten vergessen hast! Mit einem 'else' kann dir das nicht passieren, denn die Zahl mit der verglichen wird, steht nur einmal dort. Änderst du sie, dann ändert sich damit auch automatisch die Bedingung, wann der µC ins else kommen wird.
UFF.....!!!!! Das war ein wenig viel auf einmal, da ich sehr lange für das PRGM gebraucht habe und mir damit sehr schwer tue ABER das mit der IF-Anweisung hab ich verstnaden und erspare mir damit eine Menge BLA BLA vom IT-Lehrer und Prüfer... dafür schonmal ein großes DANKE!!! Und der Rest.... wenn ich das Richtig verstehe ersetzte ich den Wert z.B. 10000 durch eine Variable.... dann önnte ich z.B. in einer Switch-case Stuktur angeben: case Taster1 = 1 Test(10000) case Taster2 = 1 Test(20000) usw... das gleiche für die die restlichen nweisungen, nur was ich nicht verstehe ist der Wert in der Klammer... hast das ich müsste für mehrere Werte folgendes schreiben: int Test () (int count; int pwmimpuls) und dann in der case Struktur case Taster1 = 1 Test(10000; 65) ....??? wenn ja, wie bekomme ich dann zwei verschiedene Werte in der im Moment etwas unglücklichen if-Anweisung unter einen Hut... mit zwei verschiedenen Variablen??? Schon mal ein dickes DANKE
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.