Hallo.
So, ich hab jetzt die IF-schleifen noch so umgebaut und kommentare eigefuegt.
Mfg Markus
Code:$regfile = "2313def.dat" 'Atmel AT90S2313 $crystal = 3686400 'Quarz = 3.6864 mhz $baud = 9600 ' Baudrate = 9600 Dim Zaehler As Byte Ddrd.2 = 1 'motor rechts vorwärts Ddrd.3 = 1 'motor rechts rückwärts Ddrd.4 = 1 'motor links vorwärts Ddrd.5 = 1 'motor links rückwärts Ddrb.6 = 1 'enable rechts Ddrb.7 = 1 'enable links Ddrb.0 = 0 'taster links vorne Ddrb.1 = 0 'taster mitte vorne Ddrb.2 = 0 'taster rechts vorne Portb.0 = 1 'Pullups fuer taster aktivieren Portb.1 = 1 Portb.2 = 1 Mrechtsvor Alias Portd.2 'Pins entsprechent der belegung benennen Mrechtsrueck Alias Portd.3 Mlinksvor Alias Portd.4 Mlinksrueck Alias Portd.5 Enablerechts Alias Portb.6 Enablelinks Alias Portb.7 Schalterlinks Alias Pinb.0 Schaltermitte Alias Pinb.1 Schalterrechts Alias Pinb.2 Config Timer0 = Timer , Prescale = 1024 'timer0 wird verwendet, quarz / 1024 Enable Timer0 'timer0 einschalten Start Timer0 'timer0 starten Enable Interrupts 'interrupts zulassen On Timer0 Ontimer 'bei timerueberlauf gehe zu "ontimer" Enablelinks = 1 'Pin fuer linken motor auf 5V Enablerechts = 1 'Pin fuer rechten motor auf 5V '***************###### HAUPTSCHLEIFE ######*************** Do If Schalterlinks = 1 And Schaltermitte = 1 And Schalterrechts = 1 Then 'wenn alle schalter frei Print "g" 'print "g" für fahrtenschreiber Gosub Gerade 'gehe zu "gerade" Else If Schalterlinks = 0 Then 'wenn linker schalter gedrückt Print "L" 'print "L" für fahrtenschreiber Zaehler = 0 'setzte Zaehler auf null Gosub Links 'gehe zu "links" End If If Schaltermitte = 0 Then 'wenn mittlerer schalter gedrückt Print "M" 'print "M" für fahrtenschreiber Zaehler = 0 'setzte Zaehler auf null Gosub Mitte 'gehe zu "mitte" End If If Schalterrechts = 0 Then 'wenn rechter schalter gedrückt Print "R" 'print "R" für fahrtenschreiber Zaehler = 0 'setzte Zaehler auf null Gosub Rechts 'gehe zu "rechts" End If End If Loop '***************###### GERADE ######*************** Gerade: Mlinksvor = 0 'motoren bremsen Mlinksrueck = 0 Mrechtsvor = 0 Mrechtsrueck = 0 Waitms 100 'zeit zum bremsen Do Mlinksvor = 1 'unendlich vorwaerts fahren, bis anderer befehl kommt Mlinksrueck = 0 Mrechtsvor = 1 Mrechtsrueck = 0 If Schalterlinks = 0 Or Schaltermitte = 0 Or Schalterrechts = 0 Then 'wenn irgendein schalter gedrückt Return 'dann zurueck zur hauptschleife End If Loop '***************###### BEI LINKEM SCHALTER ######*************** Links: Mlinksvor = 0 'motoren bremsen Mlinksrueck = 0 Mrechtsvor = 0 Mrechtsrueck = 0 Waitms 100 'zeit zum bremsen Do If Schaltermitte = 0 Or Schalterrechts = 0 Then 'wenn mittlerer oder rechter schalter gedrueckt Return 'dann zurueck zur hauptschleife Else If Zaehler <= 33 Then 'wenn Zaehler <= 33 Mlinksvor = 0 'dann rueckwaerts fahren bis Zaehler > 33 Mlinksrueck = 1 Mrechtsvor = 0 Mrechtsrueck = 1 Else Mlinksvor = 1 'danach drehung nach rechts Mlinksrueck = 0 Mrechtsvor = 0 Mrechtsrueck = 1 End If End If If Zaehler = 70 Then 'wenn Zaehler = 70 Return 'dann zurueck zur hauptschleife End If Loop '***************###### BEI MITTLEREM SCHALTER ######*************** Mitte: Mlinksvor = 0 'motoren bremsen Mlinksrueck = 0 Mrechtsvor = 0 Mrechtsrueck = 0 Waitms 100 'zeit zum bremsen Do If Schalterlinks = 0 Or Schalterrechts = 0 Then 'wenn linker oder rechter schalter gedrueckt Return 'dann zurueck zur hauptschleife Else If Zaehler <= 33 Then 'wenn Zaehler <= 33 Mlinksvor = 0 'dann rueckwaerts fahren bis Zaehler > 33 Mlinksrueck = 1 Mrechtsvor = 0 Mrechtsrueck = 1 Else Mlinksvor = 1 'danach drehung nach rechts Mlinksrueck = 0 Mrechtsvor = 0 Mrechtsrueck = 1 End If End If If Zaehler = 90 Then 'wenn Zaehler = 90 Return 'dann zurueck zur hauptschleife End If Loop '***************###### BEI RECHTEM SCHALTER ######*************** Rechts: Mlinksvor = 0 'motoren bremsen Mlinksrueck = 0 Mrechtsvor = 0 Mrechtsrueck = 0 Waitms 100 'zeit zum bremsen Do If Schalterlinks = 0 Or Schaltermitte = 0 Then 'wenn linker oder mittlerer schalter gedrueckt Return 'dann zurueck zur hauptschleife Else If Zaehler <= 33 Then 'wenn Zaehler <= 33 Mlinksvor = 0 'dann rueckwaerts fahren bis Zaehler > 33 Mlinksrueck = 1 Mrechtsvor = 0 Mrechtsrueck = 1 Else Mlinksvor = 0 'danach drehung nach links Mlinksrueck = 1 Mrechtsvor = 1 Mrechtsrueck = 0 End If End If If Zaehler = 70 Then 'wenn Zaehler = 70 Return 'dann zurueck zur hauptschleife End If Loop 'Interrupt-Routine für TIMER0 Ontimer: 'wenn timer0 ueberlaeuft Incr Zaehler 'dann Zaehler incrementieren Return 'danach zurueck zur hauptschleife







Zitieren

Lesezeichen