Hallo.
So, ich hab jetzt das programm nochmal komplett anders aufgebaut (ohne GOTOs) und es funktioniert auch. Jetzt wollt ich wissen, ob das vom "Stiel" her so OK ist. Wär nett, wenn einer von euch das mal kurz überfliegen könnte.
Code:
$regfile = "2313def.dat"
$crystal = 3686400
$baud = 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
Portb.1 = 1
Portb.2 = 1
Mrechtsvor Alias Portd.2
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
Enable Timer0
Start Timer0
Enable Interrupts
On Timer0 Ontimer
Enablelinks = 1
Enablerechts = 1
Do
If Schalterlinks = 1 And Schaltermitte = 1 And Schalterrechts = 1 Then
Print "g"
Gosub Gerade
End If
If Schalterlinks = 0 Then
Print "L"
Zaehler = 0
Gosub Links
End If
If Schaltermitte = 0 Then
Print "M"
Zaehler = 0
Gosub Mitte
End If
If Schalterrechts = 0 Then
Print "R"
Zaehler = 0
Gosub Rechts
End If
Loop
Gerade:
Mlinksvor = 0
Mlinksrueck = 0
Mrechtsvor = 0
Mrechtsrueck = 0
Waitms 100
Do
Mlinksvor = 1
Mlinksrueck = 0
Mrechtsvor = 1
Mrechtsrueck = 0
If Schalterlinks = 0 Or Schaltermitte = 0 Or Schalterrechts = 0 Then
Return
End If
Loop
Links:
Mlinksvor = 0
Mlinksrueck = 0
Mrechtsvor = 0
Mrechtsrueck = 0
Waitms 100
Do
If Schaltermitte = 0 Or Schalterrechts = 0 Then
Return
End If
If Zaehler <= 33 Then
Mlinksvor = 0
Mlinksrueck = 1
Mrechtsvor = 0
Mrechtsrueck = 1
Else
Mlinksvor = 1
Mlinksrueck = 0
Mrechtsvor = 0
Mrechtsrueck = 1
End If
If Zaehler = 70 Then
Return
End If
Loop
Mitte:
Mlinksvor = 0
Mlinksrueck = 0
Mrechtsvor = 0
Mrechtsrueck = 0
Waitms 100
Do
If Schalterlinks = 0 Or Schalterrechts = 0 Then
Return
End If
If Zaehler <= 33 Then
Mlinksvor = 0
Mlinksrueck = 1
Mrechtsvor = 0
Mrechtsrueck = 1
Else
Mlinksvor = 1
Mlinksrueck = 0
Mrechtsvor = 0
Mrechtsrueck = 1
End If
If Zaehler = 90 Then
Return
End If
Loop
Rechts:
Mlinksvor = 0
Mlinksrueck = 0
Mrechtsvor = 0
Mrechtsrueck = 0
Waitms 100
Do
If Schalterlinks = 0 Or Schaltermitte = 0 Then
Return
End If
If Zaehler <= 33 Then
Mlinksvor = 0
Mlinksrueck = 1
Mrechtsvor = 0
Mrechtsrueck = 1
Else
Mlinksvor = 0
Mlinksrueck = 1
Mrechtsvor = 1
Mrechtsrueck = 0
End If
If Zaehler = 70 Then
Return
End If
Loop
Ontimer:
Incr Zaehler
Return
mfg Markus
Edit: Achja, ich hab jetzt keine Relais mehr, sondern nen L293D, deswegen sind die pinbelegungen jetzt etwas anders.
Lesezeichen