Hallo
Ich brauche ein bischen hilfe mit mein programm es ist eine roll fenstersteuerung also fusstaster gedrückt fenster wird geöffnet , wieder fusstater gedrückt fenster wird geschlossen ,mit eine taste (teach) wird der weg das der motor fahren soll eingelernt , das fenster fährt zum endschalter stellt der eingelernter weg auf 0 , und fährt in die andere richtung bis man die teach taste los lässt , es funktioniert alles einwandfrei ,ich möchte jetzt wenn das fenster in bewegung ist und ich der fusstaster drücke das der motor stoppt , leider hab ich kein interrupt eingang mehr gibt es iergend am möglichkeit es zu machen , vielen dank in voraus ?
Code:$regfile = "m32def.dat" $crystal = 8000000 $baud = 19200 Config Pinb.0 = Input Config Pinb.1 = Input Config Pinb.2 = Input Config Pinb.3 = Input Config Pinb.4 = Input Portb.0 = 1 Portb.1 = 1 Portb.2 = 1 Portb.3 = 1 Portb.4 = 1 Config Pind.2 = Input Config Pind.3 = Input Config Pina.7 = Input Porta.7 = 1 Portd.2 = 1 Portd.3 = 1 Config Portc = Output Config Portd.4 = Output Config Portd.6 = Output Enc_a Alias Pind.2 Enc_b Alias Pind.3 Endschalter Alias Pinb.0 Fusstaster Alias Pinb.1 Eingang5 Alias Pinb.2 Eingang6 Alias Pinb.3 Eingang7 Alias Pinb.4 Taster Alias Pina.7 Ausgang1 Alias Portc.0 Ausgang2 Alias Portc.1 Ausgang3 Alias Portc.2 Ausgang4 Alias Portc.3 Ausgang5 Alias Portc.4 Ausgang6 Alias Portc.5 Ausgang7 Alias Portc.6 Ausgang8 Alias Portc.7 Reset_ Alias Portd.4 Dir_ Alias Portd.6 Config Timer0 = Timer , Prescale = 1024 Timer0 = 240 On Timer0 Isr_timer Enable Timer0 Config Timer1 = Pwm , Pwm = 8 , Compare A Pwm = Clear Down , Prescale = 1 Config Lcdpin = Pin , Db4 = Porta.6 , Db5 = Porta.3 , Db6 = Porta.5 , Db7 = Porta.4 , E = Porta.2 , Rs = Porta.1 Config Lcd = 20 * 4 Config Int0 = Rising Config Int1 = Falling On Int0 Encoder0 On Int1 Encoder1 Enable Int0 Enable Int1 'Hardware Configuration Enable Interrupts Dim Bremsendefin As Long Dim Wert As Long Dim Weg As Long Dim Weg_eprom As Eram Long Dim Aufzu As Bit Dim Besch As Byte Dim Geschw As Word Dim Bremsweg As Word Dim Zuf As Bit Dim Auf As Bit Dim Beschlzu As Bit Dim Beschlauf As Bit Dim Freigabe As Bit Dim Bremsende As Long Dim Steigung As Byte Dim Notaus As Bit Dim Zaehler As Word Dim Notaus2 As Bit Geschw = 180 Bremsweg = 100 Steigung = 1 Weg = Weg_eprom Zuf = 0 Do Bremsende = Weg - 500 Bremsendefin = Weg - Bremsende Print Fusstaster ; " " ; Wert ; " " ; " " ; Besch ; " " ; Weg If Taster = 0 Then Reset_ = 1 Gosub Teach End If If Fusstaster = 0 Then Toggle Freigabe End If If Fusstaster = 0 And Freigabe = 1 Or Zuf = 1 And Auf = 0 Then Gosub Zu End If If Wert < Weg And Fusstaster = 0 And Freigabe = 0 Or Auf = 1 And Zuf = 0 Then Gosub Auf End If Loop Isr_timer: Return Zu: Zuf = 1 Dir_ = 0 Reset_ = 1 If Besch < Geschw And Beschlzu = 0 And Endschalter = 1 Then For Besch = 0 To Geschw Step 1 Pwm1a = Besch Waitms 5 Next Besch End If If Wert < 500 Then For Besch = Besch To 50 Step -1 Pwm1a = Besch Waitms 5 Next Besch Beschlzu = 1 If Endschalter = 0 Then Reset_ = 0 Pwm1a = 0 Besch = 0 Beschlzu = 0 Zuf = 0 Waitms 300 Wert = 1 End If End If Return Auf: Auf = 1 Dir_ = 1 Reset_ = 1 If Besch < Geschw And Beschlauf = 0 Then For Besch = 0 To Geschw Step 1 Pwm1a = Besch Waitms 5 Next Besch Beschlauf = 1 End If If Wert > Bremsende Then For Besch = Besch To 50 Step -1 Pwm1a = Besch Waitms 5 Next Besch If Wert >= Weg Or Notaus = 1 Then Reset_ = 0 Pwm1a = 0 Besch = 0 Beschlauf = 0 Auf = 0 Waitms 300 Notaus = 0 End If End If Return Teach: 'unterprogram zum teachen If Endschalter = 1 Then Dir_ = 0 Do Pwm1a = 150 Loop Until Endschalter = 0 Reset_ = 0 End If If Endschalter = 0 Then Reset_ = 1 Pwm1a = 0 Waitms 500 Wert = 0 Weg = 0 Do Dir_ = 1 Pwm1a = 150 Loop Until Taster = 1 Pwm1a = 0 Reset_ = 0 Waitms 300 Weg_eprom = Wert Weg = Wert Freigabe = 0 End If Return Encoder1: If Enc_a > Enc_b Then Decr Wert End If Return Encoder0: If Enc_b < Enc_a Then Incr Wert End If Return
Lesezeichen