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
Lesezeichen