Texte ( Strings ) mit
dem Atmega8
Der Atmega ist in der Lage komplexe und lange Texte zu verarbeiten.
Solch einen Text nennt man String.
Ein kompletter Text kann einer Variablen ( String ) zugewiesen werden.
Dazu ist es allerdings nötig , diese Variable erst einmal zu Dimensionieren.
Ein Text ( String ) darf maximal 255 Zeichen lang sein pro Variable.
Bei der Dimensionierung des Strings ist darauf zu achten das dieser groß genug Dimensioniert wird.
Jetzt könnte man daher gehen und sagen :
Ok, dimensioniere ich Strings immer pauschal mit 255 Bytes Länge ...
Neeeee , .... das wäre keine Gute Idee , denn das würde ja viiiiel Speicher kosten.
Dazu müsse man den "Kopf" auch passend konfigurieren.
Es ist schon sinnig , die Variable so groß aufzumachen wie man an Zeichen nutzen möchte.
Gut, man muß es vielleicht nicht unbedingt auf ein Buchstaben genau machen wenn man möchte.
Nehmen wir also einmal den obligatorischen Satz : "Hallo Welt"
Diesen möchten wir in eine Variable packen mit Namen : Info
Beispiel :
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 32
$framesize = 32
Dim Info as String * 10
Zum Einen dimensioniert man die Variabel als String und zum Anderen übergibt man ihr gleich die
benötigte Länge an Zeichen mit * 10 , denn der Satz : "Hallo Welt" hat 10 Buchstaben ( ohne "" ).
Möchte man jetzt einen Satz aus 2 anderen Sätzen zusammen fügen ist dies auch kein Problem.
Nehme wir mal den einen Satz : "Hallo Welt " und einen zweiten Satz : "Nett Dich hier zu treffen"
Den einen Satz nennen wir Info1 , den anderen nennen wir Info2 und beide sollen in einen dritten String
mit dem Namen Gesamtinfo .
Beispiel :
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 32
$framesize = 32
Dim Info1 as String * 10
Dim Info2 as String * 25
Dim Gesamtinfo as String * 35
Info1 = "Hallo Welt"
Info2 = "Nett Dich hier zu treffen"
Gesamtinfo = Info1 + Info2
Das Zusammenführen von 2 Strings erfolgt ganz simpel mit einem Pluszeichen.
Das Arbeiten mit den Strings ist insbesondere sehr praktisch wenn man mit einem LCD-Display arbeitet.
Für die Anzeige auf dem Display nutzt man eine Subroutine und die Texte selber werden im eigentlichen
Programm je nach Situation passend "gefüllt".
Beispiel:
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 32
$framesize = 32
Config Lcdpin = pin , D4 = Portd.4 , D5 = Portd.5 , D6 = Portd.6 , D7 = Portd.7 , E = Portd.3 , Rs = Portd.2
Config Lcd = 16x2
cls
Dim Text1 as String * 16
Dim Text2 as String * 16
Do
Text1 = "Hallo Welt "
Text2 = "hier bin ich "
gosub Anzeige
waitms 2000
Text1 = "Wer das liest..."
Text2 = "macht es richtig"
gosub Anzeige
waitms 2000
Text1 = "viel Spass "
Text2 = "beim Probieren "
gosub Anzeige
waitms 2000
loop
end
Anzeige:
Locate 1,1
Lcd Text1
Locate 2,1
Lcd Text2
return
Zuerst haben wir uns das LCD Display wie bekannt konfiguriert.
Danach 2 Strings dimensioniert mit der jeweiligen Zeichenlänge von 16 Bytes.
Da ja ein Display 16x2 eh nicht mehr als 16 Zeichen anzeigen kann ,
muß der String auch nicht größer dimensioniert werden.
Danach folgt eine Endlosschleife mit DO LOOP.
Innerhalb dieser DO LOOP Schleife setzen wir in die beiden String-Variablen abwechseln verschiedene Texte.
Nach jedem Setzen eines neuen Textes rufen wir den Befehl : GOSUB auf.
GOSUB = Goto to Subroutine ( gehe zu der Unterprozedur xxxxx und kehre anschließend hierher wieder zurück )
Dieser Befehl Gosub springt also in die Subroutine Anzeige.
Dort werden dann in die beiden Zeilen die aktuellen Texte plaziert und es wird wieder in die DO LOOP zurück gekehrt.
Eine Subroutine , welche mit Gosub aufgerufen wird MUSS am Ende imer mit dem Befehl : RETURN abgeschlossen werden !
Das Ganze kann man auch an den PC senden anstelle auf einem Display anzeigen zu lassen .
Beispiel :
$regfile = "m8def.dat"
$crystal = 8000000
$hwstack = 32
$swstack = 32
$framesize = 32
$baud = 9600
Dim Text1 as String * 16
Dim Text2 as String * 16
Do
Text1 = "Hallo Welt "
Text2 = "hier bin ich "
gosub Anzeige
waitms 2000
Text1 = "Wer das liest..."
Text2 = "macht es richtig"
gosub Anzeige
waitms 2000
Text1 = "viel Spass "
Text2 = "beim Probieren "
gosub Anzeige
waitms 2000
loop
end
Anzeige:
Print Text1
Print Text2
return