Das Entwicklungssystem ES537 mit 80C537-Prozessor ist ein vielseitiges System sowohl für die Programmentwicklung als auch für den direkten Einsatz als universelles Meß- und Steuerungssystem. Neben der Möglichkeit, Programme über die serielle Schnittstelle in das RAM des Systems zu laden und zu starten, gibt es zahlreiche Di-ektkommandos, die einen Einsatz als Meß- und Steuerungs-Interface ermöglichen, das vom PC aus einer Hoch-sprache heraus verwendet werden kann. Zusätzlich läuft das System mit einem angepaßten BASIC52-Interpreter.
Die Mikrocontrollerplatine ist identisch mit dem 80C537-TFH Board und wurde entwickelt an der Fachhochschule der DMT in Bochum. Es wurde beschrieben in Elektor 6/87 [P.Groppe, 80C537-Einplatinencomputer] und in einem Buch im Elektor-Verlag [B.v.Berg/P.Groppe, Das 8051er-Lehrbuch]. Die Autoren gehen dabei besonders auf den Einsatz des Systems mit dem Nili-Pascalcompiler ein.
Das ES537-Betriebssystem ist weitgehend indentisch mit dem ES535-System, wie es in [B.Kainka, Erfolreich Messen, Steuern, Regeln mit Mikrocontrollern, Franzis-Verlag, 2, 1998] beschrieben wurde. Das System erlaubt zum einen den direkten Zugriff auf alle Ports und die Hardware-Register des Mikrocontrollers aus Hochsprachen heraus. Zum anderen ist es für den Einsatz des Makrocompilers MC537 ausgelegt. Die Vollversion des Makrocomilers MC wurde entsprechend erweitert.
Zusätzlich wurde der BASIC-52 Interpreter an das System angepaßt. Er steht nun in Form eines EPROMs BASIC-537 und eines zugehörigen Editorprogramms zur Verfügung.
Technische Daten: Prozessor: 80C537 RAM: 32K ... 64 k EPROM: 32K Taktfrequenz: 12MHz Baudrate: 9600 Baud Stromversorgung: 5V, stabilisiert Stromaufnahme: ca. 70mA Anschlüsse: VG-Leiste mit allen Ports und Systembus für den Einsatz in 19-Zoll-Einschubgehäusen. - 12 analoge Eingänge 8/10 Bit (DB15-Buchse) - RS232 (DB9-Buchse) Software: - Assembler - Makrocompiler MC - Pascal- und C-Compiler einsetzbar - BASIC-52-Interpreter
Der Prozessor 80C537 ist weitgehend kompatibel zur 8051-Familie und verfügt mit P0.0 bis P0.7 über einen kom-binierten Daten- und Adreßbus. Das Adreßlatch 74HC373 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 ver-walten 80537-Prozessoren völlig getrennte Programm- und Datenspeicher.Ein RAM 62256 wird jedoch beim ES535 durch eine Verknüpfung von /PSEN- und /RD-Signal im GAL 20V8 als gemeinsamer Daten- und Pro-grammspeicher verwendet. Dadurch ist es möglich, Programme ins RAM zu laden und zu starten. Im Monitor-Modus des Systems ist das EPROM 27256 (TFH-System oder ES537-System) als Programmspeicher aktiv, wobei das RAM als Daten- und Programmspeicher im Adreßbereich 0000h bis 7FFFh fungiert. Programme können ins RAM geladen und dort gestartet werden. Anders als beim ES537 ist ein Reset vom PC aus nicht möglich, sondern es muß ein Reset-Schalter betätigt werden, bevor ein neues Programm geladen werden kann.
Alle Anschlüsse werden ausführlich im Manual zum TFH-Board aufgelistet. Für die ersten Versuche wird der Ein-satz des Starterboards empfohlen. Es enthält einen 5V-Spannungsregler und kann mit einem einfachen Stecker-netzteil (9V...12V) arbeiten. Für einfache Versuche sind vier vollständige Prozessorports (P1, P4, P5 und P6) her-ausgeführt und über Schraubklemmen zugänglich.
Im Auslieferungszustand sind die folgenden Jumper gesetzt und können als Grundeinstelung angesehen werden:
J2: offen (Watchdog MAX691 nicht aktiv) J3 geschlossen (Analoge Masse an GND) J4 geschlossen (Prozesor-Watchdog aktiv, wenn per Programm eingeschaltet) J5 geschlossen (Power-Down-Modi erlaubt) J6 offen (keine Interrupts durch Echtzeituhr) J7 1-2 (Prozessorversion 80C537-N) J8 geschlossen (AD-Referenz an +5V)
Das Jumperfeld Jumper 1 besitzt sechs Kontakte, die je nach Betriebssystem und Modus gesetzt werden müssen:
J1A-J1B: Monitorbetrieb für das TFH-Syszem und das ES537-System. In beiden Fällen enthält IC3 das Betriebssystem im EPROM. Es läuft bei 8000h und lädt Programme ab 0000h in ein RAM im Sockel IC2. Das RAM dient als kombinierter Programm- und Datenspeicher. J1A-J1C: Stand-Alone-Modus für eigene Programme und für BASIC-537. IC2 enthält das EPROM (z.B. BASIC537) und bildet den Programmspeicher ab 0000h. IC4 enthält ein RAM als reinen Datenspeicher ab 0000h.
Im Monitor-Betrieb wird das Betriebssystem durch das GAL des Systems beim Start automatisch auf den Adreßbe-reich ab 8000h hochgeschaltet. Der Adreßbereich ab 0000h kann mit eigenen Programmen im RAM belegt werden. Die einfache Download-Möglichkeit erleichtert die Programmentwicklung mit unterschiedlichen Programmiersy-stemen. Programme im RAM dürfen Systemroutinen im EPROM oberhalb 8000h aufrufen. Diese Möglichkeit wird vom Makrocompiler MC genutzt.
Monitor-Modus: Programmspeicher Datenspeicher I/O-Bereich --------------------------------------------------- RAM IC2 0...32K ---------------------------------------------------- EPROM RAM IC5 32K...64K 32K...64K FE00h...FFFFh ----------------------------------------------------
Der Stand-Alone-Modus entsricht der klassischen Konfiguration für 8051-Controller mit getrenntem Daten- und Adreßraum ab 0000h. Dieses Speichermodell wird auch vom BASIC535-Interpreter verwendet.
Stand-Alone-Modus: Programmspeicher Datenspeicher I/O-Bereich --------------------------------------------------- EPROM IC2 RAM IC4 0...32K 0...32K ---------------------------------------------------- RAM IC5 32K...64K FE00h...FFFFh ----------------------------------------------------
Der I/O-Bereich für externe Bus-Erweiterungen liegt in allen Betriebsmodi bei 8000h bis FFFFh. In diesem Bereich kann z.B. ein externer Datenspeicher liegen, der Über die Adreßleitunge, die Datenleitungen und die /WR- und /RD-Leitungen angesprochen wird.
Das ES537 verfügt über ein eigenes Betriebssystem im EPROM, um sowohl direkte Interface-Funktionen ausführen zu können als auch Programme zu laden und auszuführen. Alle Betriebskommandos bestehen aus einzelnen Bytes, die über die serielle Schnittstelle übertragen werden.
Senden Empfangen Funktion ----------------------------------------------------------- Portausgaben: 10h, Byte Ausgabe Port 1 11h, Byte Ausgabe Port 3 12h, Byte Ausgabe Port 4 13h, Byte Ausgabe Port 5 Porteingaben: 20h Byte Lesen Port 1 21h Byte Lesen Port 3 22h Byte Lesen Port 4 23h Byte Lesen Port 5 24h Byte Lesen Port 6 Analogeingaben, 8 Bit (nur AD0...AD7): 30h Byte Messen Kanal 0 31h Byte Messen Kanal 1 ... 37h Byte Messen Kanal 7 Analogeingaben, 10 Bit(nur AD0...AD7): 38h Highbyte Messen Kanal 1 1 Lowbyte ... 3Fh Highbyte Messen Kanal 1 1 Lowbyte Analogausgaben, externer Wandler MAX505 an P3/P4 40h Byte Analogausgabe Kanal 0 ... 43h Byte Analogausgabe Kanal 3 reserviert für Timer-Funktionen: 50 Speicherzugriffe: 60h HiAdr, LoAdr Code laden 1 1, Byte 1. Byte 1 1, Byte 2. Byte ... 1 0 Ende 61h HiAdr, LoAdr Programmstart 62h HiAdr, LoAdr, Byte RAM-Adresse beschreiben 63h HiAdr, LoAdr Byte RAM-Adresse auslesen 64h Adr, Byte Register beschreiben 65h Adr Byte Register auslesen 66h SFR, Byte SFR beschreiben 67h SFR Byte SFR auslesen 68h HiAdr, LoAdr Speicherbereich auslesen 1 Byte 1. Byte 1 Byte 2. Byte ... 0 Ende
Die Interface-Kommandos des Systems können z.B. mit einer Prozeßsprache oder Spracherweiterung in einer Hochsprache genutzt werden. Dies erleichtert die Programmentwicklung auf dem PC, wenn es um nicht-zeitkritische Aufgaben geht. Das folgende Programm zeigt ein einfaches Lauflicht in Pascal.
Program aLuflicht_ES537; Uses DOS, CRT, COM2_96; procedure Port1Aus (Datum: Byte); begin sende ($10); sende (Datum); end; procedure Lauflicht var n: Integer; begin n := 1; for n:= 1 to 8 do begin Port1Aus (low(n)); N := N * 2; end; for n := 1 to 6 do begin N := N div 2; Port1Aus (low(n)); end; end begin repeat Lauflicht until KeyPressed; end.
Analogausgaben (Kommandos 40h...43h) setzen einen extern angeschlossenen DA-Wandler vom Typ MAX505 voraus. Der Wandler ist Bus-orientiert und wird hier über Prozessorports angesteuert, so daß er leicht an St1 ange-schlossen un dauf dem Punktrasterfeld untergebracht werden kann. Dabei erfolgt die Ausgabe von acht parallelen Datenbits über Port P4. Zusätzliche sind drei Steuerleitungen über Port P3 bereitzustellen: P3.2-A0, P3.3-A1, P3.4-/WR. Es gibt zahlreiche ähnliche DA-Wandler, die entsprechend angeschlossen werden können. So ist z.B. der Einkanal- Wandler ZN426 einsetzbar, der ohne die Steuersignale von Port P3 auskommt.
Autonom im ES537 lauffähige Pragramme lassen sich bequem mit dem Makrocomiler MC entwickeln und in ei-nem frei wählbaren Modus des Systems starten. Darüber hinaus können beliebige anders entwickelte Programme wie z.B. übersetzte Assembler-Pogramme oder compilierte C-Programme geladen werden. Vor jedem Download muß der RESET-Taster des Systems betätigt werden.
Program Load_Modus_1; Uses DOS, CRT, COM2_96; var Dateiname : String; procedure Download (Adresse: Word; Dateiname: String); var f: file of Byte; r: Integer; code, Dummy: Byte; begin Assign (f, Dateiname); {$I-} Reset (f); {$I+} r := IOResult; if r= 0 then begin {$I-} Sende ($60); Sende (hi(Adresse)); Sende (Lo(Adresse)); while not EoF(f) do begin Dummy := Empfang; Sende (1); read(f,code); Sende(code); end; Sende (0); Close(f); {$I+} end; end; procedure ProgrammStart (Adresse: Word); begin Sende ($61); sende (Hi(Adresse)); Sende (Lo(Adresse)); end; procedure RAMschreiben (Adresse: Word; Code: Byte); begin Sende ($62); Sende (Hi(Adresse)); Sende (Lo(Adresse)); Sende (Code); end; procedure lade (Dateiname: String); begin DownLoad ($0000,Dateiname); ProgrammStart ($0000); 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. Auch der 8051-Pascal-Compiler NiliPas wurde erfolgreich eingesetzt.
Da ES537verfügt über einen angepaßten BASIC-52-Interpreter im EPROM. Zum Starten den Interpreters mußder Stand-Alone-Modus gewählt werden.
Anders als das originale BASIC-52 wartet das System nicht auf ein erstes Zeichen vom Terminal, sondern sendet nach kurzer Initialisierung mit 9600 Baud seine Einschaltmeldung:
MCS-51 BASIC V1.1 / ES537
Nun lassen sich mit einem beliebigen Terminal BASIC-Programme eingeben und starten. Zu empfehlen ist die Verwendung des speziellen Editor- und Terminalprogramms BASEDIT. Beim Start wird automatisch die Um-schaltung in den Modus 3 durchgeführt. Außerdem erlaubt das Programm ein einfaches Editieren und Laden von Programmen.
Das angepaßte BASIC-52 hat folgende Eigenschaften:
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-Operatoren und Systemvariablen: CBY() DBY() XBY() GET IE IP PORT1 PCON RCAP2 T2CON TCON TMOD TIME TIMER0 TIMER1 TIMER2 PI XTAL MTOP LEN FREE AD (Kanal) (nur Lesen) C = AD (0) Analogeingabe (0..5V) am Eingang AD0 C = AD (11) Analogeingabe (0... 5V) am Eingang AD11 DAPR (nur Schreiben) DAPR = 128 Umschalten des Meßbereichs auf 2,5 V SFR (nur Lesen) print SFR (90H) Lesen von Spezialfunktionsregistern WrSFR (nur Schreiben) WrSFR 90H,255 Beschreiben von Spezialfunktionsregistern
Die Meßbereiche der zwölf möglichen Analogeingänge betragen 0 bis 5 V. Die Meßbereiche lassen sich jedoch mit Hilfe des Befehls DAPR in weiten Grenzen verändern, wie weiter unten noch gezeigt wird.
Für jede Messung kann der Meßbereich in weiten Grenzen eingestellt werden, wobei jeweils eine untere und eine obere Grenze durch einen 4-Bit-Parameter festgelegt sind, die zusammen einen Byte-Parameter bilden. Bit 0...3 legt die untere Grenze als Vielfaches von 5V/16 fest, Bit 4...7 ebenso die obere Grenze. Beide Referenzspannungen müssen einen Mindestabstand von 1,25V einhalten. Beispiel: 84h bewirkt den Meßbereich 1,25V-2,5V. Ausnahme: 00h=0.5V. Die eingegebenen Meßbereiche ersetzen die Standardbereiche von 5V, 5V, 2,5V und 2,5V.
10 REM Spannungsmessung an Kanal 0 (A) und 1 (B) 20 U1=(AD(0))/50 30 U2=(AD(1))/50 40 PRINT U1,U2 50 FOR I=1 TO 200 : NEXT I 60 GOTO 20
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 Terminal-programm und einen Speicher-Editor. MC unterstützt das ES537, so daß sich leicht Programme für eigene 80537-Systeme entwickeln lassen. Auch die Programmentwicklung für 8051-Controller kann mit dem ES537 und MC erfolgen.
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 die schnelle Erfassung von 20000 analogen Meßwerten in zwei Sekunden. Die Messung startet nach einer Triggerung durch Überschreiten einer Triggerschwelle. Die Daten lassen sich nach der Messung aus dem RAM des Systems auslesen (Datenbereich ab 0800h) und verarbeiten.
; Einkanal-Datenlogger Procedure messen RdAnalog 0 ;8-Bit-Messung WrRAM ;speichern delay 1 ;0,1ms Zeitraster EndProc Procedure 250messungen Count2 250 Loop2 messen EndProc Procedure triggern ResetRAM NotDone B 128 ;Triggerlever WhileNotDone RdAnalog 0 IfA>=B Done ;positive Trggerflanke EndWhile Count1 80 ;20000 Meßpunkte Loop1 250messungen ; 80 * 250 EndProc Begin triggern End