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.

  • BIT [1]: besteht aus nur einem Bit und kann 0 oder 1 enthalten
  • BYTE [2]: besteht aus 8 Bit und kann Ganzzahlen von 0 bis 255 enthalten
  • WORD: besteht aus 16 Bit und kann Ganzzahlen von 0 bis 65535 enthalten
  • INTEGER: besteht aus 16 Bit und kann Ganzzahlen von -32768 bis +32767 enthalten
  • LONG: besteht aus 32 Bit und kann Ganzzahlen von -2147483648 bis 2147483647 enthalten
  • SINGLE [3]: besteht aus 32 Bit und kann Fließkommazahlen von 1,5 x 10^–45 bis 3,4 x 10^38 enthalten
  • DOUBLE [4]: besteht aus 64 Bit und kann Fließkommazahlen von 5,0 x 10^–324 bis 1,7 x 10^308 enthalten
  • STRING: Dieser Datentyp kann Text mit der Länge von bis zu 254 Zeichen enthalten. Dafür wird im Speicher immer ein Zeichen mehr als die Länge des Textes benötigt, da der Text immer mit einem 0-Byte abgeschlossen wird.
[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

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.