ES48 - Anwenderhandbuch


Hersteller: www.modul-bus.de

Download: ES48.zip (125K) enthält MC48, Beispielprogramme und diesen Text

1. Allgemeine Beschreibung

Das Entwicklungssystem ES48 mit 8748-Prozessor ist ein vielseitiges System sowohl für die Programmentwicklung als auch für den direkten Einsatz als einfa-ches Meß- und Steuerungssystem. Programme können über die serielle Schnitt-stelle in das RAM des Systems geladen und gestartet werden. Statt eines RAMs kann ein EEPROM bestückt werden, so daß sich Programme permanent bereit-halten lassen. Ein Jumper auf der Platine erlaubt außerdem den Betrieb als eigen-ständiger Einchip-Computer mit Programmen im internen EPROM eines 8748- oder 8749-Prozessors. Erweiterungen und Versuchsaufbauten werden durch das Punktraster-Versuchsfeld der Platine erleichtert. Alle freien Portanschlüsse sind über Pfostenstecker erreichbar.

Technische Daten:

Prozessor:       8748, interne Ladesoftware
RAM:             2K, alternativ EPROM oder EEPROM
Taktfrequenz:    6MHz
Baudrate:        9600 Baud
Stromversorgung: 5V, stabilisiert
Stromaufnahme:   ca. 150mA
Anschlüsse:      - zwei universelle 8-Bit-Ports
                 - serielle Schnittstelle
Software:        - Assembler
                 - Makrocompiler MC48

Der Prozessor 8748 verfügt mit DB0 bis DB7 ü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 von der unteren Hälfte des Ports P2 geliefert. Im Normalfall verwalten 8048-Prozessoren völlig getrennte Programm- und Datenspeicher. Das RAM 6116 wird jedoch beim ES48 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 die EA-Leitung hochgesetzt, um den externen Programmspeicher zu verwenden. Durch Umschaltung über Jumper J1 oder durch ein Signal an RTS wird EA jedoch low, so daß das interne Programm des 8748 aktiviert wird. Dies ist die Download-Software zum seriellen Empfangen und Laden von Programmcode in das RAM.

2. Anschlußbelegungen

Kl1: Schraubklemme für die Betriebsspannung

   1 GND
   2 Vcc, +5V stabilisiert

Anmerkung: Das ES48 enthält eine Suppressor-Diode gegen Überspannung und Verpolung. Im Fehlerfall, z.B. bei überhöhter Betriebsspannung, begrenzt diese Schutzdiode die Spannung auf einen ungefährlichen Wert. Eine andauernde Überlastung führt zu einem irreversiblen Kurzschluß in der Diode, die dann ersetzt werden muß.

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

                         NC      1
                                     6     NC
  (ES48 sendet Daten)    RXD     2
                                     7     RTS  (Reset)
  (ES48 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 Terminalprogram-men ist zu beachten, daß RTS und DTR üblicherweise gesetzt werden und damit ein RESET ausgelöst wird.

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

              P10   1   2    P11
              P12   3   4    P13
              P14   5   6    P15
              P16   7   8    P17
              Vcc   9   10   GND

Anmerkung: Port P1 ist als quasi-bidirektionaler Port für Eingänge und Ausgänge verwendbar.

St4: Pfostenstecker 10-polig, Port P2

      (A8)    P20   1   2    P21  (A9)
      (A10)   P22   3   4    P23
              P24   5   6    P25
              P26   7   8    P27  (TXD vom Prozessor)
              Vcc   9   10   GND

Anmerkung: Die Leitungen P20 bis P23 werden vom Prozessor als Adreßleitungen verwendet, können aber parallel einen Portbaustein 8243 ansteuern. P27 ist im normalen Betrieb der serielle Ausgang, darf aber in Programmen ohne serielle Schnittstelle auch direkt angesteuert werden.

St6: Pfostenstecker 20-polig:

          1   P20     (Adreßleitungen und 8243)
          2   P21
          3   P22
          4   P23
          5   PPROG   (Steuerleitung für 8243)
          6   Vcc +5V
          7   P10     (frei)
          8   P11
          9   P12
          10  P13
          11  P14
          12  P15
          13  P16
          14  P17
          15  P24     (frei)
          16  P25
          17  P26
          18  P27     (/TXD)
          19  Vcc +5V
          20  GND

Anmerkung: Die Steckerbelegung entspricht weitgehend der Anschlußbelegung des 8048 (Pin 1 bis 18), wobei allerdings die Pin 19 und 20 mit Vcc und GND belegt wurden.

3. Speichermodi und Prozessoren



Das ES48 kann alternativ zum mitgelieferten Prozessor 8748 mit interner Down-load-Software mit folgenden Prozessoren bestückt werden:

8035/80C35 mit 64 Byte RAM
8039/80C39 mit 128 Byte RAM
8048/80C48 maskenprogrammiert, 64 Byte RAM
8049/80C49 maskenprogrammiert, 128 Byte RAM
8050/80C50 maskenprogrammiert, 256 Byte RAM
8748 EPROM-Version, 64 Byte RAM
8749 EPROM-Version, 128 Byte RAM

Auf dem ES48 befinden sich ein Jumper zur Auswahl des aktiven Programmspeichers:

J1-ROM: geschlossen: Internes ROM aktiv
offen: RAM aktiv (default)

In der Grundeinstellung (J1 offen) führt das ES48 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 Schnitt-stelle kann jedoch die interne Download-Software im EPROM des 8748 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 Pro-grammcode geladen wird, wobei allerdings die Übertragung etwas langsamer er-folgen muß.

Statt eines RAMs 6116 kann ein EEPROM 28C16 oder ein bereits programmiertes EPROM 2716 bestückt werden. Falls das ES48 als festprogrammierter Einplati-nen-Computer mit Programm im EPROM oder EEPROM eingesetzt werden soll, ist es zweckmäßig, den Prozessor 8748 gegen einen stromsparenden CMOS-Prozessor 80C35 oder 80C39 auszutauschen. Ebenfalls verwendbar sind die Typen 80C48 und 80C49.

J1 aktiviert das interne ROM des Prozessors. Das System kann nun z.B. mit einem 8748 oder 8749 mit interner Software verwendet werden. In den meisten Fällen (bei Programmen ohne externe RAM-Zugriffe) können dann das RAM 6116 und das Adreßlatch 74HC573 aus dem Sockel entfernt werden.

Über die serielle Schnittstelle kann vom PC aus die Umschaltung in das interne ROM als Programmspeicher durchgeführt werden. Die Leitung DTR muß dazu gesetzt werden, was dieselbe Wirkung besitzt wie das Setzen von J1. Die Um-schaltung wird benutzt, um das Download-Programm im 8748 zu aktivieren und Programme ins RAM des Systems zu laden. RTS dient dabei als Reset-Eingang.

4. Programme laden

Autonom im ES48 lauffähige Pragramme lassen sich bequem mit dem Makroco-miler MC entwickeln und im System starten. Darüberhinaus können beliebige anders entwickelte Programme wie z.B. übersetzte Assembler- Pogramme geladen werden. Ein Download- Programm muß die folgenden Schritte ausführen:

 1. Erzeugen eines 100ms-Reset-Signals, RTS setzen
 2. Umschaltung ins interne 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 Da-tenü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:

Anfang    mov A,#0       ;Akku mit Null laden
          outl P1,A      ;Ausgabe an Port P1
          call Warte     ;Unterprogramm Warte aufrufen
          mov A,#255     ;Akku mit 255 laden
          outl P1,A      ;Ausgabe an Port P1
          call Warte     ;Unterprogramm Warte aufrufen
          jmp Anfang     ;Rücksprung zum Anfang

Warte     mov R7,#255    ;Register R7 laden
Schl1     mov R6,#255    ;Register R6 laden
Schl2     djnz R6,Schl2  ;innere Zählschleife
          djnz R7,Schl1  ;äußere Zählschleife
          ret            ;Rücksprung vom Unterprogramm
.end

Dieses Programm läßt sich mit dem Shareware-Assembler TASM übersetzen und als Binärfile TEST1.OBJ speichern:

     TASM -48 -b TEST1.ASM

Die assemblierte Programmdatei TEST1.OBJ wird dann mit

     DOWNLOAD TEST1.OBJ

in das RAM des ES48 übertragen und gestartet. Die Funktion läßt sich z.B. über LEDs erkennen, die mit Vorwiderständen zwischen Vcc und Port P1 angeschlos-sen sind. Für die Programmentwicklung ist es sinnvoll, einen Testadapter mit acht LEDs herzustellen, der auf die Pfostenstecker für Port P1 und Port P2 paßt. Pro-grammabläufe lassen sich damit in vielen Fällen direkt überblicken.

5. 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 ES48 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 Pro-grammen. 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 erste Programmbeispiel soll einfache Portausgaben demonstrieren. Hier wird eine genau vorgegebene Anzahl von Einzelimpulsen abgegeben. Da MC48 nur Bytes verarbeitet, müssen mehr als 255 Impulse über geschachtelte Prozeduraufrufe erzeugt werden.

Das zweite Programmbeispiel zeigt ein MC48-Programm zur Ansteuerung eines AD-Wandlers TLC549. Der Wandler wird seriell über folgende Portanschlüsse gesteuert: P24-Clk, P25-Dout, P26-/CS. Zusätzlich enthält dieses Programm ein Runtime-System mit Routinen zur seriellen Datenübertragung und zur Zeitsteue-rung. Die Prozeduren wurden in Assembler geschrieben und über Inline-Kommandos eingebunden.

Nähere Erläuterungen zum ES48 und zahlreiche Anwendungsbeispiele finden sich im folgenden Buch:

B. Kainka, Erfolgreich Messen, Steuern und Regeln mit Mikrocontrollern, 2. Auflage Franzis' 1998