$regfile = "m8def.dat" $framesize = 32 $swstack = 32 $hwstack = 32 'Variablen Dim Ws As Integer Dim Cny1 As Integer Dim Cny2 As Integer Dim Cny3 As Integer Dim Taste As Byte Dim Fahren As Byte Dim I As Integer Dim Los As Byte Dim Taste1 As Bit Dim Taste2 As Bit Dim Speedli As Integer Dim Speedre As Integer Dim Fall As Byte Dim M20 As Bit 'Unterprogramme Declare Sub 2motvorw() 'Subs anmelden Declare Sub Rechtskurve() Declare Sub Linkskurve() Declare Sub Rueckwaerts() Declare Sub Bremsen() Declare Sub Sensorabfrage() Declare Sub Tastenabfrage() Declare Sub Motorregelung() $crystal = 16000000 $baud = 9600 'Motore 'Ports für linken Motor Config Pind.6 = Output 'Linker Motor Kanal 1 Config Pind.7 = Output 'Linker Motor Kanal 2 Config Pinb.1 = Output 'Linker Motor PWM 'Ports für rechten Motor Config Pind.5 = Output 'Rechter Motor Kanal 1 Config Pind.4 = Output 'Rechter Motor Kanal 2 Config Pinb.2 = Output 'Rechter Motor PWM 'Sensoren Config Pinc.0 = Input 'CNY1 Portc.0 = 1 Config Pinc.1 = Input 'CNY2 Portc.1 = 1 Config Pinc.2 = Input 'CNY3 Portc.2 = 1 'Tasten Config Pind.2 = Input 'Taste1 Config Pind.3 = Input 'Taste2 Config Pinb.0 = Output 'LED 'PWM Config Timer1 = Pwm , Pwm = 10 , Compare A Pwm = Clear Down , Compare B Pwm = Clear Down , Prescale = 8 Pwm1a = 0 Pwm1b = 0 M20 = 1 'Hauptprogramm Do Call Tastenabfrage If Taste1 = 0 Then M20 = Taste1 'Taste1 Abfragen Weiter: Taste2 = 1 'Programmschleife For I = 100 To 1000 Step 50 'Beide Mots vorw. Speedli = I Speedre = I Call 2motvorw Waitms 1000 Next I Call Bremsen 'Bremsen For I = 1 To 30 'Led blinken lassen Portb.0 = 0 Waitms 200 Portb.0 = 1 Waitms 100 Next I For I = 1000 To 100 Step -50 'Beide Mots rueckw. Speedli = I Speedre = I Call Rueckwaerts Waitms 1000 Next I Call Bremsen 'Bremsen hier unnötig 'aber immer gut fürs IC End If 'End If für Taste1 'Ende Schleife Taste2 abfragen Call Tastenabfrage 'Taste2 Abfragen If Taste2 = 0 Then 'Taste2 gedrückt Taste1 = 1 'Dann stehen bleiben M20 = 1 End If If M20 = 0 Then 'Weiter machen Goto Weiter 'Hin u. her fahren End If Loop End 'Subs Sub 2motvorw() 'Motoren Ein 70% 'Linker Motor ein Portd.6 = 1 'Richtung vorw. Portd.7 = 0 'Richtung vorw. Portb.1 = 1 'Linker Motor EIN 'Rechter Motor ein Portd.5 = 1 'Richtung vorw. Portd.4 = 0 'Richtung vorw. Portb.2 = 1 'rechter Motor Ein Pwm1a = Speedli '1000=Maxspeed : 330=Minspeed Pwm1b = Speedre End Sub Sub Rechtskurve() 'Rechtsdrehung 'Linker Motor ein Portd.6 = 1 'Richtung vorw. Portd.7 = 0 'Richtung vorw. Portb.1 = 1 'Linker Motor EIN 'Rechter Motor ein Portd.5 = 0 'Richtung rück. Portd.4 = 1 'Richtung rück. Portb.2 = 1 'rechter Motor Ein Pwm1a = Speedli '1000=Maxspeed : 330=Minspeed Pwm1b = Speedre End Sub Sub Linkskurve() 'linkssdrehung 'Linker Motor ein Portd.6 = 0 'Richtung rück. Portd.7 = 1 'Richtung rück. Portb.1 = 1 'Linker Motor EIN 'Rechter Motor ein Portd.5 = 1 'Richtung vorw. Portd.4 = 0 'Richtung vorw. Portb.2 = 1 'rechter Motor Ein Pwm1a = Speedli '1000=Maxspeed : 330=Minspeed Pwm1b = Speedre End Sub Sub Bremsen() 'Anhalten 'Linker Motor ein Portd.6 = 1 'Richtung stop. Portd.7 = 1 'Richtung stop. Portb.1 = 1 'Linker Motor EIN 'Rechter Motor ein Portd.5 = 1 'Richtung stop. Portd.4 = 1 'Richtung stop. Portb.2 = 1 'rechter Motor Ein Pwm1a = 1000 Pwm1b = 1000 Waitms 40 End Sub Sub Rueckwaerts() '200 ms Rückwärts 'Linker Motor ein Portd.6 = 0 'Richtung vorw. Portd.7 = 1 'Richtung vorw. Portb.1 = 1 'Linker Motor EIN 'Rechter Motor ein Portd.5 = 0 'Richtung vorw. Portd.4 = 1 'Richtung vorw. Portb.2 = 1 'rechter Motor Ein Pwm1a = Speedli '1000=Maxspeed : 330=Minspeed Pwm1b = Speedre End Sub Sub Sensorabfrage() Start Adc Cny1 = Getadc(0) Cny2 = Getadc(1) Cny3 = Getadc(2) End Sub Sub Motorregelung() If Cny1 > 300 Then Speedli = 550 Speedre = 1020 Fall = 2 End If If Cny3 > 300 Then Speedli = 1020 Speedre = 550 Fall = 3 End If If Cny1 > 500 Then Speedli = 380 Speedre = 1020 Fall = 4 End If If Cny3 > 500 Then Speedli = 1020 Speedre = 380 Fall = 5 End If If Cny2 > 750 Then Speedli = 1020 Speedre = 1020 Fall = 1 End If End Sub Sub Tastenabfrage() 'Diese Unterfunktion fragt die 2 Tasten An D3&D4 ab Taste1 = Pind.2 Taste2 = Pind.3 End Sub