-
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