Der bekannte BASIC-Interpreter 8052AH-BASIC von Intel ist ein leistungsfähiges System für 8052-Mikrocontroller. Das System wurde für das TFH-Board (ES537) angepaßt und um einige spezielle Befehle erweitert. Damit besteht nun die Möglichkeit, das ES537 auch mit BASIC-Programmen autonom betreiben zu können.
Zum Betrieb des BASIC sind folgende Einstellungen auf dem Board nötig:
Zum Betrieb des Basic ist im Prinzip nur ein beliebiges Terminalprogramm mit 9600 Baud erforderlich. Nach dem Einschalten des Systems meldet sich das BASIC mit einer Einschaltmeldung:
MCS-51(tm) BASIC V1.1 / ES537
READY
>
Statt eines einfachen Terminalprogramms können zwei weitere Programme auf der Diskette eingesetzt werden: BASEDIT.EXE ist ein integriertes Editor- und Terminalprogramm für autonome BASIC-Programme im ES535. Dieses DOS-Programm kann unter Windows 3.1x gestartet werden. Unter Windows95 läuft es nur im MS-DOS Modus zuverlässig. Alternativ kann auch das Windowsprogramm SBASIC.EXE eingesetzt werden.
Dateien der DOS-Version auf der Diskette:
Verzeichnis DOS: BASEDIT.EXE Editor- und Terminalprogramm BASEDIT.HLP Befehlsübersicht BASIC537.DOC Dieser Text *.BAS BASIC-Beispielprogramme
Hinweis:
BASED535 und Beispiele zum 80535 findet man beim ES535
BASEDIT.EXE startet per default mit COM2. Für eine andere Schnittstelle als COM2 muß beim Programmaufruf ein Parameter mit angegeben werden, z.B. BASEDIT 1 für COM1. Unterstützt wird COM1 bis COM4.
Nach dem Einschalten des ES537 meldet sich der BASIC52-Interpreter mit seiner Einschaltmeldung:
MCS-51(tm) BASIC V1.1 / ES537
READY
>
Nun kann ein erstes Programm eingegeben und gestartet werden:
10 REM Portausgaben (Test1.bas) 20 FOR N=0 TO 255 30 PORT1=N 40 FOR I=1 TO 200 : NEXT I 50 NEXT N 60 GOTO 20 RUN
Ein übliches Terminalprogramm sendet jedes Zeichen von der Tastatur direkt an das BASIC-System. Alle Zeichen werden dort zunächst in einem Eingabepuffer mit einer Länge von 79 Zeichen gesammelt und erst nach <RETURN> ausgewertet. Damit der BASIC-Text frei editiert werden kann, wurde das Editor- und Terminalprogramm BASEDIT entwickelt.
BASEDIT für DOS hat im Grundmodus zwei Textfenster. Im oberen Fenster arbeitet ein einfacher Texteditor mit vielen Editierfunktionen. Ins untere Fenster werden alle vom Mikrocontroller gesendeten Zeichen geschrieben. Jedesmal, wenn im Editor ein <RETURN> getippt wird, wird die komplette Zeile an den Controller geschickt. Sein Echo erscheint dann im Terminalfenster. Der Benutzer kann jede Zeile vor der Übertragung beliebig editieren. Dies gilt auch für Zeilen, die bereits weiter oben im Text stehen, und die nachträglich noch einmal geändert werden sollen. Im Terminalfenster läßt sich jeweils beobachten, ob eine Zeile angenommen wurde oder eine Fehlermeldung auslöst.
Der Editor arbeitet immer im Einfügemodus. RETURN innerhalb einer Zeile führt aber nicht wie in der Textverarbeitung üblich zu einem Teilen der Zeile, sondern der Cursor springt nur an den Anfang der nächsten Zeile. Der Cursor kann beliebig mit den Pfeiltasten, mit PgUp und PgDn sowie Home und End verschoben werden. Insgesamt können 512 Zeilen bearbeitet werden.
Spezielle Funktionen des Programms lassen sich über die Funktionstasten
F1 bis F8 aufrufen:
Natürlich können neben Programmzeilen auch Direktkommandos wie NEW, LIST, RUN usw. eingeben werden. Zum Testen können auch direkte Abfragen erfolgen wie z.B. PRINT InPort. Ein Besonderheit des Gesamtsystems ist es, daß geladene Programme schon im Controller vorhandene Programme nur insoweit überschreiben, wie sie gleiche Zeilennummern ersetzen. Man kann daher eine Sammlung von Unterprogrammen anlegen, die bei Bedarf hinzugeladen werden. Um ganz neu anzufangen, muß vor dem Laden eines Programms NEW eingegeben werden.
Die folgende Übersicht zeigt die wichtigsten Befehle und Funktionen des BASIC-52. Zahlreiche Sonderfuntionen sind speziell an die Umgebung des Mikrocontrollers angepaßt. Einige originale BASIC52-Befehle sind mit dem SIOS-Interface nicht nutzbar und werden hier nicht aufgeführt. Vier neue Befehle wurden speziell für das SIOS hinzugefügt.
Kommandos: RUN Ctrl-C CONT LIST NEW Operatoren: + - / * = > >= < <= <> .AND. .OR. .XOR. ABS() NOT() INT() SGN() SQR() RND LOG() EXP() SIN() COS() TAN() ATN() Statements: CALL DATA READ RESTORE DIM DO-WHILE DO-UNTIL END FOR-TO-STEP NEXT GOSUB ON-GOTO ON-GOSUB IF-THEN-ELSE INPUT LET ONERR PRINT REM STOP Erweiterte Statements des BASIC-52: ONEX1 Unterprogrammaufruf nach Interrupt 1 ONTIME Timer-Interruptaufruf RETI Ende eines Interrupt-Unterprogramms PH0., PH1. Ausgabe einer Hexadezimalzahl ohne/mit Nullstellen PUSH, POP Daten zum, vom Argument-Stack STRING Speicher für Textstrings reservieren IDLE Warten auf Interrupt Spezialfunktions-Operatoren und Systemvariablen: CBY() DBY() XBY() GET IE IP PCON T2CON TCON TIME TIMER0 TIMER2 PI XTAL MTOP LEN FREE
Zur direkten Unterstützung der speziellen Ein- und Ausgänge des 80C537 wurden vier neue Befehle entwickelt:
AD (Kanal) (nur Lesen) C = AD (0) Analogeingabe (0..5V) am Eingang AD0 C = AD (11) Analogeingabe (0... 5V) am Eingang AD11 DAPR (nur Schreiben) DAPR = 128 Umschalten des Meßbereichs auf 2,5 V SFR (nur Lesen) print SFR (90H) Lesen von Spezialfunktionsregistern WrSFR (nur Schreiben) WrSFR 90H,255 Beschreiben von Spezialfunktionsregistern
Die Meßbereiche der zwölf möglichen Analogeingänge betragen 0 bis 5 V. Die Meßbereiche lassen sich jedoch mit Hilfe des Befehls DAPR in weiten Grenzen verändern, wie weiter unten noch gezeigt wird.
Für jede Messung kann der Meßbereich in weiten Grenzen eingestellt werden, wobei jeweils eine untere und eine obere Grenze durch einen 4-Bit-Parameter festgelegt sind, die zusammen einen Byte-Parameter bilden. Bit 0...3 legt die untere Grenze als Vielfaches von 5V/16 fest, Bit 4...7 ebenso die obere Grenze. Beide Referenzspannungen müssen einen Mindestabstand von 1,25V einhalten. Beispiel: 84h bewirkt den Meßbereich 1,25V-2,5V. Ausnahme: 00h=0.5V. Die eingegebenen Meßbereiche ersetzen die Standardbereiche von 5V, 5V, 2,5V und 2,5V.
Die folgenden Beispielprogramme sollen keinen BASIC-Grundlagenkurs ersetzen, sondern in erster Linie den Gebrauch der SIOS-spezifischen Befehle des Interpreters demonstrieren.
TEST1.BAS erzeugt fortlaufende Portausgaben an den digitalen Ausgängen. Die Programmausführung wurde durch eine Warteschleife verzögert, damit die Veränderung der Bitmuster gut beobachtet werden kann. Ein direkter Befehl zum Portzugriff auf Port 1 war bereits im originalen BASIC52 enthalten.
10 REM Portausgaben (Test1.bas) 20 FOR N=0 TO 255 30 PORT1=N 40 FOR I=1 TO 200 : NEXT I 50 NEXT N 60 GOTO 20
TEST2.BAS zeigt laufend den Zustand der digitalen Eingänge am Port P4. Der Port wird hier unter seiner SFR-Adresse E8h gelesen. Es erscheinen abwechselnd Ausgaben im Dezimalformat und im Hexadezimalformat.
10 REM Lesen des Eingangsports (Test2.bas) 20 PRINT SFR (0E8H) 30 FOR I=1 TO 100 : NEXT I 40 PH0. SFR (0E8H) : REM Hexadezimalausgabe 50 GOTO 20
TEST3.BAS zeigt ein Beispiel für die Spannungmessung an den Eingangskanälen 0 und 1. Die Funktion AD liefert Bytes im Wertebereich 0 ... 255. Zur Umrechnung in die gemessene Spannung in Volt wird hier durch 50 geteilt. Damit entstehen Spannungsstufen von genau 20 mV und der Meßbereich ist 0...5,1V. Der Skalierungsfehler von 0,1 V oder 2% entspricht etwa der Genauigkeit der Messung. Will man exakt auf einen Endwert von 5,0 V skalieren, lautet die Umrechnung "(AD(0))/255*5".
10 REM Spannungsmessung an Kanal 0 (A) und 1 (B) (test3.bas) 20 U1=(AD(0))/50 30 U2=(AD(1))/50 40 PRINT U1,U2 50 FOR I=1 TO 200 : NEXT I 60 GOTO 20
Das Programm TEST4.BAS verwendet den Analogeingang 0 und die digitalen Ausgänge am Port 1 zum Aufbau einer Leuchtbandanzeige. Der Meßbereich wird in acht gleiche Stufen geteilt, die durch die acht LEDs der Leuchtbandanzeige dargestellt werden.
10 REM Leuchtbandanzeige (test4.bas) 20 ANZAHL=INT((AD(0))/32+0.5) 25 PRINT ANZAHL 30 ON ANZAHL GOSUB 100,110,120,130,140,150,160,170,180 40 GOTO 20 100 PORT1=0 : RETURN 110 PORT1=080H : RETURN 120 PORT1=0C0H : RETURN 130 PORT1=0E0H : RETURN 140 PORT1=0F0H : RETURN 150 PORT1=0F8H : RETURN 160 PORT1=0FCH : RETURN 170 PORT1=0FEH : RETURN 180 PORT1=0FFH : RETURN
TEST5.BAS zeigt ein Beispiel für die Verarbeitung analoger Signale mit dem ES537. Die Spannungslupe arbeitet mit einem veränderten Meßbereich am Eingang 0. Ein kleiner Bereich mit einer Breite von 1,25 V wird auf den gesamten Ausgangsbereich von 0...5V eines externen DA-Wandlers umgesetzt, der am Port1 angeschlossen werden soll. Am Ausgang kann ein Zeiger-Voltmeter angeschlossen werden, um die geringen Änderungen einer Spannungsquelle "vergrößert" ablesen zu können. In Zeile 20 wird der Meßbereich für den analogen Eingang A festgelegt. Experimente mit noch kleineren Abständen zwischen Unter- und Obergrenze des Meßbereichs sind möglich, führen aber zu keiner größeren Auflösung als 5 mV, der physikalischen Auflösungsgrenze des AD-Wandlers.
10 REM Spannungslupe (test5.bas) 20 DAPR = 0C8H : REM 2,5V - 3,75V 30 A=AD(0) 40 PRINT 2.5+A/200," V" 50 PORT1 = A 60 GOTO 30
SBASIC.EXE ist ein integriertes Editor- und Terminalprogramm unter Windows. Alle Einstellungen werden in SBASIC.INI eingetragen. Voreingestellt ist die Schnittstelle COM2 mit 9600 Baud. Das Programm enthält eine ausführliche Hilfe und erklärt sich weitgehend selbst. SBASIC wurde ursprünglich für das SIOS-Interface entwickelt und wird nun durch eine angepaßte INI-Datei für das ES537 nutzbar.
SBASIC prüft beim Start, ob ein Basic-System angeschlossen ist. Wenn das ES537 bereits eingeschaltet war, startet das Terminalprogramm. Falls das ES537 noch nicht eingeschaltet war, fragt das Programm, ob ein System geladen werden soll. Die Frage muß verneint werden, da sie sich auf SIOS-Interface bezieht und da sich im ES537 das System bereits im EPROM befindet.
Im Terminalfenster können direkte Befehle wie "print port1" oder auch Basic-Zeilen und Kommandos wie "run", "new" usw. eigegeben werden. Mit Datei/Neu erhält man ein neues Editorfenster. Alle eingegebenen Zeichen werden sofort zum ES537 geschickt. Alle Antwortzeichen werden im Terminalfenster angezeigt.
Über Datei/Öffnen kann ein Programm geladen werden. Zuvor sollte ein bereits laufendes Programm mit Programm/Break gestoppt und mit Datei/New aus dem System entfernt werden. Jedes Programm kann mit Datei/Run gestartet werden.
Das ES537 wurde unter der Bezeichnung TFH-Board an der Fachhochschule der DMT in Bochum von Prof. B. vom Berg entwicklelt und im Elektorverlag ausführlich beschrieben. Das Buch stellt die gesamte Hardware einführend vor und stützt sich dabei auf die Programmierung in Pascal:
Dr. B. v. Berg: Das 8051er Lehrbuch, Elektror-Verlag 1997
Die Anwendung und Anpassung des BASIC52 wurde im folgenden Buch beim Franzis-Verlag beschrieben. Es reicht von den Grundlagen des 8048-Controllers bis zum 80535 und beschreibt ausführlich die Entwicklungssysteme ES48, ES51 und ES535, in deren Reihe nun auch das ES535 steht.
B. Kainka: Erfolgreich Messen, Steuern und Regeln mit Mikrocontrollern, Franzis-Verlag, 2. Auflage 1998
B. Kainka BASIC-537, Elektor 2/2000. S. 62ff
Das Schlüsselwort TIMER1 wurde bei der Erweiterung umdefiniert in AD( ). Es kann nun nicht mehr in einem Programm verwendet werden, weil der Interpreter es immer in AD ändert. Trotzdem steht der Timer1 des 80537 für beliebige Verwendung zur Verfügung. Man muss dabei über SFR( ) und WrSFR direkt auf die Register TH1 und TL1 zugreifen. Im Beispiel nimmt eine Variable TIM1 den 16-Bit-Wert des Timers auf.
10 REM Timer 1 lesen: 20 TIM1=256*SFR(08DH)+SFR(08BH) 30 PRINT TIM1
40 REM Timer 1 schreiben 50 TIM1=10000 60 WRSFR 08DH,TIM1/256 : WRSFR 08BH,TIM1.AND.255