Philipp Maricek schrieb:
> Verzweifelnder schrieb:
>> Hallo!
>>
>> Was sollen diese Returns!
>> Mit Return beendet man eine Sub und sonst nichts!
Falsch, eine SUB beendet man mit END SUB.
Mit RETURN beendet man eine ISR oder ein mit GOSUB aufgerufenes
Codestück (was deshalb BASIC-verwaltungstechnisch noch lange keine SUB
ist).
>>
>> Code zu kopieren denn Du nicht kapierst bringt nichts.
Richtig, trifft hier aber wohl kaum zu, denn solchen Code wird man kaum
zum Kopieren finden.
>>
>> In Bascom gibt es eine Hilfedatei. Da stehen doch glatt
>> viele wissenswerte Sachen drin.
Wieder richtig, viele Leute benutzen aber Bascom, um nicht in
Hilfedateien, Datenblättern oder anderen Dokumentationen lesen zu
müssen.
>>
>> MfG
>
> Hi,
>
> den code hab ich nicht kopeirt sonder selber geschrieben.
Das sieht man schon alleine daran, dass Du keine Kommentare geschrieben
hast, in denen Du erklärst, was Du mit Deinem Code bewirken willst.
Somit hast Du es einem Hilfewilligen unnötig erschwert, den Sinn Deines
(fehlerhaften) Codes zu verstehen.
> Und dieses
> Return soll bedeuten, dass er die if anweisung verlässt.
Das ist ein Irrtum, ein Blick in die Bascom-Onlinehilfe hätte Dir das
auch gezeigt. Einfach mal F1 drücken, wenn der Cursor auf der
unverstandenen Anweisung (hier "IF") steht. Programmieren (auch in
Bascom) ist kein Multimediakonsum, hier sollte man auch mal zur Tastatur
greifen und nicht alles mit der Maus machen wollen. ;-)
> Aber anscheind
> ist das nicht der richtige Befehl dafür.
Richtig erkannt, es ist die falsche Anweisung für Deinen Zweck...
> Wie ist er denn richtig?
IF beendet man mit END IF (wird je nach BASIC-Dialekt getrennt oder
zusammen geschrieben).
Der Hase liegt aber ganz woanders im Pfeffer. Selbst wenn Du alle
Anweisungen auswendig gelernt hast, wirst Du sie nicht richtig einsetzen
können, wenn Du nicht in der Lage bist, die zu Problemlösung als
programmiersprachenunabhängigen Algorithmus zu formulieren. Dies erkenne
ich z.B. daran:
1 | If Zaehler >= 150 Then
|
2 | Return
|
3 | Elseif Zaehler < 150 Then
|
4 | Zaehler = Zaehler + 1
|
5 | Servo(1) = Zaehler
|
6 | End If
|
Das Return wird Dir einen Stacküberlauf bescheren, was zum
Programmabsturz führt. Selbst wenn man das Return entfernt (also keine
Anweisung im If-Block hat), ist es doppeltgemoppelt und verschlechtert
die Lesbarkeit.
So wäre es zumindest lesbarer:
1 | 'Servo-Bewegung nach oben:
|
2 | If Zaehler < 150 Then 'wenn Endwert noch nicht erreicht
|
3 | Zaehler = Zaehler + 1 'Hilfsvariable erhöhen und
|
4 | Servo(1) = Zaehler 'als neue Servoposition setzen
|
5 | End If
|
Ob Dein Programm damit funktioniert, kann ich Dir nicht sagen, denn ich
werde deshalb die Schaltung nicht aufbauen und Bascom anwerfen. Weitere
Fehlerquellen stecken nämlich im Hintergrund der Bascom-Lib in den
Funktionen Pulsein und Servo und dem verwendeten Takt. Diese sind für
4MHz berechnet, Du definierst aber 8MHz, und der AVR läuft vermutlich
mit 1MHz (Auslieferungszustand). Solange Du das noch nicht zweifelsfrei
geklärt hast, stocherst Du weiterhin im Dunkeln.
...