Hallo,
ich habe den angehängten Code zur Fernsteuerung von 5 Relais geschrieben.
Es funktioniert auch soweit bis auf die Fernsteuerung.
Bei Eingabe von t1-1 zieht verändert das erste Relai seinen Schaltzustand bei t1-2 das zweite u.s.w.
Ein Problem bekomme ich nur, wenn ich den Text nicht in dieser Form eingebe oder mich vertippe.
Dann hängt sich die Interruptsteuerung auf.
Was muss ich tun, um den Zustand nach kurzer Zeit, z.b. 1s oder nach Feststellung des Textendes aufzulösen?
Code:'********************************************************* $regfile = "m8def.dat" $crystal = 7372800 $baud = 4800 Config Pinc.0 = Input Config Pinc.1 = Input Config Pinc.2 = Input Config Pinc.3 = Input Config Pinc.4 = Input . Config Pinc.5 = Input Config Portb.0 = Output Config Portb.1 = Output Config Portb.2 = Output Config Portd.7 = Output Config Portd.6 = Output Config Portb.5 = Output Config Portd.2 = Output Dim I As Byte Dim Key As Byte Dim S As String * 7 Dim A As String * 4 Dim X1 As Boolean Dim X2 As Boolean Dim X3 As Boolean Dim X4 As Boolean Dim Z As String * 1 Dim W As String * 1 ' **** Timer ********************************************* Dim T1 As Long Dim T2 As Long Dim T3 As Long Dim T4 As Long Dim T5 As Long Dim R1 As Bit Dim R2 As Bit Dim R3 As Bit Dim R4 As Bit Dim R5 As Bit Const Keys = 5 ' **** Programmstart ************************************** Do R1 = Portb.0 R2 = Portb.1 R3 = Portb.2 R4 = Portd.6 R5 = Portd.7 ' **** RS485 Aktivieren und Bus prüfen On Urxc Onrxd Enable Urxc Enable Interrupts If Len(s) > 3 Then A = S S = "" Goto Pruefung 'Text ist größer als 3 Stellen Else 'Disable Interrupts 'Disable Urxc End If '**************************************************** Portb.5 = 1 For I = 1 To Keys Key = I Select Case Key Case 1 : Debounce Pinc.0 , 0 , Key_o1 , Sub 'Port 1. Case 2 : Debounce Pinc.1 , 0 , Key_o2 , Sub 'Port 2 Case 3 : Debounce Pinc.2 , 0 , Key_o3 , Sub 'Port 3 Case 4 : Debounce Pinc.3 , 0 , Key_o4 , Sub 'Port 4 Case 5 : Debounce Pinc.4 , 0 , Key_o5 , Sub 'Port 5 End Select Next Loop Key_o1: Toggle Portb.0 'Buchse 1 Return Key_o2: Toggle Portb.1 'Buchse 2 Return Key_o3: Toggle Portb.2 'Buchse 3 Return Key_o5: Toggle Portd.6 'Buchse 4 Return Key_o4: Toggle Portd.7 'Buchse 5 Return '**************************************************** Onrxd: S = S + Chr(udr) Return '**************************************************** Pruefung: 'Prüfung ob t1 in den ersten beiden Stellen enthalten ist Z = Mid(a , 1 , 2 ) If Z = "t1" Then Goto Fern A = Mid(s , 1 , 6) Else S = "" Disable Interrupts Disable Urxc End If Return '**************************************************** Fern: Disable Interrupts W = Mid(a , 4 , 1 ) If W = "1" Then Gosub Key_o1 If W = "2" Then Gosub Key_o2 If W = "3" Then Gosub Key_o3 If W = "4" Then Gosub Key_o4 If W = "5" Then Gosub Key_o5 Disable Urxc Waitms 100 Portd.2 = 1 Waitms 10 Print Print "$t1-" ; R3 ; R2 ; R1 ; R5 ; R4 Waitms 100 Portd.2 = 0 Return End







Zitieren

Lesezeichen