. |
ES48
Download: ES48.zip (125K) enthält MC48.EXE, Beispielprogramme und diesen Text
Allgemeine Beschreibung
Anschlussbelegungen
Speichermodi und Prozessoren
Programme laden
Einsatz des Makrocompilers ES48.EXE
zum
Shop
|
Allgemeine Beschreibung
Das Entwicklungssystem ES48 mit 8748-Prozessor ist ein vielseitiges System sowohl für die Programm- entwicklung als auch für den direkten Einsatz als einfaches Mess- und Steuerungssystem. Programme können über die serielle Schnittstelle in das RAM des Systems geladen und gestartet werden. Statt eines RAMs kann ein EEPROM bestückt werden, so dass sich Programme permanent bereithalten lassen. Ein Jumper auf der Platine erlaubt außerdem den Betrieb als eigenstä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 Adressbus. Das Adresslatch 74HC573 trennt unter Steuerung des ALE-Signals die unteren acht Adresssignale A0 bis A7 ab. Die höheren Adressleitungen 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 dass das interne Programm des 8748 aktiviert wird. Dies ist die Download-Software zum seriellen Empfangen und Laden von Programmcode in das RAM. |
Anschlussbelegungen
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
Kurzschluss in der Diode, die dann ersetzt werden muss.
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
Terminalprogrammen ist zu beachten, dass 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
Adressleitungen 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 (Adressleitungen 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
Anschlussbelegung des 8048 (Pin 1 bis 18), wobei allerdings die Pin 19 und 20 mit Vcc und GND belegt wurden. |
Speichermodi und Prozessoren
Das ES48 kann alternativ zum mitgelieferten Prozessor 8748 mit interner
Download-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 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 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ß.
Statt eines RAMs 6116 kann ein EEPROM 28C16 oder ein bereits programmiertes EPROM 2716 bestückt werden. Falls das ES48 als festprogrammierter Einplatinen-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 Adresslatch 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
muss 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. |
Programme laden
Autonom im ES48 lauffähige Pragramme lassen sich bequem mit dem
Makrocompiler MC entwickeln und im System starten. Darüber hinaus können beliebige anders entwickelte Programme wie z.B. übersetzte Assembler- Programme geladen werden. Ein Download- Programm
muss 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 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:
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ässt
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ässt 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 P2
passt. Programmabläufe lassen sich damit in vielen Fällen direkt überblicken. |
Die Programmierumgebung MC wurde speziell für die vereinfachte Programmentwicklung mit Mikrocontrollern entwickelt und enthält neben einem vielseitigen Compiler auch einen Editor, Download-
Funktionen, 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
dass 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 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.
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 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 Zeitsteuerung. Die Prozeduren wurden in Assembler geschrieben und über Inline-Kommandos eingebunden.
;Steuerprogramm für den TLC549
;Runtimesystem für 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 Messwert addieren
ShiftLeft ;Bits weiterschieben
WrB ;Messwert 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 > 20µs
WrP2 10101111b ;/CS = 0
B 0 ;Messwert rücksetzen
Count8 8
Loop8 BitLesen ;8 Bits lesen
RdB ;Messwert lesen
EndProc
Procedure in/out
RdCom ;Ausgabewert lesen
WrP1 ;über P1 ausgeben
messen ;Messung ausführen
WrCOM ;Ergebnis zurücksenden
EndProc
Begin
Loop in/out ;Endlosschleife
End
|
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 |
|
|
. |