Bascom Programm

Gast #3022025
Lesenswert?

Ich habe eine Frage. Was ist an diesem Programm falsch ?

$regfile = "m8def.dat"
$crystal = 1000000

Ddrd = &B11111111
Portc = &B00011111

Do

If Pinc.0 = 0 Then

Portd = 1
Waitms 100
Portd = 3
Waitms 100
Portd = 7
Waitms 100
Portd = 15
Waitms 100
Portd = 31
Waitms 100
Portd = 63
Waitms 100
Portd = 127
Waitms 100
Portd = 255
Waitms 100
Portd = 254
Waitms 100
Portd = 252
Waitms 100
Portd = 248
Waitms 100
Portd = 240
Waitms 100
Portd = 224
Waitms 100
Portd = 192
Waitms 100
Portd = 128
Waitms 100
Portd = 0
Waitms 100
Portd = 128
Waitms 100
Portd = 192
Waitms 100
Portd = 224
Waitms 100
Portd = 240
Waitms 100
Portd = 248
Waitms 100
Portd = 252
Waitms 100
Portd = 254
Waitms 100
Portd = 255
Waitms 100
Portd = 127
Waitms 100
Portd = 63
Waitms 100
Portd = 31
Waitms 100
Portd = 15
Waitms 100
Portd = 7
Waitms 100
Portd = 3
Waitms 100
Portd = 1
Waitms 100
Portd = 0
Waitms 100

Else
If Pinc.1 = 0 Then

Portd = 129
Waitms 150
Portd = 195
Waitms 150
Portd = 231
Waitms 150
Portd = 255
Waitms 150
Portd = 126
Waitms 150
Portd = 60
Waitms 150
Portd = 24
Waitms 150
Portd = 0
Waitms 150

Else
If Pinc.2 = 0 Then

Portd = 1
Waitms 100
Portd = 3
Waitms 100
Portd = 7
Waitms 100
Portd = 15
Waitms 100
Portd = 31
Waitms 100
Portd = 63
Waitms 100
Portd = 127
Waitms 100
Portd = 255
Waitms 100
Portd = 254
Waitms 100
Portd = 252
Waitms 100
Portd = 248
Waitms 100
Portd = 240
Waitms 100
Portd = 224
Waitms 100
Portd = 192
Waitms 100
Portd = 128
Waitms 100
Portd = 0
Waitms 100

Else
If Pinc.3 = 0 Then

Portd = 129
Waitms 100
Portd = 66
Waitms 100
Portd = 36
Waitms 100
Portd = 24
Waitms 100
Portd = 36
Waitms 100
Portd = 66
Waitms 100

Else

Portd = 255
Wait 1
Portd = 0
Wait 1


End If

Loop




Entschuldigung, wenn ich im falschen Forum dafür bin
.

Danke im Vorraus !
Gast #3022045
Lesenswert?

Ja, damit stimmt was nicht. Sie nützen nichts bzw können nicht 
funktionieren weil du alle niederwertigen Bits von Port C als Ausgänge 
definierst und in deinen If then Abfragen als Eingänge behandelst.

Das passt nicht.
#3022142
Lesenswert?

Hoi

Du musst nach jedem "If" Befehl auch wieder "End If" schreiben und nicht 
einmal erst am Ende.
Mit "If" sagst du dem mC das er jetzt etwas prüfen/vergleichen/rechnen 
soll, damit der mC auch weiss wann diese Anwendung fertig ist, muss ein 
"End If" nach dem letzten Befehl hinein.

Dein Aufbau des Code würde ich auch einmal etwas Ordnen.

Gruss Philippe
Gast #3022163
Lesenswert?

Du musst das ELSEIF in einem Wort schreiben siehe BASCOM-Hilfe:

IF expression THEN
[ ELSEIF expression THEN ]
[ ELSE ]
END IF

Ports sind defaultmäßig Eingang aber man sieht hier, dass es besser wäre 
explizit zu schreiben:
PortC=Input  oder DDRC=&b00000000

Du solltest außerdem immer Stackangaben im Programm schreiben
Gast #3022181
Lesenswert?

$regfile = "m8def.dat"
$crystal = 1000000

Ddrd = &B11111111
Portc = &B00011111

Do

If Pinc.0 = 0 Then

Portd = 1
Waitms 100
Portd = 3
Waitms 100
Portd = 7
Waitms 100
Portd = 15
Waitms 100
Portd = 31
Waitms 100
Portd = 63
Waitms 100
Portd = 127
Waitms 100
Portd = 255
Waitms 100
Portd = 254
Waitms 100
Portd = 252
Waitms 100
Portd = 248
Waitms 100
Portd = 240
Waitms 100
Portd = 224
Waitms 100
Portd = 192
Waitms 100
Portd = 128
Waitms 100
Portd = 0
Waitms 100
Portd = 128
Waitms 100
Portd = 192
Waitms 100
Portd = 224
Waitms 100
Portd = 240
Waitms 100
Portd = 248
Waitms 100
Portd = 252
Waitms 100
Portd = 254
Waitms 100
Portd = 255
Waitms 100
Portd = 127
Waitms 100
Portd = 63
Waitms 100
Portd = 31
Waitms 100
Portd = 15
Waitms 100
Portd = 7
Waitms 100
Portd = 3
Waitms 100
Portd = 1
Waitms 100
Portd = 0
Waitms 100

Else
If Pinc.1 = 0 Then

Portd = 129
Waitms 150
Portd = 195
Waitms 150
Portd = 231
Waitms 150
Portd = 255
Waitms 150
Portd = 126
Waitms 150
Portd = 60
Waitms 150
Portd = 24
Waitms 150
Portd = 0
Waitms 150

Else
If Pinc.2 = 0 Then

Portd = 1
Waitms 100
Portd = 3
Waitms 100
Portd = 7
Waitms 100
Portd = 15
Waitms 100
Portd = 31
Waitms 100
Portd = 63
Waitms 100
Portd = 127
Waitms 100
Portd = 255
Waitms 100
Portd = 254
Waitms 100
Portd = 252
Waitms 100
Portd = 248
Waitms 100
Portd = 240
Waitms 100
Portd = 224
Waitms 100
Portd = 192
Waitms 100
Portd = 128
Waitms 100
Portd = 0
Waitms 100

Else
If Pinc.3 = 0 Then

Portd = 129
Waitms 100
Portd = 66
Waitms 100
Portd = 36
Waitms 100
Portd = 24
Waitms 100
Portd = 36
Waitms 100
Portd = 66
Waitms 100

Else

Portd = 255
Wait 1
Portd = 0
Wait 1


End If
End If
End If
End If


Loop

jetzt meckert bascom nichtmehr
#3022404
Lesenswert?

alex schrieb:
> jetzt meckert bascom nichtmehr

wenn das programm macht was es soll, dann ist ja gut. ich befürchte 
aber, dass hier einfach 3x "End If" eingefügt wurde nur um die 
syntaxprüfung zu bestehen. ob das ganze semantisch auch stimmt steht auf 
einem anderen blatt, und das kann uns (fast) nur thedeather sagen. ich 
jedenfalls habe keine lust mir diese elends langen zusweiseungen mit 
pausen dazwischen genau anzuschauen.
Gast #3022429
Lesenswert?

Auch ein "3-Zeiler" wird bei mir kommentiert ( ' in BASCOM), das ist 
beim Programmieren keine Last, aber es hilft einem selbst, nach einem 
Jahr das eigene Programm zu verstehen.
Bei einem fremden Programm lese ich ohne Kommentare gar nicht bis zur 5. 
Zeile .....
#3022550
Lesenswert?

Bussard schrieb:
> Auch ein "3-Zeiler" wird bei mir kommentiert ( ' in BASCOM),

Bei diesem 'Programm' würde es schon reichen, wenn er einfach nur den 
Code sauber und korrekt einrücken würde. Auch das würde schon einiges an 
Unübersicht aus dem Code rausnehmen. Der nächste Schritt wären dann 
enweder Datenfelder und/oder eine Aufteilung in Einzelfunktionen.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren