Sie sind hier Programmieren

# Entwickeln von BASIC-Programmen in INTEL-MCS-BASIC mit MOTRON-Erweiterung

## Programmentwicklung:

Es wird sicher Benutzer geben, die auf fertige Programme von MOTRON zurückgreifen. Ebenso kann der Anwender aber auch die vollen Fähigkeiten dieser Sprache nutzen und sein spezielles Programm schreiben. Alle Möglichkeiten hierzu sind vorhanden. Ablauffähige BASIC-Programme arbeiten zeilenorientiert. Jede Zeile benötigt am Anfang eine Zeilennummer. Die Zeilen werden in aufsteigender Reihenfolge abgearbeitet. Um eine Zeile zu löschen wird nur die Zeilennummer alleine eingegeben. Da der Editor des Prozessors 8052 und seiner Derivate nur zeilenorientiert ist und nur einfaches "Zeichen-Löschen" zulässt, ist eine komfortable Bearbeitung im System selbst nicht möglich. Das macht man besser in einem Zeileneditor. Mit dem ProgTool wird dann dieses Programm auf das Zielsystem (z.B. BasicMaster) geladen. Oder man kann direkt aus der Zwischenablage mit <shift><Einfg> oder V einfügen. Normalerweise wird man wie folgt arbeiten:

| Editieren | Mit dem gewohnten ASCII-Editor
| Verbindung herstellen | Com / Baudrate
| Einstellungen | RAM / ROM / MTOP
| Download | z.B. MOTRON's ProgTool mit automatischem REMKILL (PC -> Controller)
| Test |
| Autostart | Der Start ohne PC

nach oben

## Verbindung herstellen

Das System meldet sich nach dem Einschalten der Spannungsversorgung selbständig über die serielle Schnittstelle 0 (SIO 0). Diese Schnittstelle ist beim BasicMaster auf einem 9-pol. Sub-D-Stecker, beim StepCon auf dem 10-poligen Pfostenstecker K2 herausgeführt.

Die Schnittstellenparameter sind:

- Baudrate 9600
- 8 Datenbit
- 1 Stopbit
- kein Paritätsbit
- XON/XOFF Protokoll

Am Bildschirm kommt die Meldung

Sobald der BASIC-Prompt (>) erscheint ist das System bereit, Befehle anzunehmen. Als erstes Zeichen wird immer ein XON gesendet, um die Kommunikation mit dem Hostrechner freizugeben.

nach oben

## Einstellungen

Das Speichermodell des Prozessors zeigt 3 Speicherbereiche, von denen für den Programmierer nur der Speicherbereich im RAM und im EEPROM zugänglich ist. Der Bereich der DBY ist zwar zugänglich, erfordert aber tiefere Kenntnisse. Der Bereich der CBY ist fest ins ROM gebrannt.

## Die Speicheraufteilung des Controllers:

## RAM Storage Allocation

##

Die wichtigste Festlegung ist MTOP.
Wenn die Motion-Control-Fähigkeiten des MOTRON-Betriebssystems genutzt werden sollen,
ist der höchste Wert für MTOP=4FFFH, sonst 7FFFH.
Unterhalb von MTOP wird der Bereich für die Strings angelegt.
Darunter kommt der Bereich für die Variablen, und zwar unterschiedlich für Skalare
oder Feldvariable. (Siehe dazu das ausführlicheOriginal- Manual)

Beispiel:

MTOP=4FFFH

Nach jedem Systemstart oder Reset testet der Basic-Interpreter den externen Speicher.
Die Adresse des Speicherplatzes, der die obere Grenze des verfügbaren Speichers darstellt,
wird der Systemvariablen MTOP zugewiesen. Der Interpreter benutzt ausschließlich den Adressenbereich,
der unterhalb von MTOP liegt.

Das externe Daten-RAM wird nach dem Einschalten nur bis zum Wert von MTOP gelöscht.
Damit kann bei einem gepuffertem RAM verhindert werden, dass BASIC nach Netz-Ein Datenbereiche löscht,
die der Anwender schützen möchte. Wenn ein Teil des Speichers für andere Zwecke reserviert bleiben soll,
kann MTOP auf eine niedrigere Adresse gesetzt werden.

Weist man MTOP eine Adresse oberhalb des RAM-Adressenbereichs zu, meldet der Interpreter
einen MEMORY ALLOCATION ERROR.

Für den Entwickler ist es wichtig, genügend Speicher für sein aktuelles Programm zu haben.
Wenn z.B. das Programm 5AFFH groß ist, aber der MTOP auf 4FFFH eingestellt ist, gibt es ebenso
einen MEMORY ALLOCATION ERROR.

Beispiel: Der Programmiererr versucht das Programm vom Rom ins RAM zu laden und MTOP ist zu klein:

>ROM
>XFER
>RAM

>MEMORY ALLOCATION ERROR.

nach oben

## Programm entwickeln und testen mit dem MOTRON-ProgTool:

Im Menüpunt 'Programmiertools' findet man nützliche Helfer:

Mit REMKILL werden aus dem Text alle Kommentare gefiltert.

Kommentare werden mit ' (Hochkomma) oder ; (Strickpunkt) vom Programm-Code getrennt und beziehen sich immer nur auf eine Zeile.
REM selbst wird nicht gefiltert, damit man auch gewollte Kommentare übertragen kann.
Außerdem wird ein einfacher Syntaxcheck durchgeführt
(Ob die Zeilennummern aufsteigend sind oder ob am Zeilenende ein korrektes Zeichen steht.)

REMKILL erstellt eine neue Datei, (*.Z) ohne Kommentar, die nur temporär gebraucht wird.

Mit DENUM (Denumber) werden im Programmcode in einem vorgewählter Bereich alle Zeilennummern gelöscht, die keine Sprungziele sind.
Das Ergebnis wird in eine neue Datei geschrieben, als Hilfe zum Neumummerieren.

Mit VARLIST (Variablenliste) wird eine Liste der Programmvariablen erstellt. Gleichzeitig wird überprüft, ob die Syntax eingehalten wird.
Variable unterscheiden sich in MCS-BASIC nämlich nur im ersten und letzten Buchstaben und in der Anzahl der Zeichen.
Das Ergebnis wird in eine neue Datei geschrieben.

- Kleine Änderungen werden direkt in jeder Zeile durchgeführt.
- Hat man ein EEPROM im Controller, kann man das getestete Programm mit PROG unmittelbar programmieren.
- Bei ausführlicheren Änderungen beginnt man von vorne.

Für das Programmieren in BASIC gibt es eine Reihe von weiteren Tools, wie z.B. RENUM.EXE oder fertige MOTRON-Beispielprogramme.
Zwischendurch muss immer wieder das Programm gebrannt, d.h. ins Rom gespeichert werden.
Beispiel EEPROM "brennen", der häufigste und auch bequemste Weg:
Befehl 'PROG' senden. Damit wird das EEPROM programmiert.
Die Auto-Start-Kennung und MTOP einfügen.
Der Überschreibschutz ist aktiviert.
Beispiel EPROM "brennen":
Daten im Intel-Hex-Format in ein PC-File laden. (s. CALL 5545H)
Die Autostart-Kennung und MTOP (=Speichergrenze) einfügen.
Mit einem externen EPROM-Programmer brennen.
EPROM in den User-Sockel des MotorMaster stecken.

nach oben

## Autostart

Nach beendetem Test wird die Autostart-Kennung einprogrammiert. Autostart bedeutet, dass das Programm nach Netz-Ein selbstständig anläuft.
Ohne diese Autostart-Kennung müsste man das Programm mit RUN über das Terminal starten. MTOP kann im Programm verstellt werden.

Byte 8000H = 34H | Autostart nach Netz-Ein)
Byte 8003H = 3FH | Low-Byte von MTOP
Byte 8004H = 0FFH | High-Byte von MTOP
Byte 8010H =55H | Ein gültiges Programm ist im E(E)PROM (wird durch den Befehl PROG automatisch gesetzt)

Beispiel:

PUSH 8000H,34H:CALL 554BH ' setzt das Autostart-Byte.
PRINT XBY(8000H) ‘ kontrollieren, ob richtig geschrieben

Sobald in der Adresse 8000H nach dem Einschalten der Wert 34H gelesen wird, startet das System das
im (E)EPROM gespeicherte Programm automatisch nach einem Netz-Ein.

In den Adressen 8003H (H-Byte) und 8004H (L-Byte) kann zusätzlich ein Wert für die Variable MTOP
angegeben werden. Wenn der Wert kleiner ist, als der systeminterne MTOP=4FFFH, so wird MTOP auf den neuen Wert gesetzt.
Reicht beim Programmieren der RAM-Bereich für Programm und Strings nicht aus, kommt die Fehlermeldung "memory allocation error".
MTOP muss dann passend vergrößert werden.