Hallo,
Soll ich wirklich den ganzen Code posten?
Sind fast 700 Programmzeilen.
(Habe einen Teil gelöscht, da ich über die Max Zeichengröße des Betrages gekommen bin.)
Hier die Empfängerplatine:
Code:
$regfile = "m16def.dat"
$crystal = 8000000
Config Porta = Input
Config Portb = Input
Config Portc = Output
Config Portd = Input
Dim Timer As Word
Timer = 55800
Config Timer1 = Timer , Prescale = 1024
Enable Timer1
On Timer1 Sekundentakt
Enable Interrupts
Timer1 = Timer
Tasterx1hoch Alias Pina.6
Tasterx1runter Alias Pina.5
Tasterx2hoch Alias Pina.2
Tasterx2runter Alias Pina.1
Tasterx3hoch Alias Pind.5
Tasterx3runter Alias Pind.4
Tasterx4hoch Alias Pind.1
Tasterx4runter Alias Pind.0
Tasteralleshoch Alias Pind.7
Tasterallesrunter Alias Pina.7
Relaisx1hoch Alias Portc.4
Relaisx1runter Alias Portc.3
Relaisx2hoch Alias Portc.5
Relaisx2runter Alias Portc.2
Relaisx3hoch Alias Portc.6
Relaisx3runter Alias Portc.1
Relaisx4hoch Alias Portc.7
Relaisx4runter Alias Portc.0
Eingang1 Alias Pinb.0
Eingang2 Alias Pinb.1
Eingang3 Alias Pinb.2
Eingang4 Alias Pinb.3
Eingang5 Alias Pinb.4
Eingang6 Alias Pinb.5
Eingang7 Alias Pinb.6
Eingang8 Alias Pinb.7
Dim X1hoch As Word
Dim X2hoch As Word
Dim X3hoch As Word
Dim X4hoch As Word
Dim X11hoch As Word
Dim X21hoch As Word
Dim X31hoch As Word
Dim X41hoch As Word
Dim X13hoch As Bit
Dim X23hoch As Bit
Dim X33hoch As Bit
Dim X43hoch As Bit
Dim X13runter As Bit
Dim X23runter As Bit
Dim X33runter As Bit
Dim X43runter As Bit
Dim X1runter As Word
Dim X2runter As Word
Dim X3runter As Word
Dim X4runter As Word
Dim X11runter As Word
Dim X21runter As Word
Dim X31runter As Word
Dim X41runter As Word
Dim Zeitx1hoch As Byte
Dim Zeitx1runter As Byte
Dim Zeitx2hoch As Byte
Dim Zeitx2runter As Byte
Dim Zeitx3hoch As Byte
Dim Zeitx3runter As Byte
Dim Zeitx4hoch As Byte
Dim Zeitx4runter As Byte
Dim Alleshoch As Bit
Dim Allesrunter As Bit
Dim X1ganzhoch As Bit
Dim X1ganzrunter As Bit
Dim X2ganzhoch As Bit
Dim X2ganzrunter As Bit
Dim X3ganzhoch As Bit
Dim X3ganzrunter As Bit
Dim X4ganzhoch As Bit
Dim X4ganzrunter As Bit
Dim A As Byte
Relaisx1hoch = 0 'Relais X1 hoch aus
Relaisx1runter = 0 'Relais X1 runter aus
Relaisx2hoch = 0 'Relais X2 hoch aus
Relaisx2runter = 0 'Relais X2 runter aus
Relaisx3hoch = 0 'Relais X3 hoch aus
Relaisx3runter = 0 'Relais X3 runter aus
Relaisx4hoch = 0 'Relais X4 hoch aus
Relaisx4runter = 0 'Relais X4 runter aus
Zeitx1hoch = 10 'wielange soll X1 hoch an bleiben
Zeitx1runter = 10 'wielange soll X1 runter an bleiben
Zeitx2hoch = 10 'wielange soll X2 hoch an bleiben
Zeitx2runter = 10 'wielange soll X2 runter an bleiben
Zeitx3hoch = 10 'wielange soll X3 hoch an bleiben
Zeitx3runter = 10 'wielange soll X3 runter an bleiben
Zeitx4hoch = 10 'wielange soll X4 hoch an bleiben
Zeitx4runter = 10 'wielange soll X4 runter an bleiben
X1hoch = 2
X2hoch = 2
X3hoch = 2
X4hoch = 2
X11hoch = 1
X21hoch = 1
X31hoch = 1
X41hoch = 1
X13hoch = 0
X23hoch = 0
X33hoch = 0
X43hoch = 0
X1runter = 2
X2runter = 2
X3runter = 2
X4runter = 2
X11runter = 1
X21runter = 1
X31runter = 1
X41runter = 1
X13runter = 0
X23runter = 0
X33runter = 0
X43runter = 0
Alleshoch = 0
Allesrunter = 0
X1ganzhoch = 0
X1ganzrunter = 0
X2ganzhoch = 0
X2ganzrunter = 0
X3ganzhoch = 0
X3ganzrunter = 0
X4ganzhoch = 0
X4ganzrunter = 0
'-------------------------------------------------------------------------------
' S T A R T H A U P T P R O G R A M M
'-------------------------------------------------------------------------------
Start:
Do
'-------------------------------
' I N P U T B I N T E S T
'-------------------------------
Toggle Led1 ' Testweise
Inputbin #1 , A
If A = 10 Then Goto XYZ
If Relaisx1hoch = 0 And Relaisx2hoch = 0 And Relaisx3hoch = 0 And Relaisx4hoch = 0 Then
Alleshoch = 0
X13hoch = 0
X23hoch = 0
X33hoch = 0
X43hoch = 0
End If
If Relaisx1runter = 0 And Relaisx2runter = 0 And Relaisx3runter = 0 And Relaisx4runter = 0 Then
Allesrunter = 0
X13runter = 0
X23runter = 0
X33runter = 0
X43runter = 0
End If
Debounce Tasterx1hoch , 0 , X1hoch , Sub 'Tasterabfrage
Debounce Tasterx1runter , 0 , X1runter , Sub
Debounce Tasterx2hoch , 0 , X2hoch , Sub
Debounce Tasterx2runter , 0 , X2runter , Sub
Debounce Tasterx3hoch , 0 , X3hoch , Sub
Debounce Tasterx3runter , 0 , X3runter , Sub
Debounce Tasterx4hoch , 0 , X4hoch , Sub
Debounce Tasterx4runter , 0 , X4runter , Sub
Debounce Tasteralleshoch , 0 , Alleshoch , Sub
Debounce Tasterallesrunter , 0 , Allesrunter , Sub
If X1hoch = X11hoch Then 'Relais aus, wenn Zeit um
Relaisx1hoch = 0
X11hoch = 1
X1ganzhoch = 1
End If
If X2hoch = X21hoch Then 'Relais aus, wenn Zeit um
Relaisx2hoch = 0
X21hoch = 1
X2ganzhoch = 1
End If
If X3hoch = X31hoch Then 'Relais aus, wenn Zeit um
Relaisx3hoch = 0
X31hoch = 1
X3ganzhoch = 1
End If
If X4hoch = X41hoch Then 'Relais aus, wenn Zeit um
Relaisx4hoch = 0
X41hoch = 1
X4ganzhoch = 1
End If
If X1runter = X11runter Then 'Relais aus, wenn Zeit um
Relaisx1runter = 0
X11runter = 1
X1ganzrunter = 1
End If
If X2runter = X21runter Then 'Relais aus, wenn Zeit um
Relaisx2runter = 0
X21runter = 1
X2ganzrunter = 1
End If
If X3runter = X31runter Then 'Relais aus, wenn Zeit um
Relaisx3runter = 0
X31runter = 1
X3ganzrunter = 1
End If
If X4runter = X41runter Then 'Relais aus, wenn Zeit um
Relaisx4runter = 0
X41runter = 1
X4ganzrunter = 1
End If
Loop
'-------------------------------------------------------------------------------
' K L E M M E X 1
'-------------------------------------------------------------------------------
X1hoch:
If Alleshoch = 1 And X13hoch = 1 Then Goto Weiterx1hoch
If Relaisx1hoch = 1 And Alleshoch = 1 Then Goto X2hoch 'Relais bleibt an, wenn alles hoch gedrückt wird
Weiterx1hoch:
If Relaisx1runter = 1 Then 'Relais aus, wenn gegenüberliegende gedrückt wird
Relaisx1runter = 0
X13runter = 1
X11runter = 1
Goto Start
End If
If Relaisx1hoch = 1 Then 'Relais aus, wenn wiederholt gedrückt wird
Relaisx1hoch = 0
X11hoch = 1
Goto Start
End If
If X1ganzhoch = 1 And Alleshoch = 1 Then Goto X2hoch
If X1ganzhoch = 1 Then Goto X1runter
Relaisx1hoch = 1 'Relais X1 Hoch zieht an
X1ganzrunter = 0
X11hoch = X1hoch + Zeitx1hoch 'Laufzeitermittlung
If X11hoch > 65000 Then 'Überlaufsperre
X1hoch = 1 'Überlaufsperre
X11hoch = Zeitx1hoch 'Überlaufsperre
End If
If X13hoch = 1 Then Goto Start
If Alleshoch = 1 Then
Waitms 200
Goto X2hoch
End If
Goto Start
X1runter:
If Allesrunter = 1 And X13runter = 1 Then Goto Weiterx1runter
If Relaisx1runter = 1 And Allesrunter = 1 Then Goto X2runter 'Relais bleibt an, wenn alles hoch gedrückt wird
Weiterx1runter:
If Relaisx1hoch = 1 Then 'Relais aus, wenn gegenüberliegende gedrückt wird
Relaisx1hoch = 0
X13hoch = 1
X11hoch = 1
Goto Start
End If
If Relaisx1runter = 1 Then 'Relais aus, wenn wiederholt gedrückt wird
Relaisx1runter = 0
X11runter = 1
Goto Start
End If
If X1ganzrunter = 1 And Allesrunter = 1 Then Goto X2runter
If X1ganzrunter = 1 Then Goto X1hoch
Relaisx1runter = 1 'Relais X1 Runter zieht an
X1ganzhoch = 0
X11runter = X1runter + Zeitx1runter 'Laufzeitermittlung
If X11runter > 65000 Then 'Überlaufsperre
X1runter = 1 'Überlaufsperre
X11runter = Zeitx1runter 'Überlaufsperre
End If
If X13runter = 1 Then Goto Start
If Allesrunter = 1 Then
Waitms 200
Goto X2runter
End If
Goto Start
Sekundentakt:
Timer1 = Timer
Incr X1hoch
Incr X2hoch
Incr X3hoch
Incr X4hoch
Incr X1runter
Incr X2runter
Incr X3runter
Incr X4runter
If X1hoch = 65000 Then X1hoch = 1
If X2hoch = 65000 Then X2hoch = 1
If X3hoch = 65000 Then X3hoch = 1
If X4hoch = 65000 Then X4hoch = 1
If X1runter = 65000 Then X1runter = 1
If X2runter = 65000 Then X2runter = 1
If X3runter = 65000 Then X3runter = 1
If X4runter = 65000 Then X4runter = 1
Return
Den Programmcode der Senderplatine habe ich noch nicht fertig.
Hier mal der Anfang zum testen:
Code:
$regfile = "m16def.dat"
$crystal = 8000000
Dim A As Byte
A = 1
Config Pind.6 = Output
Config Pind.5 = Input
Open "COMA.7:2400,8,N,1,inverted" For Output As #1 ' PA.7 ist Sender
Open "COMC.6:2400,8,N,1,inverted" For Output As #2 ' PC.6 ist Sender
Start:
Do
If Pind.5 = 0 Then Goto Senden
Loop
Senden:
Set Portd.6
Waitms 500
Reset Portd.6
A = 10
Printbin #1 , A
Goto Start
Wenn ich also auf der Senderplatine den Pind.5 setze, dann sendet er mir die Variable A mit 10 an die Empfängerplatine.
Und wenn die 10 empfangen worden ist, dann soll sie nach XYZ springen.
Das klappt auch alles schp
öm, nur wie beschrieben, der bleibt immer bei Inputbin hängen und ignoriert den Rest.
Lesezeichen