Start
Experimente
Grundlagen
Produkte
- ES-M32
-- Erster Test
-- USB
-- Bascom
-- RAM
-- ADC
-- Ports
-- Relais -- Morsen -- Datenlogger -- SIOS -- ASCII -- mV-Logger -- I/O12/24 V -- Bootloader
Neues
Impressum
|
ES-M32
RAM, Print und LCD
Starten Sie den Test 1 des Beispielprogramms. Der Mega32
besitzt 2048 Byte RAM und 1024 Byte internes EEPROM. Bascom verwendet das RAM
für Variablen und diverse reservierte Speicherbereiches. Aber man kann große
Bereiche zur Datenspeicherung verwenden. Der Test 1 legt einen Bereich von 200
Bytes als Datenspeicher A(1) bis A(200)
fest. Achtung, A(0) gibt es nicht. In einer For-Next-Schleife werden
aufsteigende Zahlenwerte abgelegt. Die Zählvariable N ist als Word
dimensioniert. Eigentlich reicht ja ein Byte, weil nicht über 255 gezählt wird.
Aber man kann das Programm ja ändern und größere Datenmengen ablegen.
|
Sub Test1 Dim A(200) As Byte Dim N As Word For N = 1 To 200 A(n) = Low(n) Next N For N = 1 To 200 Print A(n) Cls Lcd A(n) Waitms 500 Next N Do Loop End Sub
In einer zweiten Schleife werden die Daten dann gelesen und
auf zwei Wegen ausgegeben. PRINT sendet die Zahlen mit 9600 Baud im
ASCII-Format über die serielle Schnittstelle. An das Ende
jeder Zeile setzt Bascom das CR-Zeichen (Carriage Return = Wagenrücklauf bei der Schreibmaschine, Zeilenende) und das LF-Zeichen (Line
Feed , Zeilenvorschub, Neue Zeile).
Im Terminal kann man die Textdarstellung und gleichzeitig die gesendeten
ASCII-Zeichen sehen. 50 48 48 13 10 bedeutet 2 0 0 CR LF, also „200“, neue
Zeile.
|
Zugleich werden die Zahlenwerte auch am LCD dargestellt. Cls
löscht jeweils zunächst das ganze Dispay. Der Cursor steht dann in der ersten Zeile
ganz links. Lcd A(n) arbeitet dann genau wie der Print-Befehl, aber mit Ausgabe
auf dem Display.
Wenn man sich die Speichernutzung genau ansehen möchte lohnt
sich ein Blick in die Datei ESM32TEST1.RPT. Insgesamt sind noch 1753 Bytes im
RAM unbenutzt. Man kann also wesentlich mehr als 200 Bytes im RAM ablegen. Später
kann es sich z.B. um Messdaten vom AD-Wandler handeln.
|
Stack start : 85F hex Stack size : 10 hex S-Stacksize : 20 hex S-Stackstart : 850 hex Framesize : 20 hex Framestart : 82F hex Space left : 1753 dec
Ändern Sie das Programm einmal so ab, dass 1000 oder
mehr Datenbytes
gespeichert werden. Da
nur einzelne Bytes verwendet werden, ist die maximale
Zahlengröße 255, danach geht es wieder weiter mit 0, 1, 2
usw. (Hexadezimalsystem).
Mit A(n)
= Low(n) wird das Lowbyte von N gespeichert. Für n = 300
enthält das Lowbyte 44, denn. 300 = 012C hex, also Highbyte
= 1 und Lowbyte = 2C hex = 44. Man kann in diesem Fall die Low-Funktion
auch weglassen "A(n) = n", weil beim Kopieren eines Word in ein
Byte automatisch nur das Lowbyte kopiert wird.
|
Sub Test1 Dim A(1000) As Byte Dim N As Word For N = 1 To 1000 A(n) = Low(n) Next N For N = 1 To 1000 Print A(n) Cls Lcd A(n) Waitms 500 Next N Do Loop End Sub
Sie könnten aber auch Word-Daten speichern. Aber Achtung, Dim A(1000) As Word würde bereits
2000 Bytes benötigen, das wäre zu viel. Es ist also sinnvoll, immer den
kleinsten möglichen Datentyp einzusetzen. Testen Sie das Programm mit 500
gespeicherten Words.
|
Sub Test1 Dim A(500) As Word Dim N As Word For N = 1 To 500 A(n) = N Next N For N = 1 To 500 Print A(n) Cls Lcd A(n) Waitms 500 Next N Do Loop End Sub
|