                BASIC52-Editor und Terminal

             BASEDET.EXE   und   BASED535.EXE
                   (Autor: B. Kainka)

                - Bedienungsanleitung -

BASEDIT dient zum bequemen Editieren und Verwalten von BASIC-Programmen
fr 8052AH-BASIC-Systeme und Mikrocontroller-Systeme mit einem
adaptierten BASIC-52. Der Mikrocontroller wird ber die serielle
Schnittstelle programmiert und sendet seine Ausgaben ber die
Schnittstelle an den PC zurck. Prinzipiell kann jeder ASCII-Editor fr
die Kommunikation mit dem System verwendet wwerden.

Ein bliches Terminalprogramm sendet jedes Zeichen von der Tastatur
direkt an den Mikrocontroller. Alle Zeichen werden dort zunchst in einem
Eingabepuffer mit einer Lnge von 79 Zeichen gesammelt und erst nach
<RETURN> ausgewertet. Jeder Fehler macht es leider erforderlich, die
gesamte Zeile neu einzugeben. Um die Arbeit mit BASIC-52 etwas zu
erleichtern, wurde das kleine Editor- und Terminalprogramm BASEDIT
entwickelt. Die Variante BASED535 ist speziell fr das Entwicklungssystem
ES535 mit einem 80535-Controller und adaptiertem BASIC-52 gedacht.


- Erste Schritte
  --------------

Das Programm wird bein Start mit der verwendeten seriellen Schnittstelle
aufgerufen, also z.B. "BASEDIT 3" fr COM3. Default ist COM2, d.h. ohne
Startparameter wird grundstzlich COM2 verwendet. Die Baudrate ist fest
auf 9600 Baud eingestellt.

Nach dem Start mu als ersten Zeichen ein Leerzeichen (CHR 32) eingegeben
werden, das von <RETURN> gefolgt wird. Das Leerzeichen wird bentigt,
damit BASIC-52 die verwendete Baudrate erkennt und sich darauf einstellt.
Der Controller antwortet mit seiner Einschaltmeldung:

   *MCS-51(tm) BASIC V1.1*
   READY
   >

Nun knnen BASIC-Zeilen eingegeben werden, und Programme lassen sich mit
RUN starten. Das folgende kleine Beispiel zeigt die Mglichkeit von
Portausgaben:

10     REM Portausgaben
20     FOR N=0 TO 255
30     PORT1=255-N
40     FOR I=1 TO 200 :  NEXT I
50     NEXT N
60     GOTO 20


- Editieren von Programmen
  ------------------------

BASEDIT hat im Grundmodus zwei Textfenster. Im oberen Fenster arbeitet
ein einfacher Texteditor mit 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 fr Zeilen, die bereits weiter oben im Text stehen, und die
nachtrglich noch einmal gendert werden sollen. Im Terminalfenster lt
sich jeweils beobachten, ob eine Zeile angenommen wurde oder eine
Fehlermeldung auslst.

Der Editor arbeitet immer im Einfgemodus. RETURN innerhalb einer Zeile
fhrt aber nicht wie in der Textverarbeitung blich zu einem Teilen der
Zeile, sondern der Cursor springt nur an den Anfang der nchsten Zeile.
Der Cursor kann beliebig mit den Pfeiltasten, mit PgUp und PgDn sowie
Home und End verschoben werden. Insgesamt knnen 512 Zeilen bearbeitet
werden.

Spezielle Funktionen des Programms lassen sich ber die Funktionstasten
F1 bis F8 aufrufen:

F1  Hilfefunktion: Es erscheint ein Fenster mit einer
    Kurzbersicht der BASIC-Befehle.

F2  Save: Das Programm im Editor wird unter einem whlbaren
    Dateinamen gespeichert.

F3  Load: Ein Programm wird von der Diskette sowohl in den
    Editor als auch in den Controller geladen.

F4  List: Der Programmtext wird aus dem Controller in den
    Editor bertragen.

F5  Insert: Eine leere Zeile wird in den Text eingefgt.

F6  Zoom: Es wird ein bildschirmfllendes Terminalfenster
    geffnet, in dem alle Ausgaben des Controllers
    erscheinen. Eingaben werden direkt weitergeleitet.

F7  RUN: Das Programm wird mit "RUN" gestartet.

F8  STOP: Das Programm wird mir CTRL-C unterbrochen.

Natrlich knnen neben Programmzeilen auch Direktkommandos wie NEW, LIST,
RUN usw. eingeben werden. Zum Testen knnen auch direkte Abfragen
erfolgen wie z.B. PRINT PORT1. 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.


- Unterschiede zwischen BASEDIT und BASED535

Whrend BASEDIT fr 8052-Systeme entwickelt wurde, ist BASED535 speziell
an das Entwicklungssystem ES535 angepat. Nach dem Start (z.B. mit
"BASED535 1" fr COM1) fhrt das Programm zunchst ber die RTS-Leitung
einen Reset des Prozessors durch. Dann erfolgt eine Umschaltung den ES535
in den Modus 3, wodurch der BASIC-Interpreter gestartet wird. (Beim ES535
bewirkt die Umschaltung in den Modus 3, da die obere Hlfte des EPROMS
mit dem Interpreter-Programm in den Adrebereich ab 0000h geblendet wird
und das RAM als reiner Datenspeicher ab 0000h dient.)

Das angepate BASIC-52 fr den 80535 arbeitet immer mit 9600 Baud und
bentigt daher kein Leerzeichen zum Start. Das System sendet ohne
Eingaben des Benutzers seine Einschaltmeldung:

   MCS-51 BASIC V1.1 / 80535
   READY
   >

Falls durch eine Unterbrechung der Stomversorgung des ES535 das BASIC
verlassen wurde, mu BASED535 erneut gestartet werden, um wieder den
Modus 3 zu erreichen.



- Befehlsbersicht des BASIC-52

Kommandos:
RUN  Ctrl-C  CONT  LIST  LIST#  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:
BAUD           Baudrate fr List#, Print#
ONEX1          Unterprogrammaufruf nach Interrupt 1
ONTIME         Timer-Interruptaufruf
RETI           Ende eines Interrupt-Unterprogramms
PH0., PH1.     Ausgabe einer Hexadezimalzahl ohne/mit Nullstellen
PH0.#, PH1.#,
PRINT#, LIST#  Serielle Ausgabe ber P1.7
PUSH, POP      Daten zum, vom Argument-Stack
PWM            Pulsweitenmodulation ber Port 1.4
STRING         Speicher fr Textstrings reservieren
UO1, UO0       User-Output aktiv/inaktiv
IDLE           Warten auf Interrupt

Spezialfunktions-Opreratoren und Systemvariablen:
CBY()  DBY()  XBY()  GET  IE  IP  PORT1  PCON  RCAP2  T2CON
TCON  TMOD  TIME  TIMER0  TIMER1  TIMER2  PI  XTAL  MTOP
LEN  FREE



- Spracherweiterung fr das ES51

Das Entwicklungssystem ES51 kann mit einem erweiterten BASIC-Interpreter
im EPROM bezogen werden.

Das BASIC-52 im EPROM enthlt eine Befehlserweietrung zur Ansteuerung
eines AD-Wandlers MAX186 und des LCD-Displays. Der Wandler mu extern
ber Port P3 angeschlossen werden und stellt acht Eingangskanle mit
einer Auflsung von 12 Bit bereit. Es wird ein serielles
bertragungsprotokoll mit drei Leitungen verwendet:

          P3.2:  Dout
          P3.4:  Din
          P3.5:  Sclk

Die Basic-Erweiterung enthlt einen LCD-Treiber und kennt die
zustzlichen Kommandos LCDINIT und CURSOR. Die Ausgabe erfolgt z.B. durch
UO 1 (user output on). Das folgende Beispiel demonstriert die Ausgabe von
Medaten der Analogausgnge auf dem LCD- Display:

100    REM Vierkanal-Voltmeter
110    LCDINIT :  UO 1 : REM Ausgabe auf LCD umlenken
120    FOR N=0 TO 3
130    AD (128+64+16*N+14) :  REM Kanal 1,3,5,7
140    POP D
150    IF N<2 THEN  CURSOR (8*N)
160    IF N>1 THEN  CURSOR (64+8*(N-2))
170    PRINT D,"mV",
180    NEXT N
190    FOR I=1 TO 500 :  NEXT I
200    GOTO 120



- Spracherweiterungen des BASIC-35

Fr direkte Portzugriffe stehen die folgenden zustzlichen Befehle zur
Verfgung:

Ausgabe                     Eingabe
-------------------------------------------
P3 = X                      INP3 : POP A
P4 = 255                    INP4 : POP A
P5 = 255-X                  INP5 : POP A
                            INP6 : POP A

Zustzlich wurde mit dem Operator "IO" der Zugriff auf weitere Hardware-
Elemente ermglicht. Die genaue Funktion von IO wird durch Zuweisung
einer Funktionsnummer an den Controll-Operator CTRL gesteuert:

Insgesamt sind folgende Funktionen erreichbar:

   Ports:
   CTRL=1      Port 1         schreiben und lesen
   CTRL=3      Port 3         schreiben und lesen
   CTRL=4      Port 4         schreiben und lesen
   CTRL=5      Port 5         schreiben und lesen
   CTRL=6      Port 6         nur lesen

   Interruptsteuerung:
   CTRL=10     IEN0           schreiben und lesen
   CTRL=11     IP0            schreiben und lesen
   CTRL=12     IEN1           schreiben und lesen
   CTRL=13     IP2            schreiben und lesen
   CTRL=14     IRCON          schreiben und lesen

   Timer 2:
   CTRL=20     CCEN           schreiben und lesen
   CTRL=21     CCL1/CCH1      schreiben und lesen, 16 Bit
   CTRL=22     CCL2/CCH2      schreiben und lesen, 16 Bit
   CTRL=23     CCL3/CCH3      schreiben und lesen, 16 Bit
   CTRL=24     CRCL/CRCH      schreiben und lesen, 16 Bit

   A/D-Wandler:
   CTRL=30     A/D-Wandler    nur lesen

Jede Messung im erweiterten BASIC verwendet den Operator IO mit
CTRL=30. Vor einer Messung mu der gewnschte Mebereich ber den
Operator DAPR festgelegt werden, und der gewnschte Eingangskanal ist in
ADCON zu schreiben.

Die Basic-Erweiterung bercksichtigt auch einen LCD-Treiber, so da
bequem autonome Meprogramme mit LCD-Ausgabe geschrieben werden knnen.
Dazu gibt es die zustzlichen Kommandos LCDINIT und CURSOR. Die Ausgabe
erfolgt z.B. durch UO 1 (user output on). Das folgende Beispiel
demonstriert die Ausgabe von Medaten der Analogausgnge auf dem LCD-
Display:


10     REM Vierkanalmessung mit LCD-Ausgabe
20     LCDINIT :  UO 1 : REM Ausgabe auf LCD umlenken
100    CTRL =30 :   REM AD-Wandler 
110    DAPR =128 :  REM Vref=2,5V
120    FOR N=0 TO 2
130    ADCON =N :   REM Kanal 
140    U=IO/100 :   REM AD-Wandler auslesen
150    CURSOR (N*8): PRINT U,
160    NEXT N
170    PRINT "   V   "
180    FOR T=1 TO 2000 :  NEXT T
190    GOTO 120



- Literaturangabe:
  B.Kainka, Erfolgreich Messen, Steuern und Regeln mit Mikrocontrollern,
  Franzis 1996
