ES51 - Anwenderhandbuch


Hersteller: AK MODUL-BUS

Download: ES51.zip (190K) enthält MC51, Basic52 , Beispielprogramme und diesen Text

1. Allgemeine Beschreibung

Das Entwicklungssystem ES51 mit 80C32-Prozessor ist ein vielseitiges System sowohl für die Programmentwicklung für beliebige 8051-Systeme als auch für den direkten Einsatz als universelles Meß- und Steuerungssystem. Programme könne über die serielle Schnittstelle in das RAM des Systems geladen und gestartet werden. Statt eines RAMs kann ein EEPROM bestückt werden, so daß sich Programme permanent bereithalten lassen. Verschiedene Einstellungen über drei Jumper auf der Platine erlauben außerdem den Betrieb als eingenständiger Einplatinen- Computer mit Programmen im EPROM oder im Internen ROM oder EPROM eines 8051- oder 8751-Prozessors. Erweiterungen und Versuchsaufbauten werden druch das Punktraster- Versuchsfeld der Platine erleichtert. Alle freien Portanschlüsse 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
Anschlüsse:      - zwei universelle 8-Bit-Ports
                 - LCD-Anschluß
Software:        - Assembler
                 - Makrocompiler MC
                 - BASIC-52-Interpreter

Der Prozessor 8051 verfügt mit P0.0 bis P0.7 über einen kombinierten Daten- und Adreßbus. Das Adreßlatch 74HC573 trennt unter Steuerung des ALE-Signals die unteren acht Adreßsignale A0 bis A7 ab. Die höheren Adreßleitungen werden vom Port P2 geliefert. Im Normalfall verwalten 8051-Prozessoren völlig getrennte Programm- und Datenspeicher. Das RAM 62256 wird jedoch beim ES51 durch eine Verknüpfung von /PSEN- und /RD- Signal als gemeinsamer Daten- und Programmspeicher verwendet. Dadurch ist es möglich, 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 ausschließlich an das EPROM geleitet, so daß es zum Programmspeicher wird. Hier befindet sich im unteren Adreßbereich die Download-Software zum seriellen Empfangen und Laden von Programmcode in das RAM.

Zusätzlich 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 Möglichkeit, die Adreßleitung A14 zu invertieren. Dadurch wird die obere Hälfte des EPROMs in den Adreßbereich ab Adresse 0000h gelegt, so daß ein zweites Programm im EPROM bereitgehalten werden kann. Dies kann z.B. ein BASIC-52-Interpreter sein.

2. Anschlußbelegungen

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 Anschlußbelegung des 8051 (Pin 1 bis 20), wobei allerdings die Quarzanschlüsse nicht weitergeführt wurden und zusätzlich auch die Betriebsspannung heraus geführt 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 empfängt 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 Verlängerungskabel zu verwenden. Beim Betrieb mit üblichen Terminalprogrammen ist zu beachten, daß RTS und DTR üblicherweise gesetzt werden und damit ein RESET ausgelöst 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

von oben auf eine Steckerleiste im ES51 und von unten auf eine zweireihige Steckerleiste des LCD-Moduls aufgesetzt werden soll, muß jeweils in nebeneinander liegende Leitungen (1/2, 3/4 usw. bis 13/14) aufgetrennt und verdreht werden. Das LCD-Modul kann im gesamten Adreßbereich 8000h bis FFFFh angesprochen werden.

St7: Schraubklemme für die Betriebsspannung

   1 GND
   2 Vcc, +5V stabilisiert

Anmerkung: Das ES51 enthält eine Suppressor-Diode gegen Überspannung und Verpolung. Im Fehlerfall, z.B. bei überhöhter Betriebsspannung, begrenzt diese Schutzdiode die Betriebsspannung auf einen ungefährlichen Wert. Eine andauernde Überlastung führt 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 bestückt 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): Adreßleitung A14 wird invertiert, so
              daß ein Programm in der zweiten Hälfte des EPROMs
              gestartet wird, z.B. ein BASIC-52-Interpreter.

In der Grundeinstellung (J1 und J2 offen, J3 rechts) führt 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 für 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 können 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 führen 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 können 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 durchgeführt 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 Hälfte des Adreßbereichs von 8000h bis FFFFh wird beim ES51 nur für das LCD-Display verwendet. Eine spezielle Steuerleitung liefert in diesem Adreßbereich ein high-Signal für 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 lauffähige Pragramme lassen sich bequem mit dem Makrocomiler MC entwickeln und im System starten. Darüber hinaus können 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 ausführen:

 1. Erzeugen eines 100ms-Reset-Signals, RTS setzen
 2. Umschaltung ins EPROM, DTR setzen
 3. Reset zurücknehmen, RTS zurücksetzen
 4. 400ms warten
 5. Programmcode ab Adresse 0000h im Binärformat senden
 6. Reset, RTS setzen
 7. Umschaltung ins RAM, DTR zurücksetzen
 8. Reset zurücknehmen, RTS zurücksetzen

Das folgende Programm demonstriert den Download-Vorgang in Pascal. Die Datenübertragung wurde durch einen Delay-Befehl verlangsamt, um auch EEPROMs laden zu können

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 für 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 Binärformat. Programme können 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 erhöhen
         sjmp  next
         .end

Dieses Programm läßt sich mit TASM übersetzen und als Binärfile 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 läßt sich z.B. über LEDs erkennen, die mit Vorwiderständen zwischen Vcc und Port P1 angeschlossen sind. Für die Programmentwicklung ist es sinnvoll, einen Testadapter mit acht LEDs herzustellen, der auf die Pfostenstecker für Port P1 und Port P3 paßt. Programmabläufe lassen sich damit in vielen Fällen direkt überblicken.

5. BASIC-52

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

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 enthält (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 auslösen würde. 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 können 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 für 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 für 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 enthält eine Befehlserweiterung zur Ansteuerung eines AD-Wandlers MAX186 und des LCD-Displays. Der Wandler muß extern über Port P3 angeschlossen werden und stellt acht Eingangskanäle mit einer Auflösung 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 enthält einen LCD-Treiber und kennt die zusätzlichen Kommandos LCDINIT und CURSOR. Die Ausgabe erfolgt z.B. durch UO 1 (user output on). Das folgende Beispiel demonstriert die Ausgabe von Meßdaten der Analogausgänge 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 für die vereinfachte Programmentwicklung mit Mikrocontrollern entwickelt und enthält neben einem vielseitigen Compiler auch einen Editor, Download- Funtionen, ein Terminalprogramm und einen Speicher-Editor. MC unterstützt das ES51 mit seinem Download-Protokoll 1, wobei eine Verzögerungszeit zum Laden von EEPROMs eingestellt werden kann.

MC liefert sehr schnellen und sehr kompakten Code, so daß sich auch zeitkritische Aufgaben lösen lassen. Gegenüber Assembler ergibt sich vor allem eine geringere Einarbeitungszeit und eine erhebliche Zeitersparnis bei der Entwicklung von Programmen. Insbesondere sind sehr schnelle Testzyklen möglich, weil Programme ins RAM geladen und z.B. mit dem integrierten Terminal in der selben Programmumgebung getestet werden können.

Das folgende Programmbeispiel zeigt ein MC51-Programm zum Aufbau eines Zeitmessers. Das Programm enthält 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 zurücksetzen
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       ;Zähler-Highbyte erhöhen
A+1
WrMem 2
EndProc

Procedure zeitmessen
A 0
WrMem 1       ;Zähler-Highbyte = 0
WrMem 2       ;Zähler-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