PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Basic: If - Then - Else Verschachtelungen



PCMan
30.09.2006, 18:11
Hallo,
da ich mich mit der Programmiersprache Basic bisher noch nie "herumgeschlagen" habe (meistens habe ich mit Pascal oder C gearbeitet) kommen mir beim Zusammenbasteln meines ersten Programms ein paar kleine Fragen.
In C ist es selbstverständlich (in Basic sicher auch) If-Bedingungen zu verschachteln à la


if (a>b) {
if (x!=y) {...}
} else {
...
}


Wie bekomme ich analoges mit Basic hin? Ich werde aus der spärlichen Hilfe zu Bascom und der aus dem Internet nicht sehr schlau.
Mein erster Entwurf war


If Secs = 0 Then
Secs = 59
Decr Mins
If Mins = 0 Then
Mins = 59
Decr Hours
If Hours = 0 Then
Hours = 23
Dchge = 1
Else Decr Hours
Else Decr Mins
End If


Der Compiler sagt Unknown Statement ["Else Decr" ...]
Deswegen komme ich im Moment nicht weiter. Welchen Fehler mache ich?

Vielen Dank,
Simon
P.S.: Ich habe auch schon umgestellt, alles hinter's betroffene IF zu schieben und überall eine End If Anweisung zwischenzuschieben etc. hänge aber fest.

PicNick
30.09.2006, 18:23
Der Schlingel will das "ELSE" in einer eigene Zeile haben, wenn ich mich nicht täusche.

magnetix48
30.09.2006, 18:26
Hallo Simon,

mach aus
Else Decr Hours
Else Decr Mins
End if

Else
Decr Hours
End if
Else
Decr Mins
End if

dann klapt's.
1. Else muss alleine in einer Zeile stehen
2. Die innere If-Schleife braucht ein eigenes End if

Gruß
Detlef

PCMan
30.09.2006, 18:37
Aaaah, wieder was gelernt.
Vielen Dank, steht leider nirgends, dass das in eine eigene Zeile will.
Noch etwas: ich habe mir mal die Beispiele angesehen wie man einen sekundengenauen Timer einrichtet. Auf einem LCD lasse ich die Sekunden herunterzählen. Mir fällt aber auf, das während der Simulation eine Sekunde circa 3 Sekunden dauert. Liegt das an der falschen Programmierung (habe die Konfiguration des Timers einfach aus dem WiKi übernommen) oder daran, dass der Simulator zu langsam ist?
Grüße Simon

magnetix48
30.09.2006, 18:39
Hallo Simon,

kann es sein, dass du die Quarzfrequenz nicht oder falsch angegeben hast?

Gruß
Detlef

PCMan
30.09.2006, 18:47
Eigentlich nicht, weil ich habe das Beispiel ja direkt übernommen:


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

Config Lcd = 16 * 2
Config Lcdpin = Pin , Db4 = Portd.0 , Db5 = Portd.1 , Db6 = Portd.2 , Db7 = Portd.3 , E = Portd.5 , Rs = Portd.4
Config Lcdbus = 4
Config Timer1 = Timer , Prescale = 256 'Konfiguriere Timer1
Enable Timer1 'schalte den Timer1 ein
On Timer1 Isr_von_timer1 'verzweige bei Timer1 überlauf zu Isr_von_Timer1
Enable Interrupts
Timer1 = 34285 'Timer1 soll schon von 34285 wegzählen
Simon

magnetix48
30.09.2006, 18:55
Hallo Simon,

ich bin auch noch nicht richtig fit in Bascom. Was ich sehe ist, dass eine Quarzfrequenz von 8 MHz angegeben ist. Falls du einen anderen Quarz verwendest, musst du die Zeile

$crystal = 8000000

entsprechend ändern.

Falls das nichts hilft, solltest du deine Frage unter einem neuen Themennamen noch einmal stellen.

Gruß
Detlef

PCMan
30.09.2006, 19:18
Hm.
Ich verwende im Prinzip ja keinen Quarz sondern benutze gerade den Simulator der bei Bascom dabei ist.
Meinst du nicht, dass der einfach saulahm sein könnte? Immerhin braucht er 99% CPU-Leistung an diesem Rechner.

veit
30.09.2006, 20:12
ich benutze bei bascom den simulator zwar nich aber in der uni aufm hc6811 simulator isses genau das gleiche, 99% cpu und richtig langsam

Matula
30.09.2006, 21:53
@veit,

füge deinem Listing doch mal die Compiler-Direktive $sim hinzu, dann sollte es mit der Simulation klappen.

cu
Matula