Hallo
Hab es jetzt doch mit einem Interrupt gemacht.
Da bleibt mir dann auch ein Timmer frei
Mit Vier Dioden zum Interrupt pin Int0
Das Wait mal durch For-next Schleifen ersetzt.Code:'--------Roboter KKL Steuerung -------------------- '$sim $regfile = "m8def.dat" $crystal = 8000000 '---Config Port's-------------------- Config Portd = Input Portd = 255 Config Portb = Output '---Config Timer ------------------- Config Timer0 = Timer , Prescale = 64 '---Config Interrupt----------------- Config Int0 = Falling '---Sonstiges------------------------ Dim Sensor As Byte Dim A1 As Word Dim A2 As Word 'On Timer0 Sensoren_auswerten 'Enable Timer0 Enable Interrupts '======================================================================== '========= Hauptprogramm ================================================ '======================================================================== Portb = 0 'Gosub Vor On Int0 Sensoren_auswerten Enable Int0 Do Anfang: Select Case Sensor Case 1: Gosub Zurueck For A1 = 1 To 5 If Sensor <> 1 Then Goto Anfang For A2 = 1 To 65500 Next A2 Next A1 Gosub Rechts For A1 = 1 To 5 If Sensor <> 1 Then Goto Anfang For A2 = 1 To 65500 Next A2 Next A1 Gosub Vor Sensor = 0 Case 2: Gosub Zurueck For A1 = 1 To 5 If Sensor <> 2 Then Goto Anfang For A2 = 1 To 65500 Next A2 Next A1 Gosub Links For A1 = 1 To 5 If Sensor <> 2 Then Goto Anfang For A2 = 1 To 65500 Next A2 Next A1 Gosub Vor Sensor = 0 Case 3: Gosub Vor For A1 = 1 To 1 If Sensor <> 3 Then Goto Anfang For A2 = 1 To 65500 Next A2 Next A1 Gosub Links For A1 = 1 To 1 If Sensor <> 3 Then Goto Anfang For A2 = 1 To 65500 Next A2 Next A1 Gosub Vor Sensor = 0 Case 4: Gosub Vor For A1 = 1 To 1 If Sensor <> 4 Then Goto Anfang For A2 = 1 To 65500 Next A2 Next A1 Gosub Rechts For A1 = 1 To 1 If Sensor <> 4 Then Goto Anfang For A2 = 1 To 65500 Next A2 Next A1 Gosub Vor Sensor = 0 End Select Loop End '===============UnterProgramme=========================================== Sensoren_auswerten: If Pind.4 = 0 Then Sensor = 1 'Sensor links vorne If Pind.5 = 0 Then Sensor = 2 'Sensor rechts vorne If Pind.6 = 0 Then Sensor = 3 'Sensor links hinten If Pind.7 = 0 Then Sensor = 4 'Sensor rechts hinten Return Links: Portb.1 = 1 Portb.2 = 1 Portb.3 = 0 Return Rechts: Portb.1 = 1 Portb.2 = 0 Portb.3 = 1 Return Zurueck: Portb.1 = 1 Portb.2 = 1 Portb.3 = 1 Return Vor: Portb.1 = 1 Portb.2 = 0 Portb.3 = 0 Return Stopp: Portb.1 = 0 Portb.2 = 0 Portb.3 = 0 Return
(später vielleicht durch Timer0)
und überrall eine Abfrage drinnen, ob die Sensor Werte noch aktuell sind.
Gibt es eine Möglichkeit, dass ich durch den Interrupt an den "Anfang" springen kann ?
Aus der ISR kann ich nicht mit Goto springen
Habt ihr noch Vorschläge ??







Zitieren

Lesezeichen