Ich bin neu in der sprache wie funtzt das mit Gosub und wo ist der Unterschied zu goto? Und wie realisiere ich das mit den Prozzeduren und call?
und wenn das Programm dann das tut, was es soll, würde ich im Hinblick auf kommende Projekte dringend empfehlen, das Programm "sauberer" zu machen.
- Tasterabfrage mit IF ... ELSE ... ENDIF in eine Do-Loop Schleife
- keine GOTO sondern GOSUB mit RETURN
- für die Programmteile "blinken" und "durchlauf" Prozeduren schreiben, die dann mit CALL angesprochen werden
Das mag kleinlich klingen, aber es ist enorm wichtig, wenn man bei etwas größeren Projekten noch die Übersicht behalten möchte.
Die Verwendung den Alias ist aber schonmal sehr gut (würde ich auch bei dem Taster durchhalten) damit du, wenn du mal die Pinbelegungen änderst, nicht das ganze Proekt nochmal durchforsten musst, wo welche Ports und Pins angesprochen werden.
Gruß MeckPommER
Ich bin neu in der sprache wie funtzt das mit Gosub und wo ist der Unterschied zu goto? Und wie realisiere ich das mit den Prozzeduren und call?
Der Unterschied zwischen goto und gosub/return ist, das ein goto einfach zu einem Lable springt. Danach musst du halt am ende der routine "per hand" wieder zurückspringen.
Springst du mit gosub in ein Unterprogramm und beendest dies mit einem return, springt das Programm automatisch wieder zurück zum Befehl nach dem gosub.
Der enorme Vorteil liegt darin, das du das Unterprogramm von verschiedenen Stellen im Hauptprogramm aus aufrufen kannst, ohne das dein Programmablauf beeinflusst wird (z.b. immer zum Startpunkt des Hauptprogramms zurückkehrt)
Das mit den Prozeduren ist natürlich noch etwas eleganter, da du dann deinem Unterprogramm auch bestimmte Variablen sauber übergeben kannst. Somit kannst du dein Programm gut strukturieren und einfache Programmteile übersichtlich zu immer komplexeren Aufgabenlösungen ordnen.
Bascom hat eine Hilfe eingebaut, die zumeist auch ein kleines Beispielprogramm beinhaltet. Da steht auch alles über Prozeduren, Funktionen, gosub, etc. ... Ruhig mal reinschauen und nachmachen. Die Atmels können ca. 10000 Mal neu gebrutzelt werden, da ist viel Spielraum für Fehlversuche
Viel Erfolg wünscht
MeckPommER
ok ich habs noch mal mit zwei Schaltern und gosub gemacht...
Code:$regfile = "m32def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 $crystal = 16000000 Config Portd.7 = Output Config Portc.1 = Output Config Portc.0 = Output Config Pind.0 = Input Config Pind.1 = Input Taster Alias Pind.0 Taster2 Alias Pind.1 Rot Alias Portd.7 Gelb Alias Portc.1 Gruen Alias Portc.0 Portd.0 = 1 Portd.1 = 1 Rot = 1 Gelb = 1 Gruen = 1 Do If Taster = 0 Then Gosub Led_lauf If Taster2 = 0 Then Gosub Blinken Loop Blinken: Rot = 0 Gelb = 0 Gruen = 0 Waitms 500 Rot = 1 Gelb = 1 Gruen = 1 Waitms 500 Return Led_lauf: Rot = 0 Waitms 50 Rot = 1 Waitms 50 Gelb = 0 Waitms 50 Gelb = 1 Waitms 50 Gruen = 0 Waitms 50 Gruen = 1 Waitms 50 Gelb = 0 Waitms 50 Gelb = 1 Waitms 50 Return End
Lesezeichen