Hersteller: AK MODUL-BUS
Download: ES51.zip (190K) enthält MC51, Basic52 , Beispielprogramme und diesen Text
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.
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
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
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.
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
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