Hallo!
In diesem Beitrag geht es wieder um reine Theorie. Aber bitte trotzdem durchlesen, da dieses Thema sehr wichtig ist. Es geht um Variablen.
Was ist eine "Variable"? In der µC-Programmierung ist eine Variable ein Name für einen Speicherbereich. Außerdem ist in Bascom an die Variable auch noch der Datentyp gebunden, der in dem Speicherbereich gespeichert werden kann.
In Bascom gibt es mehrere mögliche Datentypen.
Man muss Bascom mitteilen, welche Variablen mit welchem Datentyp man benutzen möchte. Das passiert mit dem Befehl DIM und sieht z.B. so aus:
DIM my_bit_var as BIT
DIM my_byte_var as BYTE
DIM my_byte_array(3) as BYTE
DIM my_word_var as WORD
DIM my_single_var as SINGLE
DIM my_string_var as STRING * 10
Die Besonderheit des STRING-Datentyps ist die, dass man mit *
die Länge des Textes angeben kann. my_string_var
braucht im Speicher 11 Byte, da noch ein 0-Byte dazu kommt um den Text abzuschließen.
Dann gibt es noch eine Besonderheit. Die Variable my_byte_array
wurde als Array definiert. Damit wurden intern drei Speicherbereiche unter dem gleichen Namen reserviert. Und man kann auf die einzelnen Speicherbereiche über den in Klammern geschriebenen Index zugreifen (my_byte_array(1), my_byte_array(2), my_byte_array(3)
). Das ist von Vorteil, wenn man sich später Schreibarbeit sparen möchte und immer wiederkehrende Aufgaben in einer Schleife abarbeiten möchte. Aber das ist jetzt noch nicht wichtig.
So schreibt man einen Wert in eine Variable:
my_bit_var = 1
my_byte_var = 200
my_byte_array(1) = 10
my_byte_array(2) = 20
my_byte_array(3) = 30
my_word_var = 20000
my_single_var = 10.5
my_string_var = "Hallo Welt"
Man kann einer Variable auch den Wert einer anderen Variable übergeben. Das sieht so aus:
my_word_var = my_byte_var
my_byte_array(3) = my_byte_var
my_byte_array(2) = my_byte_array(1)
Man muss aber aufpassen! Man darf einer Variable keinen Wert übergeben, der nicht in die Variable rein passt. Schreibt man den Wert einer WORD-Variable in eine BYTE-Variable, dann werden nur die unteren 8 Bit übernommen. Die oberen 8 Bit werden einfach abgeschnitten.
Dieser Code funktioniert:
my_word_var = 100
my_byte_var = my_word_var
Die Zahl 100, in einen Code aus Nullen und Einsen (Binärsystem) umgewandelt, sieht so aus:
1100100
Das sind 7 einzelne Bits. Diese 7 Bits haben in einer BYTE-Variable Platz, da der Speicherbereich für ein Byte 8 Bit groß ist.
Dieser Code funktioniert nicht:
my_word_var = 1000
my_byte_var = my_word_var
Die Dezimalzahl 1000, umgewandelt in eine Binärzahl (0/1), sieht so aus:
1111101000
Das sind 10 einzelne Bits. 10 Bits haben nicht mehr in einer BYTE-Variable platz. Es werden die linken 2 Bit abgeschnitten. Im Speicher steht jetzt:
11101000
Wenn man diese Binärzahl in eine Dezimalzahl umwandelt, dann kommt die Dezimalzahl 232
dabei raus. In der Variable steht jetzt der Wert 232 und nicht wie erwartet der Wert 1000.
Das Binärsystem und die Umrechnung von Binär nach Dezimal und umgekehrt erkläre ich hier nicht. Das wird sowiso in vielen Computerbüchern erklärt und Wikipedia hat dazu auch noch etwas zu sagen: http://de.wikipedia.org/wiki/Dualsystem
Umrechnung von Zahlensystemen: http://www.arndt-bruenner.de/mathe/scripts/Zahlensysteme.htm
Der Windows-Taschenrechner kann verschiedene Zahlensysteme umwanden. Man muss ihn dafür nur in die wissenschaftliche Darstellung umschaltet.
Da wir ab jetzt in fast jedem weiteren Beispielprogramm mit Variablen arbeiten werden, macht es früher oder später garantiert "Klick" und du wirst verstehen. ;-)
mfg Gerold :-)
PS: Für die Wissenshungrigen unter uns: http://avrhelp.mcselec.com/index.html?language_fundamentals.htm
Den zugehörigen Original-Beitrag findest du im Loetstelle-Forum.
[^1]: "Bit" im Wikipedia: http://de.wikipedia.org/wiki/Bit
[^2]: "Byte" im Wikipedia: http://de.wikipedia.org/wiki/Byte
[^3]: "Einfache Genauigkeit" im Wikipedia: http://de.wikipedia.org/wiki/Einfache_Genauigkeit
[^4]: "Doppelte Genauigkeit" im Wikipedia: http://de.wikipedia.org/wiki/Doppelte_Genauigkeit
Ich programmiere Progressive Web Applications, Mobile Apps, Desktop-Programme und noch vieles mehr. Falls es dich interessiert, findest du mehr Informationen darüber auf meiner Business-Website.