Matthiasbaue
26.10.2006, 17:13
Hallo,
ich habe folgendes Problem, ich habe eine Programm für zwei Led Lauflichter geschrieben aber leider bekomme ich nach kurzer Zeit einen Stacküberlauf.
Ich finde keine Lösung um das zu verhindern, kann mir gemand helfen??
Hier ist das Programm, ich habe es für einen AT89S8252 geschrieben und verwende es auf einen AT89S8253.
$large
Dim A As Byte
Dim C As Byte
Dim D As Byte
Dim L1 As Byte
Dim R1 As Byte
Dim R2 As Byte
Dim L2 As Byte
Dim Merker1 As Byte
Dim Merker2 As Byte
P0 = &HFF
P1 = &HFF
P2 = &HFF
P3 = &HFF ' Enstellung Links Laufband 2 =1
A = 1
D = 1
Merker1 = 0
Merker2 = 0
Main:
Do
Zulauflicht1:
If P0.0 = 0 And Merker1 = 0 Then
Set L1
Print L1
Gosub Zu_lauflicht1
Else
If L1 = 1 Then
Gosub Zu_lauflicht1
Else
Auflauflicht1:
If P0.0 = 0 And Merker1 = 1 Then
Set R1
Print R1
Gosub Auf_lauflicht1
Else
If R1 = 1 Then
Gosub Auf_lauflicht1
Else
If L2 = 1 Then
Gosub Zu_lauflicht2
End If
End If
End If
End If
End If
Zulauflicht2:
If P0.3 = 0 And Merker2 = 0 Then
Set L2
Print L2
Gosub Zu_lauflicht2
Else
If L2 = 1 Then
Gosub Zu_lauflicht2
Else
Auflauflicht2:
If P0.3 = 0 And Merker2 = 1 Then
Set R2
Print R2
Gosub Auf_lauflicht2
Else
If R2 = 1 Then
Gosub Auf_lauflicht2
Else
If L1 = 1 Then
Gosub Zu_lauflicht1
End If
End If
End If
End If
End If
Loop
Zu_lauflicht1:
If L1 = 0 Then
Goto Main
Else
If A = 1 Then
P0.6 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 2 Then
P0.7 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 3 Then
P1.0 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 4 Then
P1.1 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 5 Then
P1.2 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 6 Then
P1.3 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 7 Then
P1.4 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 8 Then
P1.5 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 9 Then
P1.6 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 10 Then
P1.7 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 11 Then
P2.0 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 12 Then
P2.1. = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 13 Then
P2.2 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
L1 = 0
Merker1 = 1
Goto Main
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
Return
End
Zu_lauflicht2:
If L2 = 0 Then
Goto Main
Else
If D = 1 Then
P2.3 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 2 Then
P2.4 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 3 Then
P2.5 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 4 Then
P2.6 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 5 Then
P2.7 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 6 Then
P3.0 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 7 Then
P3.1 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 8 Then
P3.2 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 9 Then
P3.3 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 10 Then
P3.4 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 11 Then
P3.5 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 12 Then
P3.6 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 13 Then
P3.7 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
L2 = 0
Merker2 = 1
Goto Main
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
Return
End
Auf_lauflicht1:
If R1 = 0 Then
Goto Main
Else
If A = 14 Then
P2.2 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 13 Then
P2.1 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 12 Then
P2.0 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 11 Then
P1.7 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 10 Then
P1.6 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 9 Then
P1.5 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 8 Then
P1.4 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 7 Then
P1.3 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 6 Then
P1.2 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 5 Then
P1.1 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 4 Then
P1.0 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 3 Then
P0.7 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 2 Then
P0.6 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
R1 = 0
Merker1 = 0
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
Return
End
Auf_lauflicht2:
If R2 = 0 Then
Goto Main
Else
If D = 14 Then
P3.7 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 13 Then
P3.6 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 12 Then
P3.5 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 11 Then
P3.4 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 10 Then
P3.3 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 9 Then
P3.2 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 8 Then
P3.1 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 7 Then
P3.0 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 6 Then
P2.7 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 5 Then
P2.6 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 4 Then
P2.5 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 3 Then
P2.4 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 2 Then
P2.3 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
R2 = 0
Merker2 = 0
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
Return
End
EDIT: das heisst "CODE" und nicht "QUOTE" :-) Picnick
MFG Matthias
ich habe folgendes Problem, ich habe eine Programm für zwei Led Lauflichter geschrieben aber leider bekomme ich nach kurzer Zeit einen Stacküberlauf.
Ich finde keine Lösung um das zu verhindern, kann mir gemand helfen??
Hier ist das Programm, ich habe es für einen AT89S8252 geschrieben und verwende es auf einen AT89S8253.
$large
Dim A As Byte
Dim C As Byte
Dim D As Byte
Dim L1 As Byte
Dim R1 As Byte
Dim R2 As Byte
Dim L2 As Byte
Dim Merker1 As Byte
Dim Merker2 As Byte
P0 = &HFF
P1 = &HFF
P2 = &HFF
P3 = &HFF ' Enstellung Links Laufband 2 =1
A = 1
D = 1
Merker1 = 0
Merker2 = 0
Main:
Do
Zulauflicht1:
If P0.0 = 0 And Merker1 = 0 Then
Set L1
Print L1
Gosub Zu_lauflicht1
Else
If L1 = 1 Then
Gosub Zu_lauflicht1
Else
Auflauflicht1:
If P0.0 = 0 And Merker1 = 1 Then
Set R1
Print R1
Gosub Auf_lauflicht1
Else
If R1 = 1 Then
Gosub Auf_lauflicht1
Else
If L2 = 1 Then
Gosub Zu_lauflicht2
End If
End If
End If
End If
End If
Zulauflicht2:
If P0.3 = 0 And Merker2 = 0 Then
Set L2
Print L2
Gosub Zu_lauflicht2
Else
If L2 = 1 Then
Gosub Zu_lauflicht2
Else
Auflauflicht2:
If P0.3 = 0 And Merker2 = 1 Then
Set R2
Print R2
Gosub Auf_lauflicht2
Else
If R2 = 1 Then
Gosub Auf_lauflicht2
Else
If L1 = 1 Then
Gosub Zu_lauflicht1
End If
End If
End If
End If
End If
Loop
Zu_lauflicht1:
If L1 = 0 Then
Goto Main
Else
If A = 1 Then
P0.6 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 2 Then
P0.7 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 3 Then
P1.0 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 4 Then
P1.1 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 5 Then
P1.2 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 6 Then
P1.3 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 7 Then
P1.4 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 8 Then
P1.5 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 9 Then
P1.6 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 10 Then
P1.7 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 11 Then
P2.0 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 12 Then
P2.1. = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
If A = 13 Then
P2.2 = 0
Waitms 0.2
A = A + 1
Goto Zulauflicht2
Else
L1 = 0
Merker1 = 1
Goto Main
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
Return
End
Zu_lauflicht2:
If L2 = 0 Then
Goto Main
Else
If D = 1 Then
P2.3 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 2 Then
P2.4 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 3 Then
P2.5 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 4 Then
P2.6 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 5 Then
P2.7 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 6 Then
P3.0 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 7 Then
P3.1 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 8 Then
P3.2 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 9 Then
P3.3 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 10 Then
P3.4 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 11 Then
P3.5 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 12 Then
P3.6 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
If D = 13 Then
P3.7 = 0
Waitms 0.2
D = D + 1
Goto Zulauflicht1
Else
L2 = 0
Merker2 = 1
Goto Main
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
Return
End
Auf_lauflicht1:
If R1 = 0 Then
Goto Main
Else
If A = 14 Then
P2.2 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 13 Then
P2.1 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 12 Then
P2.0 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 11 Then
P1.7 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 10 Then
P1.6 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 9 Then
P1.5 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 8 Then
P1.4 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 7 Then
P1.3 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 6 Then
P1.2 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 5 Then
P1.1 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 4 Then
P1.0 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 3 Then
P0.7 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
If A = 2 Then
P0.6 = 1
Waitms 0.2
A = A - 1
Goto Zulauflicht2
Else
R1 = 0
Merker1 = 0
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
Return
End
Auf_lauflicht2:
If R2 = 0 Then
Goto Main
Else
If D = 14 Then
P3.7 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 13 Then
P3.6 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 12 Then
P3.5 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 11 Then
P3.4 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 10 Then
P3.3 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 9 Then
P3.2 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 8 Then
P3.1 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 7 Then
P3.0 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 6 Then
P2.7 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 5 Then
P2.6 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 4 Then
P2.5 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 3 Then
P2.4 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
If D = 2 Then
P2.3 = 1
Waitms 0.2
D = D - 1
Goto Zulauflicht1
Else
R2 = 0
Merker2 = 0
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
Return
End
EDIT: das heisst "CODE" und nicht "QUOTE" :-) Picnick
MFG Matthias