                 ES48 - Anwenderhandbuch



1. Allgemeine Beschreibung

Das Entwicklungssystem ES48 mit 8748-Prozessor ist ein
vielseitiges System sowohl fr die Programmentwicklung als auch
fr den direkten Einsatz als einfaches 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. Ein Jumper
auf der Platine erlaubt auerdem den Betrieb als
eingenstndiger Einchip-Computer mit Programmen im internen
EPROM eines 8748- oder 8749-Prozessors. Erweiterungen und
Versuchsaufbauten werden duch das Punktraster-Versuchsfeld der
Platine erleichtert. Alle freien Portanschlsse 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
Anschlsse:      - zwei universelle 8-Bit-Ports
                 - serielle Schnittstelle
Software:        - Assembler
                 - Makrocompiler MC48


Der Prozessor 8748 verfgt mit DB0 bis DB7 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 von der unteren
Hlfte des Ports P2 geliefert. Im Normalfall verwalten
8048-Prozessoren vllig getrennte Programm- und Datenspeicher.
Das RAM 6116 wird jedoch beim ES48 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 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. Anschlubelegungen


Kl1: Schraubklemme fr die Betriebsspannung

   1 GND
   2 Vcc, +5V stabilisiert

Anmerkung: Das ES48 enthlt eine Suppressor-Diode gegen
berspannung und Verpolung. Im Fehlerfall, z.B. bei berhhter
Betriebsspannung, begrenzt diese Schutzdiode die Spannung auf
einen ungefhrlichen Wert. Eine andauernde berlastung fhrt 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 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.


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 fr
Eingnge und Ausgnge 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
Adreleitungen verwendet, knnen 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     (Adreleitungen und 8243)
          2   P21
          3   P22
          4   P23
          5   PPROG   (Steuerleitung fr 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
Anschlubelegung des 8048 (Pin 1 bis 18), wobei allerdings die
Pin 19 und 20 mit Vcc und GND belegt wurden.





4. Speichermodi und Prozessoren

Das ES48 kann alternativ zum mitgelieferten Prozessor 8748 mit interner
Download-Software mit folgenden Prozessoren bestckt 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) fhrt 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 Schnittstelle kann
jedoch die interne Download-Software im EPROM des 8748
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.

Statt eines RAMs 6116 kann ein EEPROM 28C16 oder ein bereits
programmiertes EPROM 2716 bestckt werden. Falls das ES48 als
festprogrammierter Einplatinen-Computer mit Programm im EPROM
oder EEPROM eingesetzt werden soll, ist es zweckmig, 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 Fllen (bei Programmen ohne
externe RAM-Zugriffe) knnen dann das RAM 6116 und das
Adrelatch 74HC573 aus dem Sockel entfernt werden.

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





5. Programme laden

Autonom im ES48 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. Ein Download-
Programm mu die folgenden Schritte ausfhren:

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


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     ;Rcksprung zum Anfang

Warte     mov R7,#255    ;Register R7 laden
Schl1     mov R6,#255    ;Register R6 laden
Schl2     djnz R6,Schl2  ;innere Zhlschleife
          djnz R7,Schl1  ;uere Zhlschleife
          ret            ;Rcksprung vom Unterprogramm
.end



Dieses Programm lt sich mit dem Shareware-Assembler TASM
bersetzen und als Binrfile 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 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 P2 pat.
Programmablufe lassen sich damit in vielen Fllen direkt
berblicken.






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

Procedure pulse
WrP1 255
WrP1 0
EndProc

Procedure 200pulse
Count1 200
Loop1 pulse
Endproc

Procedure 10000pulse
Count2 50
Loop2 200pulse
Endproc

Begin
10000pulse
End


Das zweite Programmbeispiel zeigt ein MC48-Programm zur
Ansteuerung eines AD-Wandlers TLC549. Der Wandler wird seriell
ber folgende Portanschlsse gesteuert: P24-Clk, P25-Dout,
P26-/CS. Zustzlich enthlt dieses Programm ein Runtime-System
mit Routinen zur seriellen Datenbertragung und zur
Zeitsteuerung. Die Prozeduren wurden in Assembler geschrieben
und ber Inline-Kommandos eingebunden.


;Steuerprogramm fr den TLC549
;Runtimesystem fr MC48-Programme

Procedure WrCOM               ;9600 Baud
Inline BA,08,9A,7F,BB,10,EB,0F
Inline 97,67,F6,19,9A,7F,E6,1D
Inline 8A,80,8A,80,BB,0F,EB,1F
Inline EA,11,23,00,23,00,8A,80
Inline BB,01,EB,2B
EndProc

Procedure RdCOM              ;9600 Baud
Inline 86,33,97,E6,2E,BA,19,EA
Inline 35,BB,08,97,86,49,00,A7
Inline 2C,67,2C,BA,0F,EA,43,EB
Inline 39,FC,83,00,97,2C,67,2C
Inline BA,0F,EA,50,EB,39,FC
EndProc

Procedure Delay                 ;A * 1 ms
Inline AD,16,5C,97,E6,57,AE,23
Inline F4,62,23,00,23,00,23,00
Inline 23,00,FE,55,ED,57
EndProc

Procedure BitLesen      ;TLC549 auslesen
RdP2                    ;Bits lesen
AND 00100000b           ;Dout maskieren
ShiftLeft
ShiftLeft               ;zum Bit 7 schieben
+B                      ;zum Mewert addieren
ShiftLeft               ;Bits weiterschieben
WrB                     ;Mewert in B speichern
WrP2 10111111b          ;Taktimpuls an Clk
WrP2 10101111b          ;Clk = 0
EndProc

Procedure messen        ;Abfrage TLC549
WrP2 11101111b          ;/CS = 1
Count8 4
Loop8 Nop               ;Wartezeit > 20s
WrP2 10101111b          ;/CS = 0
B 0                     ;Mewert rcksetzen
Count8 8
Loop8 BitLesen          ;8 Bits lesen
RdB                     ;Mewert lesen
EndProc

Procedure in/out
RdCom                   ;Ausgabewert lesen
WrP1                    ;ber P1 ausgeben
messen                  ;Messung ausfhren
WrCOM                   ;Ergebnis zurcksenden
EndProc

Begin
Loop in/out             ;Endlosschleife
End
