BASIC537

- BASIC52 für das ES537 -


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:

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

1 Programmaufruf

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:

Nun kann ein erstes Programm eingegeben und gestartet werden:

2 Der Programm-Editor

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.

3 Befehlsübersicht

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.

4 Beispielprogramme

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.

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.

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".

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.

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.

4. SBASIC unter Windows

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.

5. Literatur:

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


Nachtrag 20.12.00

Der Timer1 in BASIC537

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