. |
ES51
Download: ES51.zip (190K) enthält MC51, Basic52, Beispielprogramme und diesen Text
Allgemeine Beschreibung
Anschlussbelegungen
Speichermodi
Programme laden
Basic-52
Einsatz des Makrocompilers MC
zum
Shop
|
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
Mess- 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 eigenständiger Einplatinen- Computer mit Programmen im EPROM oder im Internen ROM oder EPROM eines 8051- oder 8751-Prozessors. Erweiterungen und Versuchsaufbauten werden durch 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
Adressbus. Das Adresslatch 74HC573 trennt unter Steuerung des ALE-Signals die unteren acht
Adresssignale A0 bis A7 ab. Die höheren Adressleitungen
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
dass 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
dass es zum Programmspeicher wird. Hier befindet sich im unteren
Adressbereich 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
Adressleitung A14 zu invertieren. Dadurch wird die obere Hälfte des EPROMs in den
Adressbereich ab Adresse 0000h gelegt, so dass ein zweites Programm im EPROM bereitgehalten werden kann. Dies kann z.B. ein BASIC-52-Interpreter sein.
|
Anschlussbelegungen
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
Anschlussbelegung 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,
dass RTS und DTR üblicherweise gesetzt werden und damit ein RESET ausgelöst wird.
St4: Pfostenstecker 14-Polig zum
Anschluss 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,
muss jeweils in nebeneinander liegende Leitungen (1/2, 3/4 usw. bis 13/14) aufgetrennt und verdreht werden. Das LCD-Modul kann im gesamten
Adressbereich 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
Kurzschluss in der Diode, die dann ersetzt werden
muss.
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
|
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): Adressleitung 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
muss 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
Adressbereichs von 8000h bis FFFFh wird beim ES51 nur für das LCD-Display verwendet. Eine spezielle Steuerleitung liefert in diesem
Adressbereich ein high-Signal für jeden Schreib- und Lesezugriff. Ein Standard-LCD-Modul kann an St4 angeschlossen und über folgende
Adressen angesprochen werden:
8000h: Kommandos schreiben
8001h: Daten schreiben
8002h: Bereitschaft lesen
8003h: Daten lesen
|
Programme laden
Autonom im ES51 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- Pogramme geladen werden. Es
muss aber beachtet werden, dass das ES51 im Grundmodus das RAM als kombinierten Daten- und Programmspeicher verwendet. Ein Download-Programm
muss 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ässt
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ä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 P3 paßt. Programmabläufe lassen sich damit in vielen Fällen direkt überblicken. |
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,
dass der stromsparende CMOS- Prozessor 80C32 eingesetzt werden kann. Es
muss aber darauf geachtet werden, dass 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
muss 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
Messdaten 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
|
|
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-
Funktionen, 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
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 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
|
|
|
|
. |