Archiv verlassen und diese Seite im Standarddesign anzeigen : Rechnung mit Bascom
Hallo,
warum geht folgender Code nicht?
$regfile = "m8def.dat"
$crystal = 1000000
$baud = 1200
Enable Interrupts
Config Adc = Single , Prescaler = Auto
Start Adc
Dim Count As Integer , X As Integer , Y As Single , Z As Integer
Do
X = Getadc(5)
Y = 2700 *(5 / 1024 * X) /(5 -(5 / 1024 * X))
Print Y
Wait 1
Loop
End
Ich bekomme dann folgende Fehlermeldung:
Source variable does not match the target variable[0]
Hoffe ihr könnt mir helfen
Gruß
Spurius
bascom kann leider keine mehrfachrechnungen...
deshalb musst du jeden schritt einzeln rechnen und dann alles am schluss wieder zusammenführen
Martin
Hallo,
danke, habs jetzt in mehrere Schritte aufgeteilt, sehr unelegant :(
Kannst du mir noch sagen wie ich eine Zahl vom Typ Single auf 1 oder 2 Stellen hinter dem Komma runden kann?
Gruß
Spurius
Hallo,
ich habe da mal eine Frage und zwar wurde hier gesagt das Bascom keine mehrfachrechnungen mag. Aber was bedeutet das denn speziell bei diesem code?
If Portb.0 = 0 Then Merker1 = 1 End If
Also bei meckert der immer in dieser Zeile mit dem Fehlercode
"Source variable does not match the target variable[0]"
Wäre nett wenn mir jemand helfen könnte, denn ich bin am verzweifeln
Hallo,
Dein Beispiel hat mit einer Mehrfachrechnung eigentlich nichts zu tun.
Für die IF ... THEN Anweisung gibt es zwei Schreibweisen.
IF Bedingung THEN Anweisung [ELSE andere Anweisung]
oder
IF Bedingung THEN
Anweisung
[ELSE]
andere Anweisung
ENDIF
Du kannst entweder EINE Anweisung direkt hinter dem THEN schreiben allenfalls auch ein ELSE Zweig (aber keine ENDIF)
oder die normale Schreibweise bei der hinter THEN nichts mehr sein darf und die Anweisungen bei zutreffen der Bedingung in den nächsten Zeilen folgen, allenfalls ein alternativer Verzweigungszweig mit ELSE und am Schluss ein ENDIF ebenfalls in einer eigenen Zeile.
Oder kurz gesagt, sofern alles in einer Zeile erledigt werden soll, darf kein ENDIF mehr kommen.
SINGLE auf ein oder zwei Kommastellen Runden:
Für den Ausdruck (PRINT oder LCD) mit der Anweisung FUSING. Schau mal in der Hilfe unter diesem Stichwort nach.
Soll mit einem solchen gerundeten Wert weitergerechnet werden geht das nur wenn man z. B. bei 2 Dezimalstellen so vorgeht:
Dim S1 as Single
S1 = 123.456789
S1 = S1 * 100
S1 = FIX(S1)
S1 = S1 / 100
Hier wird aber bei einem nachfolgenden Ausdruck kein entsprechend exakt gerundeter Wert erscheinen, da sich viele Dezimalzahlen nicht exakt mit dem binären Fließkommaformat darstellen lassen.
Eine nachfolgende PRINT oder LCD Anweisung wird daher den Wert bringen, dem die binär gespeicherte Zahl wirklich entspricht und den gewünschten Wert am ehesten repräsentiert.
Auch hier gibt es in der BASCOM-Hilfe unter
BASCOM language fundamentals / Language Fundamentals beim Absatz:
Decimal and Binary Number Systems
entsprechende Erläuterungen.
Viele Grüße
Josef
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.