JAL - Just Another Language ... |
![]() |
![]() |
Letztmalig dran rumgefummelt: 12.07.21 17:32:27 |
![]() |
PIC-Mikrocontroller können in
unterschiedlichen Sprachen programmiert werden. Die vermutlich am häufigsten
angewendete Methode ist das Programmieren in Assembler (ASM).
Assembler-Programme laufen auf dem Mikrocontroller zwar äußerst effizient,
doch das Schreiben ist schwierig und kostet viel Zeit. Schon einfache
Programmfunktionen können aus sehr vielen Befehlen und Anweisungen bestehen.
Zum Einstieg in die Welt der Mikrocontroller ist die Assembler-Sprache
weniger geeignet. Für die Realisierung unserer Projekte haben wir die Sprache JAL („Just Another Language") gewählt. JAL ist eine Hochsprache, die gewisse Ähnlichkeit mit Pascal hat. Eine international aktive Benutzergruppe, der zahlreiche Mitglieder aus aller Welt angehören, unterstützt die Sprache JAL. Just Another Language gehört zu den wenigen etablierten Programmiersprachen, die kostenlos und frei zugänglich sind. JAL ist konfigurierbar, die Sprache kann durch so genannte Bibliotheken (englisch: libraries) erweitert werden. Ferner sind JAL-Programme mit Assembler-Unterprogrammen kombinierbar. Dadurch können zum Beispiel die im Internet kursierenden Assembler-Snippsets (kleine, oft universell verwendbare Programmfragmente („Schnipsel"), die mit anderen Mitgliedern ausgetauscht werden) in JAL-Programme eingebaut werden. JAL ist eine höhere Programmiersprache, die nicht an starre Textformatierungen gebunden ist. Kommandos können beliebig über Programmzeilen verteilt werden, dabei werden Tabulator-Zeichen und Zeilenschaltungen wie Leerzeichen behandelt. Es existieren keine Trennungszeichen zwischen den Kommandos. Auch lange Programme könnten theoretisch als eine einzige Zeile geschrieben werden, in der Praxis würde allerdings die Lesbarkeit stark leiden. JAL gehört zu den wenigen höheren Programmiersprachen, die nichts kosten, und ferner wird JAL von einer großen, weltweit verbreiteten Anwendergemeinde unterstützt. JAL ist durch Einbinden von Bibliotheken und Assembler-Modulen im Prinzip beliebig erweiterbar. Ein JAL-Programm beginnt typischerweise mit dem Aufruf einer Bibliothek, die mindestens die Eigenschaften des zu programmierenden Mikrocontrollers beschreibt: include 16f877 bert Anschließend werden die Variablen definiert: var Byte a |
||||||
![]() |
JAL wurde ursprünglich von Wouter van Ooijen als frei zugängliche höhere Programmiersprache entwickelt, ungefähr vergleichbar mit Pascal. Nach einigen Jahren ging die Entwicklung in ein Open-Source-Projekt über. Den Anstoß zur Entwicklung der zweiten Version gab Stef Mientki im Jahr 2006. Verantwortlicher Programmierer der zweiten Version ist Kyle York, er wird tatkräftig von einer vielköpfigen internationalen Anwendergemeinde unterstützt (in alphabetischer Reihenfolge: Bert van Dam, Sunish Issac, Dave Lagzdin, Javier Martinez, Stef Mientki, Wouter van Ooijen, Michael Reynolds, Andre Steenveld, Joep Suijs, Vasile Surducan und Michael Watterson). Der Inhalt dieses Buchs bezieht sich auf die zur Zeit aktuelle Version der Sprache JAL. Unser kostenloses Software-Download-Paket enthält möglicherweise bereits eine neuere Version. | ||||||
![]() |
Dies ist ein Beispiel für ein Programm in JAL, es lässt eine an
PIC16F877-Mikrocontroller-Pin 23 (c4) angeschlossene LED blinken:
... wobei für andere Controller-Typen die eingebundene Bibliothek sowie die Portbelegung entsprechend der Möglichkeiten zu ändern sind. |
||||||
![]() |
1. Bezug und Installation -
weitere Möglichkeiten |
||||||
![]() |
|
||||||
![]() |
Short-Cuts alphabetisch: [Alternativen] [Ausgabe eines Bits] {Einfache unvollständige Verzweigung] {Einfache vollständige Verzweigung] [Einlesen eines Bits] [Enlosschleife] {Delays} [Konstante] [Logische Operationen] [Mehrfache Verzweigung] [Solange-Schleife] [Variablen] [Variablen-Datentypen] [Variablen-Deklaration] [Vergleichsoperatoren] [While-Schleife] [Zählschleifen] {Zeitverzöderung} [Zufallszahlen] |
||||||
![]() |
Quellen:
|
1. Bezug und Installation - weitere Möglichkeiten |
![]() |
![]() |
![]() |
Letztmalig dran rumgefummelt: 12.07.21 17:32:27 |
![]() |
Es ist zu empfehlen, sich von den unten genannten Bezugsquellen die aktuellste Version zu beschaffen und zu installieren. Wir bieten mit der Version 0.5.6.0. einen Einstieg, welcher leicht ein Update eigenständig über die Help-Funktion bereitsetellt. | ||||||||
![]() |
Entpacken Sie das Archiv und kopieren oder installieren Sie in den Ordner C:\PICdev\ | ||||||||
![]() |
|
||||||||
![]() |
|
||||||||
![]() |
Was man beachten muss: Vorgaben und Möglichkeiten sind abhängig von der Wahl des
Schaltkreises sowie seiner gewählten externen Beschaltung
|
||||||||
![]() |
|
2. Kommentare, Konstanten, Variablen & Bibliotheken - die Bibliothek „16f877 bert" |
![]() |
Bibliotheken (libraries)
erweitern die Programmiersprache JAL, indem sie Funktionalität hinzufügen.
Mit Hilfe von Bibliotheken können Sie Programme schreiben, die zum Beispiel
Daten seriell übertragen, analoge Signale messen und noch vieles mehr. An den Projekten dieses Buchs mit dem P1C16F877 ist immer die Standard-Bibliothek „16f877 bert"' beteiligt. Diese Standard-Bibliothek ist eine Sammlung populärer einzelner Bibliotheken, die sich in perfekter Weise ergänzen. Die Bibliothek„ 16f877 bert" gehört zum Software-Paket, das Sie kostenlos von unserer Website www.boekinfo.tk herunterladen können. Durch die Bibliothek„ 16f877 bert" erhält JAL zusätzlich folgende Funktionalitäten: |
||||||||||||||||
![]() |
Programmkommentare: -- ich bin ein Programmkommentar ... Programmkommentare
|
||||||||||||||||
![]() |
|
||||||||||||||||
![]() |
|
||||||||||||||||
![]() |
Variablen und Auflistung von Variablen die Definition erfolgt mit var datentyp variablenname Beispiel: -- definition var bit is flag
var byte variable1 |
||||||||||||||||
![]() |
|
||||||||||||||||
![]() |
Außerdem sind Variablentypen „nach Maß" definierbar, wie dieses Beispiel zeigt:
In vorstehendem Beispiel hat die Variable „demo" die Länge 2 Bit, sie kann folglich die dezimalen Werte 0, 1, 2 oder 3 annehmen. Wenn dieser Variablen ein Wert zugewiesen wird, muss der Wert nicht unbedingt 2 Bit lang sein. Die Variable übernimmt nur die beiden niederwertigen Bits, allen übrigen Bits werden abgeschnitten (In diesem Fall kann der Compiler eine Warnung ausgeben. Wenn das Abschneiden der höheren Bits absichtlich geschah, darf die Warnung ignoriert werden. Die Ausgabe dieser Warnung ist in der Compiler-Konfiguration normalerweise abgeschaltet). |
||||||||||||||||
![]() |
Die Zuweisung
hat zur Folge, dass die 2-Bit-Variable „demo" den dezimalen Wert 3 erhält. Dezimal 99 entspricht binär 1100011, die beiden letzten Bit sind 11, was der dezimalen Zahl 3 entspricht. außer dem dezimalen Zahlenformat sind in JAL zwei weitere Zahlenformate erlaubt, sie müssen durch die Präfixe „Ox" beziehungsweise „Ob" gekennzeichnet werden:
Natürlich ist auch die Verwendung von Zeichenketten (Strings) möglich, sie müssen in Anführungszeichen gesetzt werden:
Zur besseren Lesbarkeit der Zahlen können zwischen die Ziffern an beliebigen Stellen Unterstriche eingefügt werden. Die Schreibweisen „100" und „10_0" sind für den Compiler identisch. Im folgenden Beispiel wird einer Variablen ein binärer, mit Unterstrichen geschriebener Wert zugewiesen:
|
||||||||||||||||
![]() |
Variablendeklaration Bevor das Zuweisen oder Abrufen von Werten möglich ist, müssen Variablen definiert werden. In JAL gibt es für das Definieren der Variablen folgende Möglichkeiten:
|
||||||||||||||||
![]() |
... mit der zuletzt genannten Definition können Sie den
Mikrocontroller-Anschlüssen treffendere Namen geben. Wenn beispielsweise
Anschluss cl eine rote LED steuert, kann folgende Anweisung sinnvoll sein:
Im Anschluss an diese Definition können Sie die LED mit „redled = 1" einschalten. Diagramm gewinnt nicht nur an Verständlichkeit, auch ein eventuell notwendiges Übertragen auf einen anderen PIC-Mikrocontroller-Typ wird vereinfacht. Falls beim anderen PIC der Anschluss c1 nicht vorhanden ist, müssen Sie nur die Programmzeile ändern, in welcher die Definition steht:
Alle übrigen Zeilen des Programms, in denen die LED eingeschaltet oder ausgeschaltet wird bleiben unverändert. |
||||||||||||||||
![]() |
Trickprogrammierung für "Erfahrene"
Wenn Sie einer Variablen einen bestimmten Speicherplatz zuordnen, müssen Sie
die Folgen im Auge behalten. Durch Zuordnen eines Speicherplatzes können Sie
eine Variable auf geschickte Weise unterteilen. Im folgenden Beispiel wird
dem Array „dem" der gleiche Speicherplatz ~~ .Variablen „demo" vom Typ „word"
zugeordnet:
Da die Variable „demo" vom Typ „word" ist, hat sie die Länge 2 Byte. Das Arrav „dem" ist ebenfalls 2 Bytes lang, so dass das erste Element des Arrays „dem" mit dem unteren Byte von „demo" und das zweite Element des Arrays „dem" mit dem oberen Byte von „demo" identisch ist. |
||||||||||||||||
![]() |
für bestimmte Zwecke gibt es Funktionsgebundene und somit reservierte
Bezeichner (sie werden von den Bibliotheken vordefiniert) - im Sinne des
Systems sollte man sie einhalten, muss dies jedoch nicht zwingend tun. So
lauten die Standardbezeichner:
|
||||||||||||||||
![]() |
vollständige Variablendeklaration mit verschiedenen Datentypen, Auflistung sowie Startwwert-Zuweisung |
||||||||||||||||
![]() |
Wenn
von vornherein feststeht, dass der Wert einer Variablen niemals verändert
wird, handelt es sich um eine Konstante. Einer Konstanten kann n Wert wie
folgt zugewiesen werden:
Im Gegensatz zu Variablen belegen Konstanten keinen Platz im Arbeitsspeicher (RAM). Bei n meisten PIC-Typen ist der Arbeitsspeicher relativ knapp bemessen. Durch den Einsatz von Konstanten anstelle von Variablen (sofern möglich) wird der Arbeitsspeicher entlastet. allerdings macht sich dieser vorteilhafte Effekt bei kurzen Programmen nur wenig bemerkbar, deshalb werden Konstanten in den Programmen dieses Buchs nur selten verendet. |
3. Mathematische & logische Operatoren |
4. Zeitverzögerungen und Zufallswerte |
![]() |
Als Basisbefehle müssen hier vorerst die Anweisungen und Kommandos sowie Vereinbarungen verstanden werden, welche uns in die Lage versetzen, unter Nutzung der Bibliotheken minimale Programme zu schreiben, die auch schon etwas "tun"! Zum Programmieren von Verzögerungen im Programmablauf stehen folgende Kommandos zur Verfügung: | ||||
![]() |
Zeitverzögerung delay function(zeitkonstante) als function sind sind zugelassen die Bezeichner:
das uS im Kurzzeitbereich steht für "Mikrosekunden" |
||||
![]() |
Zufallszahlen
Mit diesen Kommandos werden quasi-zufällige Zahlenwerte generiert: |
||||
![]() |
|
||||
![]() |
|
||||
![]() |
|
4. Port-Operationen |
![]() |
Als Basisbefehle müssen hier vorerst die Anweisungen und Kommandos sowie Vereinbarungen verstanden werden, welche uns in die Lage versetzen, unter Nutzung der Bibliotheken minimale Programme zu schreiben, die auch schon etwas "tun"! | ||||||
![]() |
|
5. Zufallszahlen |
![]() |
Zufallszahlen sind auf der Ebene der Microcontroller genauso wichtig, aber auch genau so "sensibel" wie ihre großen Brüder in den Hochsprachen der modernen Programmiertechnik. Für unsere kleinen Projekte bemerken wir das allerdings nicht. | ||
![]() |
|
||
![]() |
|
||
![]() |
|
7. Verzweigungen - Alternativen |
![]() |
Verzweigungen von Programmen sind die eigentlich wichtigste Grundstruktur der Programmierung und machen den Unterschied zwischen einer Abfolge sowie einem Programm aus. Bei einer einfachen Abfolge wird zwangsläufig ein Schritt nach dem anderen abgearbeitet, ein Programm jedoch hinterfragt vor Abarbeitung des nächsten Schrittes das Ergebnis des gerade erledigten Teils. |
![]() |
|
![]() |
if bedingung then Beispielprogramm mit einer unvollständigen einfachen Verzweigung |
![]() |
vollständige Alternative:
if bedingung then Beispielprogramm mit mehreren vollständigen einfachen Verzweigung |
![]() |
mehrfache Alternative:
if bedingung then Beispielprogramm mit mehreren vollständigen einfachen Verzweigung |
8. Schleifen - Zyklen |
![]() |
Zyklen sind wiederholt komplett identisch auszuführende Programmsequenzen, welche erst durch das Eintreffen einer vorab definierten logischen Bedingung nicht mehr ausgeführt werden bzw. in einem Fall bei zutreffen der Bedingung vor Schleifeneintritt überhaupt nicht erst ausgeführt werden. | ||
![]() |
Endlosschleifen - forever loop: Mit dieser Schleifenkonstruktion wird der dazwischen stehende Programmteil endlos wiederholt. In vielen Programmen ist die Forever-Schleife eingebaut, damit das Programm jemals stoppt, müssen andere Konstrukte eingebaut werden - diese Schleife läuft ansonsten wie eine Art Betriebssystem für den Controller.
|
||
![]() |
Wiederhole Solange-Schleifen - loop while: Die Loop-while-Schleife wird nur so lange durchlaufen, bis eine bestimmte Bedingung ermittelt ist oder ein bestimmtes Ereignis eintritt.
|
||
![]() |
Wiederhole bis ... -Schleifen: while bedingung loop |
||
![]() |
Wenn die Anzahl der Wiederholungen einer Schleife einen festen Wert haben soll, wird die for-schleife Schleife angewendet.
Im folgenden Beispiel werden die in der Schleife stehenden Kommandos genau zehn mal wiederholt:
|
10. Subroutinen (Unterprogramme) |
![]() |
Sollen gleiche Programmelemente in sich komplett gleich abgearbeitet, jedoch die angewandten Werte jeweils verschieden sein, so heißt das universelle Lösungsmittel Prozeduren - und auch JAL kennt diese. |
![]() |
|
11. Funktionen sowie Verfahren nutzen - externe Bausteine steuern |
![]() |
Hier nun öffnet sich für
eigentlich
jede physikalische Größe die Option auf einen entsprechenden Signalwandler,
welcher auch über die Mikrocontroller ausgewertet werden kann. Darüber
hinaus existieren ganze Bauteil-Paletten, welche in sich bereits komplexe
Funktionen verfügbar machen. Aber auch der Controller selbst sowie einige rafinierte Verfahren bieten sich hier zur Anwendung an. |
||||||
![]() |
|
||||||
![]() |
|
12. Verwandte Themen |
![]() |
![]() |
![]() |
|
Was ist alles mit dem Betriebssystem eines Microcomputers verwandt? Antwort: faktisch der gesamte Bereich der Digitalelektronik und sowieso die gesamte Technik der Software-Technologie der Vergangenheit, Gegenwart sowie zumindest der nächsten Zukunft. | ||||||||||||||||||
![]() |
|
||||||||||||||||||
![]() |
|
![]() zur Hauptseite |
© Samuel-von-Pufendorf-Gymnasium Flöha | © Frank Rost am 21. Juli 2009 |
... dieser Text wurde nach den Regeln irgendeiner Rechtschreibreform verfasst - ich hab' irgendwann einmal beschlossen, an diesem Zirkus nicht mehr teilzunehmen ;-) „Dieses Land braucht eine Steuerreform, dieses Land braucht eine Rentenreform - wir schreiben Schiffahrt mit drei „f“!“ Diddi Hallervorden, dt. Komiker und Kabarettist |
Diese Seite wurde ohne Zusatz irgendwelcher Konversationsstoffe erstellt ;-) |