                 ES51 - Anwenderhandbuch




1. Allgemeine Beschreibung

Das Entwicklungssystem ES51 mit 80C32-Prozessor ist ein
vielseitiges System sowohl fr die Programmentwicklung fr
beliebige 8051-Systeme als auch fr den direkten Einsatz als
universelles Me- und Steuerungssystem. Pogramme knne ber die
serielle Schnittstelle in das RAM des Systems geladen und
gestartet werden. Statt eines RAMs kann ein EEPROM bestckt
werden, so da sich Programme permanent bereithalten lassen.
Verschiedene Einstellungen ber drei Jumper auf der Platine
erlauben auerdem den Betrieb als eingenstndiger Einplatinen-
Computer mit Programmen im EPROM oder im Internen ROM oder EPROM
eines 8051- oder 8751-Prozessors. Erweiterungen und
Versuchsaufbauten werden duch das Punktraster- Versuchsfeld der
Platine erleichtert. Alle freien Portanschlsse sind ber
Pfostenstecker erreichbar.


Technische Daten:

Prozessor:       80C32
RAM:             32K
EPROM:           32K
Taktfrequenz:    11,059 MHz
Baudrate:        9600 Baud
Stromversorgung: 5V, stabilisiert
Stromaufnahme:   ca. 50mA
Anschlsse:      - zwei universelle 8-Bit-Ports
                 - LCD-Anschlu
Software:        - Assembler
                 - Makrocompiler MC
                 - BASIC-52-Interpreter



Der Prozessor 8051 verfgt mit P0.0 bis P0.7 ber einen
kombinierten Daten- und Adrebus. Das Adrelatch 74HC573 trennt
unter Steuerung des ALE-Signals die unteren acht Adresignale A0
bis A7 ab. Die hheren Adreleitungen werden vom Port P2
geliefert. Im Normalfall verwalten 8051-Prozessoren vllig
getrennte Programm- und Datenspeicher. Das RAM 62256 wird jedoch
beim ES51 durch eine Verknpfung von /PSEN- und /RD- Signal als
gemeinsamer Daten- und Programmspeicher verwendet. Dadurch ist
es mglich, Programme ins RAM zu laden und zu starten. Im
Grundzustand des Systems ist das EPROM 27256 inaktiv, so da das
RAM als Programmspeicher fungiert. Durch Umschaltung ber Jumper
J2 oder durch ein Signal an RTS wird jedoch das /PSEN-Signal
ausschlielich an das EPROM geleitet, so da es zum
Programmspeicher wird. Hier befindet sich im unteren
Adrebereich die Download-Software zum seriellen Empfangen und
Laden von Programmcode in das RAM.

Zustzlich kann ber J1 die EA-Leitung des Prozessors gesetzt
werden, um damit ein internes Programm z.B. in einem 8751 zu
starten. ber Jumper J3 hat man die Mglichkeit, die
Adreleitung A14 zu invertieren. Dadurch wird die obere Hlfte
des EPROMs in den Adrebereich ab Adresse 0000h gelegt, so da
ein zweites Programm im EPROM bereitgehalten werden kann. Dies
kann z.B. ein BASIC-52-Interpreter sein.







2. Anschlubelegungen

St1: Pfostenstecker 20-polig:


          1   P1.0   (frei)
          2   P1.1
          3   P1.2
          4   P1.3
          5   P1.4
          6   P1.5
          7   P1.6
          8   P1.7
          9   /RESET
          10  P3.0   (RXD)
          11  P3.1   (TXD)
          12  P3.2
          13  P3.3
          14  P3.4
          15  P3.5
          16  P3.6   (/WR)
          17  P3.7   (/RD)
          18  NC
          19  Vcc +5V
          20  GND

Anmerkung: Die Steckerbelegung entspricht weitgehend der
Anschluberegung des 8051 (Pin 1 bis 20), wobei allerdings die
Quarzanschlsse nicht weitergefhrt wurden und zustzlich auch
die Betriebsspannung herausgefhrt wurde.


St3: RS232-Anschlu DB9, weiblich, zur direkten Verbindung mit
     dem PC:

                         NC      1
                                     6     NC
  (ES51 sendet Daten)    RXD     2
                                     7     RTS  (Reset)
  (ES51 empfngt Daten)  TXD     3
                                     8     NC
  (Programm laden)       DTR     4
                                     9     NC
                         GND     5

Anmerkung: Zur Verbindung mit dem PC ist ein 9-poliges, nicht-
gekreuztes Verlngerungskabel zu verwenden. Beim Betrieb mit
blichen Terminalprogrammen ist zu beachten, da RTS und DTR
blicherweise gesetzt werden und damit ein RESET ausgelst wird.


St4: Pfostenstecker 14-Polig zum Anschlu eines Standard-LCD-Moduls

             GND     1   2     Vcc
        Kontrast     3   4     RS (A0)
        R/W (A1)     5   6     E
              D0     7   8     D1
              D2     9   10    D3
              D4    11   12    D5
              D6    13   14    D7

Anmerkung: Statt des Pfostensteckers kann eine Buchse bestckt
werden. Ein LCD-Display mit verlngertem Pfostenstecker lt
sich dann ohne ein Vebindungskabel direkt auf das ES51
aufsetzen. Ein Flachbandkabel, das von oben auf eine
Steckerleiste im ES51 und von unten auf eine zweireihige
Steckerleiste des LCD-Moduls aufgesetzt werden soll, mu jeweils
in nebeneingander liegende Leitungen (1/2, 3/4 usw. bis 13/14)
aufgetrennt und verdreht werden. Das LCD-Modul kann im gesamten
Adrebereich 8000h bis FFFFh angesprochen werden.


St7: Schraubklemme fr die Betriebsspannung

   1 GND
   2 Vcc, +5V stabilisiert

Anmerkung: Das ES51 enthlt eine Suppressor-Diode gegen
berspannung und Verpolung. Im Fehlerfall, z.B. bei berhhter
Betriebsspannung, begrenzt diese Schutzdiode die
Betriebsspannung auf einen ungefhrlichen Wert. Eine andauernde
berlastung fhrt zu einem irreversiblen Kurzschlu in der
Diode, die dann ersetzt werden mu.


St5: Pfostenstecker 10-polig, Port P1, frei verwendbar

              P1.0   1   2    P1.1
              P1.2   3   4    P1.3
              P1.4   5   6    P1.5
              P1.6   7   8    P1.7
               Vcc   9   10   GND


St8: Pfostenstecker 10-polig, Port P3

        RxD / P3.0   1   2    P3.1 / TxD
              P3.2   3   4    P3.3
              P3.4   5   6    P3.5
        Wr /  P3.6   7   8    P3.7 / RD
               Vcc   9   10   GND

3. Speichermodi

Das ES51 kann alternativ zum mitgelieferten Prozessor 80C32 mit
folgenden Prozessoren bestckt werden:

    8031/80C31    128 Byte RAM, 2 Timer
    8032/80C32    256 Byte RAM, 3 Timer
    8051/80C51    128 Byte RAM, 2 Timer, maskenprogrammiert
    8052/80C52    256 Byte RAM, 3 Timer, maskenprogrammiert
    8751/87C51    128 Byte RAM, 2 Timer, 4K EPROM
    8752/87C52    256 Byte RAM, 3 Timer, 8K EPROM
    8052AH-BASIC  8052 mit BASIC-52-Interpreter


Auf dem ES51 befinden sich drei Jumper zur Auswahl des aktiven
Programmspeichers:

   J1-ROM:    geschlossen: Internes ROM aktiv
              offen: RAM oder EPROM aktiv    (default)
   J2-EPROM:  geschlossen: EPROM aktiv
              offen: RAM aktiv               (default)
   J3-A14:    3-2 (rechts): Downloadsoftware aktiv    (default)
              3-1 (links): Adreleitung A14 wird invertiert, so
              da ein Programm in der zweiten Hlfte des EPROMs
              gestartet wird, z.B. ein BASIC-52-Interpreter.

In der Grundeinstellung (J1 und J2 offen, J3 rechts) fhrt das
ES51 ein Programm aus, das zuvor ins RAM geladen wurde. Das
Programm kann mit RESET neu gestartet werden und bleibt aktiv,
solange die Betriebsspannung anliegt. ber die serielle
Schnittstelle kann jedoch die interne Download-Software im EPROM
gestartet werden, um ein neues Programm ins RAM zu bertragen.
Diese Einstellung gilt auch fr den Betrieb mit einem EEPROM,
das genau wie ein RAM mit dem Programmcode geladen wird, wobei
allerdings die bertragung etwas langsamer erfolgen mu. Im
Grundmodus bildet das RAM einen gemeinsamen Programm- und
Datenspeicher.

Wenn fertig entwickelte Software in einem EPROM zum Einsatz
kommen soll, ist J2 zu setzen. Programme knnen das RAM nun als
reinen Datenspeicher ansprechen. In dieser Betriebsart kann z.B.
der BASIC-52-Interpreter im EPROM eingesetzt werden.

J1 aktiviert das interne ROM des Prozessors. Das System kann nun
z.B. mit einem 8751 oder 8752 mit interner Software verwendet
werden. Programmaufrufe oberhalb 4K bzw. 8K fhren in das EPROM
oder RAM, je nach Zustand von J2. Mit gesetztem Jumper J1 kann
z.B. der originale 8052AH- BASIC von Intel eingesetzt werden.
Befehlserweiterungen knnen bei gesetztem Jumper J2 im EPROM
untergebracht werden. Das gesamte RAM wird als BASIC-Speicher
erkannt.

ber die serielle Schnittstelle kann vom PC aus die Umschaltung
in das EPROM als Programmspeicher durchgefhrt werden. Die
Leitung DTR mu dazu gesetzt werden, was dieselbe Wirkung
besitzt wie das Setzen von J2. Die Umschaltung wird benutzt, um
das Download-Programm im Eprom zu aktivieren und Programme ins
RAM des Systems zu laden. RTS dient dabei als Reset-Eingang.

Die obere Hlfte des Adrebereichs von 8000h bis FFFFh wird beim
ES51 nur fr das LCD-Display verwendet. Eine spezielle
Steuerleitung liefert in diesem Adrebereich ein high-Signal fr
jeden Schreib- und Lesezugriff. Ein Standard-LCD-Modul kann an
St4 angeschlossen und ber folgende Adressenm angesprochen
werden:

           8000h: Kommandos schreiben
           8001h: Daten schreiben
           8002h: Bereitschaft lesen
           8003h: Daten lesen




4. Programme laden

Autonom im ES51 lauffhige Pragramme lassen sich bequem mit dem
Makrocomiler MC entwickeln und im System starten. Darberhinaus
knnen beliebige anders entwickelte Programme wie z.B.
bersetzte Assembler- Pogramme geladen werden. Es mu aber
beachtet werden, da das ES51 im Grundmodus das RAM als
kombinierten Daten- und Programmspeicher verwendet. Ein
Download-Programm mu die folgenden Schritte ausfhren:

 1. Erzeugen eines 100ms-Reset-Signals, RTS setzen
 2. Umschaltung ins EPROM, DTR setzen
 3. Reset zurcknehmen, RTS zurcksetzen
 4. 400ms warten
 5. Programmcode ab Adresse 0000h im Binrformat senden
 6. Reset, RTS setzen
 7. Umschaltung ins RAM, DTR zurcksetzen
 8. Reset zurcknehmen, RTS zurcksetzen


Das folgende Programm demonstriert den Download-Vorgang in
Pascal. Die Datenbertragung wurde durch einen Delay-Befehl
verlangsamt, um auch EEPROMs laden zu knnen


Program Download;
Uses DOS, CRT;
const BA : Integer = $02F8;  { $03F8=COM1, $02F8=COM2}
var  Dateiname : String;

procedure Sende (Zeichen :Byte);
begin
  while (Port[BA+5] AND 32) = 0 do;  { Sende-Halteregister leer? }
  Port[BA]:=Zeichen;
end;

function Empfang :Byte;
var  i :Word;
begin
  i:=0;
  while ((Port[BA+5] AND 1)=0) AND (i<10000) DO Inc(i);
  if i < 10000                       { Timeout erreicht? }
  then Empfang := Port[BA]
  else Empfang := 0;
end;

procedure Init;
var  i, Dummy :Byte;
begin
  Port[BA+3]:=128;
  Port[BA+0]:=12; { 12: 9600 Baud, 6 :19200 Baud }
  Port[BA+1]:=0;
  Port[BA+3]:=7;  { 8-Bit, n-Parity, 2 Stopbits }
  Port[BA+1]:=0;  { keine Interrupts }
  Port[BA+4]:=0;  { DTR = 0, RTS = 0}
  for i:= 1 to 3 do
    Dummy:=Port[BA];   { UART leeren }
end;

procedure DTR (An : Boolean);
begin
  If An then Port[BA+4] := (Port[BA+4] OR 1) else
     Port[BA+4] := (Port[BA+4] AND 254);
end;

procedure RTS (An : Boolean);
begin
  If An then Port[BA+4] := (Port[BA+4] OR 2) else
     Port[BA+4] := (Port[BA+4] AND 253);
end;

procedure lade (Dateiname: String);
var f: file of Byte;
    r: Integer;
    code: Byte;
begin
  RTS (true);    {Reset}
  DTR (true);    {ROM aktiv}
  delay (100);
  RTS (false);   {Reset aufheben}
  delay (400); writeln;
  Assign (f, Dateiname);
  {$I-} Reset (f); {$I+}
  r := IOResult;
  if r= 0 then begin
    {$I-}
    while not EoF(f) do begin
      read(f,code);
      Sende(code);
      write ('.');
      delay(20);   {Wartezeit fr EEPROM}
    end;
    Close(f);
    {$I+} writeln;
    r := IOResult;
  end;
  if r <>0 then writeln ('Fehler!') else writeln ('ok');
  RTS (true);   {Reset}
  delay (100);
  DTR (false);  {RAM aktiv}
  delay (100);
  RTS (false);  {Reset aufheben}
end;

begin
  Init;
  if ParamCount > 0 then begin
    Dateiname := ParamStr(1);
    lade (Dateiname);
  end;
end.


Das Programm erwartet Programmcode im Binrformat. Programme
knnen z.B. mit dem Assembler TASM oder mit dem Makrocompiler MC
erstellt werden. Das folgende Beispiel zeigt ein kleines
Assembler-Programm zum Testen des Systems:

; Testprogramm 8051        (TEST.ASM)
#include 8051.H
         .org 0000H

Haupt    mov   a,#00
next     mov   P1,a         ;Portausgabe
         mov   r2,#255      ;Warteschleife
s1       djnz  r2,s1
         inc   a            ;Akku erhhen
         sjmp  next
         .end


Dieses Programm lt sich mit TASM bersetzen und als Binrfile
TEST.OBJ speichern:

     TASM -51 -b TEST.ASM

Die assemblierte Programmdatei TEST.OBJ wird dann mit

     DOWNLOAD TEST.OBJ

in das RAM des ES51 bertragen und gestartet. Die Funktion lt
sich z.B. ber LEDs erkennen, die mit Vorwiderstnden zwischen
Vcc und Port P1 angeschlossen sind. Fr die Programmentwicklung
ist es sinnvoll, einen Testadapter mit acht LEDs herzustellen,
der auf die Pfostenstecker fr Port P1 und Port P3 pat.
Programmablufe lassen sich damit in vielen Fllen direkt
berblicken.




5. BASIC-52

Das ES51 kann auf zwei unterschiedliche Arten als BASIC-System
eingesetzt werden:

  - Betrieb mit einem 8052AH-BASIC von Intel  (J1 setzen)

  - Betrieb mit 80C32 und Interpreter im EPROM (J3 links,
    J2 setzen).

Die zweite Variante hat den Vorteil, da der stromsparende CMOS-
Prozessor 80C32 eingesetzt werden kann. Es mu aber darauf
geachtet werden, da das EPROM bereits den BASIC-Interpreter
enthlt (EPROM ES51EDSB).

Das BASIC-52 kann im Prinzip mit einem beliebigen
Terminalprogramm verwendet werden. Es ist aber zu beachten, da
die Leitung RTS nicht gesetzt sein darf, weil dies einen RESET
auslsen wrde. BASIC-52 stellt sich selbst auf die eingestellte
Baudrate des Terminals ein (z.B. 9600 Baud). Dazu mu der
Anwender als erstes ein Leerzeichen (ASCII 32) senden. Durch
Messung der Impulszeiten bestimmt das BASIC die Baudrate und
sendet dann seine Einschaltmeldung:

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

Nun knnen BASIC-Programme eingegeben und mit RUN gestartet
werden. Zu empfehlen ist die Verwendung des speziellen Editor-
und Terminalprogramms BASEDIT. Es erlaubt bequemes Editieren und
Laden von Programmen.

Die folgende bersicht listet die vorhandenen BASIC-Befehle auf:

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

Das BASIC-52 im EPROM enthlt eine Befehlserweiterung 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





7. Einsatz des Makrocompilers MC

Die Programmierumgebung MC wurde speziell fr die vereinfachte
Programmentwicklung mit Mikrocontrollern entwickelt und enthlt
neben einem vielseitigen Compiler auch einen Editor, Download-
Funtionen, ein Terminalprogramm und einen Speicher-Editor. MC
untersttzt das ES51 mit seinem Download-Protokoll 1, wobei eine
Verzgerungszeit zum Laden von EEPROMs eingestellt werden kann.

MC liefert sehr schnellen und sehr kompakten Code, so da sich
auch zeitkritische Aufgaben lsen lassen. Gegenber Assembler
ergibt sich vor allem eine geringere Einarbeitungszeit und eine
erhebliche Zeitersparnis bei der Entwicklung von Programmen.
Insbesondere sind sehr schnelle Testzyklen mglich, weil
Programme ins RAM geladen und z.B. mit dem integrierten Terminal
in der selben Programmumgebung getestet werden knnen.

Das folgende Programmbeispiel zeigt ein MC51-Programm zum Aufbau
eines Zeitmessers. Das Programm enthalt alle wichtigen Routinen
zur Initialisierung der seriellen Schnittstelle, zum Senden, zum
Empfangen und zum Erzeugen eines genauen Millisekundenrasters
mit dem Delay-Befehl.

;Zeitmessung 1ms ... 65535ms

Procedure Init
Define RI  98h         ;SCON.0
Define TI  99h         ;SCON.1
WrTH1  FAH             ;6 bis berlauf: 9600 Baud
WrTL1  FAH
WrTH0  252             ;942 bis berlauf: ca. 1ms
WrTL0  122
WrTMOD  00100001b      ;Timer1: 8-Bit-Auto-Reload, Timer0: 16 Bit
WrTCON  01010000b      ;beide Timer starten
WrSCON  01010010b      ;InitRS232 (50H + TI)
WrPCON  10000000b      ;80H, SMOD=1
EndProc

Procedure RdCOM
WhileNotBit RI         ;Warten bis RI
EndWhile
ClearBit   RI          ;RI zurcksetzen
RdSBUF
EndProc

Procedure WrCOM
WhileNotBit TI         ;Warten bis letztes Byte gesendet
EndWhile
WrSBUF
EndProc

Procedure Delay        ;0...255ms
  Define TF0  8Dh      ;TCON.5
  Define TR0  8Ch      ;TCON.4
  Define TH0  8Ch
  Define TL0  8Ah
WhileA>0
  WhileNotBit TF0
  EndWhile
  ClearBit  TR0        ;Timer0 stoppen
  ClearBit  TF0
  MovAdr TH0  252      ;922 bis berlauf: ca. 1ms
  MovAdr TL0  112      ;122 - 10 Zyklen Zeitausgleich
  SetBit TR0           ;Timer neu starten
  A-1
EndWhile
EndProc


Procedure starten
A 1
WhileA>0      ;solange P1.0=1
 RdP1         ;P1 lesen
 AND 1        ;P1.0 maskieren
EndWhile      ;Pegelwechsel 1-0
EndProc


Procedure bertrag
RdMem 2       ;Zhler-Highbyte erhhen
A+1
WrMem 2
EndProc

Procedure zeitmessen
A 0
WrMem 1       ;Zhler-Highbyte = 0
WrMem 2       ;Zhler-Lowbyte = 0
starten
A 1
WhileA>0      ;solange P1.1=1
 Delay 1      ;1 ms
 RdMem 1
 A+1
 WrMem 1
 IfA=0 bertrag
 RdP1         ;P1 lesen
 AND 2        ;P1.1 maskieren, Stoptaste
EndWhile      ;Pegelwechsel 1-0: Stop
RdMem 2
WrCOM         ;Highbyte senden
Delay 100
RdMem 1
WrCOM         ;Lowbyte senden
EndProc

Begin
Init
Loop zeitmessen   ;Endlosschleife
End
