PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Schleifenhüpfer



Hummel
28.02.2010, 19:02
Liebe Gemeinde,
ich habe ein "FOR NEXT" Problem.

For X = 1 To 20
Led = Ein
Wait 1
Led = Aus
Waitms 1
Next X
End
Diese Schleife wir nur die halbe Anzahl an Durchläufen, abgearbeitet.
Ist die Endzahl Ungleich also 11,21 ect. bleibt die Led sogar an, wenn das Programm beendet wir. ich verwende einen Atmel 168.
Weis jemand warum? Habe bis jetzt nur C-Controll 2 programmiert und mit Bascom keine Erfahrung.
Gruß Hummel

Jaecko
01.03.2010, 00:21
Zeig mal das ganze Programm. Allein von dem Stück das dasteht funktionierts perfekt.

Hackes
01.03.2010, 00:26
wenn da wirklich hinter LED=aus der Befehl waitMS 1 steht, würd ich sagen, ist die LED "augenscheinlich" immer EIN oder?

for_ro
01.03.2010, 14:08
wenn da wirklich hinter LED=aus der Befehl waitMS 1 steht, würd ich sagen, ist die LED "augenscheinlich" immer EIN oder?
Während die Schleife läuft schon. Danach sollte die LED aber aus sein, egal wieviele Schleifendurchläufe stattfinden.

Hummel
01.03.2010, 20:29
Hallo,
erst mal vielen Dank für Euer Interesse.
WaitMS 1 war natürlich falsch. Hatte ich auch schon geändert, ich da vorher 1000ms. stehen.

Hummel
01.03.2010, 20:31
Der Code:
$regfile = "m168def.dat"
$crystal = 8000000
$baud = 9600
$hwstack = 64
$swstack = 20
$framesize = 60
'----------------------------------
Config Pinc.0 = Output
Config Pind.2 = Input
Led Alias Pinc.0
Eingang1 Alias Pind.2
Dim X As Byte
Const Ein = 1
Const Aus = 0
'---------------------
For X = 1 To 10
Led = Ein
Wait 1
Led = Aus
Wait 1
Next X
For X = 1 To 10
Led = Ein
Waitms 500
Led = Aus
Waitms 500
Next X
End

Jaecko
01.03.2010, 20:38
Ich seh da bei den Pins 2 Fehler:
Bei nem Output isses Config Portx.y, nicht Pinx.y
Und Led Alias PinC.0 müsste PortC.0 sein.

Ansonsten müsste das Programm aber gehen.

for_ro
01.03.2010, 23:18
Led Alias Pinc.0

Hättest du uns den ganzen Code direkt gezeigt, hättest du auch gleich den richtigen Hinweis bekommen.
Wenn du eine 1 in das Pin Register schreibst ist das so, als würdest du den Ausgang toggeln. Schreibst du da eine 0 hinein passiert nichts.
Daher wird bei einer geraden Anzahl von Schleifendurchläufen so getoggelt, dass am Ende die LED aus ist. Bei einer ungeraden Anzahl bleibt sie an.
Wie Jaecko schon geschrieben hat, willst du ja eigentlich das Port Register setzen. Da kannst du tatsächlich eine 1 bzw. eine 0 hineinschreiben.

Hummel
02.03.2010, 18:32
Danke für Eure Hilfe.
Port statt Pin wie Ihr geschrieben habt.
Fragt sich nur warum es im Simulator korrekt läuft und die Schleife bis 10 zählt und im 168'er nur bis 5? Der Compiler mecker nicht.

Gruß Karl

guenter1604
02.03.2010, 19:03
Bitte wieder den ganzen geänderten Code posten :-)

Hummel
02.03.2010, 21:55
War mein erster Versuch ein Programm zu übertragen.

$regfile = "m168def.dat"
$crystal = 8000000

$baud = 9600
$hwstack = 64
$swstack = 20
$framesize = 60

Config Portc.0 = Output Fehlerhaft war "Config Pinc.0"
Config Portd.2 = Input Fehlerhaft war "Config Pind.2"

Led Alias Portc.0 Fehlerhaft war"Led Alias Pinc.0
Eingang1 Alias Portd.2 Fehlerhaft war"Eingang Alias Pind.2

Dim Wartezeit As Integer
Dim X As Byte

Const Ein = 1
Const Aus = 0

For X = 1 To 10

Led = Ein
Waitms 250
Led = Aus
Waitms 250

Next X

For X = 1 To 10

Led = Ein
Waitms 125
Led = Aus
Waitms 125

Next X

End
Gruß Karl[/b]

Jaecko
03.03.2010, 07:47
An dem Code wurde zu viel geändert bzw. die falschen Stellen.

Config Portd.2 = Input
Eingang1 Alias Portd.2

In beiden Fällen wäre Pinx.y richtig.
Input: PIn (I)
Output: POrt (O)