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