Diplomarbeit
Entstehung
Inhalt
Abkürzungen
Einleitung
Recherche
Konzept
Umgebung
Hardware
Software
Funktionsweise
Zusammenfassung
Anhang
Überblick
MUX-Programm
Dienstroutinen
Datalogic
Mitutoyo
Digitrix
Weiterverarbeitung
Software

6 Software

6.1 Generelles

Die gesamte hier vorgestellte Software wurde vollständig in Motorola 6802-Assembler auf einem MS-Dos-kompatiblen Rechner programmiert. Die Befehle und die Syntax dieses Assemblers werden als bekannt vorausgesetzt (zu diesem Thema gibt es hervorragende Literatur, auf die im Anhang verwiesen wird). Nach der Assemblierung verband ein Linkerprogramm anschliessend die neu erstellten Software-Module mit den schon bestehenden Modulen des Terminalprogramms zusammen, so dass eine lauffähige Programmdatei entstand. Diese Datei enthält das Programm in einem ASCII-Hexadezimalcode. Der Befehl NOP beispielsweise wird durch den hexadezimalen Wert $01 codiert, in der HEX-Datei steht dann ...01... , also die ASCII-Zeichen "0" und "1". Dieses sogenannte SHX-File (da es vom Linker mit der Endung .SHX versehen wird) muss zuletzt noch mit einem kleinen Programm in ein Binärfile umgewandelt werden, in dem dann die Hex-Codes ("01") in die binären Bytewerte umgerechnet werden. Man erhält dann z.B. für NOP ein Byte mit der dezimalen Wertigkeit 1.

Nach dieser Prozedur kann man das fertige Binärfile dann in ein EPROM programmieren. Die EPROMs (maximal drei, für die MUX-Software waren es dann nur zwei) werden dann auf die richtigen Steckplätze auf der MPC 104 gesteckt. Nach dem Einschalten des Systems wird das Pogramm sofort ausgeführt.

Mit dem MC6802 liegt ein 8-Bit-Prozessor vor, der über zwei 8-Bit-breite Akkumulatoren A und B verfügt, in denen die arithmetrischen Rechenoperationen und Bitmanipulationen bzw. Bit-Tests oder Vergleiche vorgenommen werden. Ein 16-Bit-breites Indexregister (X-Register) kann 2-Byte-Adressen aufnehmen und dient als Zeiger auf Speicherbereiche und als Basisadresse für indizierte Adressierung. Für das X-Register existieren keine arithmetrischen Befehle, man kann es nur inkrementieren, dekrementieren und mit 0 vergleichen. Mit 16-Bit-Adressen lässt sich ein Adressbereich von der Adresse $0000 bis $FFFF überstreichen, das sind 64 kByte oder 65536 Bytes. Alle Speicheroperationen sind entweder byte- oder bitorientiert, d.h. es wird immer ein ganzes Byte gelesen oder geschrieben oder ein einzelnes Bit manipuliert.

Ein 16-Bit-breiter Befehlszähler enthält die Adresse der Speicherzelle, die den momentan aktuellen Befehl enthält. Solange man nicht das Programm verzweigt, wird der Befehlszähler nach dem Abarbeiten eines Befehls um die Länge des Befehls erhöht. Bei einem zwei-Byte-Befehl beispielsweise wird der Befehlszähler zweimal inkrementiert. Ein ebenfalls 16-Bit-breiter Stackpointer (Stapelzeiger) dient zum Ablegen von Daten auf einem byteweise orientierten Stack (auch Kellerspeicher genannt). Er zeigt auf die nächstverfügbare Stack-Adresse in einem RAM-Bereich des Hauptspeichers. Das Ablegen und Entnehmen von Daten erfolgt im Stapel immer von unten (push-down/pop-up stack). Der Stack wächst nach unten: Wenn Daten abgelegt werden, erniedrigt sich der Stackpointer zu niedrigeren Adressen.

Der Stack wird eingesetzt zum zwischenzeitlichen "Retten" von Registerinhalten (wenn Register für andere Operationen benötigt werden) und zur Übergabe von Parametern an Unterprogramme. Beim Unterprogrammaufruf mit JSR oder BSR legt der Prozessor den Inhalt des Befehlszählers auf dem Stack ab. Bei einem RTS kehrt der Prozessor an die Stelle zurück, von der der aus das Unterprogramm aufgerufen wurde, indem der Befehlszähler wieder mit dem 16-Bit-Wert, der sich auf dem Stack befindet, geladen wird.

Ein 8-Bit-breites Statusregister zeigt den durch die Befehlsabarbeitung des letzten Befehls aufgetretenen Prozessorstatus an. In den 6 benutzten Bits dieses Registers werden folgende Ergebnisse einer ALU-Operation (Arithmetisch-Logischen Einheit) angezeigt: Negativ (N), Null (Z), Überlauf (V), Übertrag von Bit 7 (C) und halber Übertrag von Bit 3 (H). Man nutzt diese Bits für bedingte Sprunginstruktionen. Bit 4 ist das Maskenbit für Interrupt-(Unterbrechungs-) freigabe. Die nicht benutzten Bits 7 und 8 des Registers sind immer "1".

Für weitergehende Informationen sei auch an dieser Stelle auf einschlägige Literatur verwiesen.

Mit Bitte um Verständnis werden häufig die englischen Fachausdrücke verwandt, auch wenn dafür eventuell deutsche Übersetzungen existieren. Das Wort "Interrupt" beispielsweise ist einfach gebräuchlicher als das deutsche "Unterbrechung". Jedes Fremdwort wird bei der ersten Benutzung erläutert.


6.2 Vorhandene Umgebung

Bisher war -wie schon erwähnt- der Multiplexer in einem eigenen Gehäuse aufgebaut und sendete seine ermittelten Meßdaten über eine RS232-Schnittstelle an das angeschlossene 2090-Terminal. Nun stellte sich bei Brankamp die Frage, ob man nicht einen oder zwei Messkanäle des Multiplexers in dem Gehäuse des Datenterminals 2090 direkt unterbringen könnte und somit für eine komplette Messstation nur ein Gerät benötigt. Viele Kunden brauchen nämlich nicht alle 8 Kanäle, die der Multiplexer maximal verwalten kann, sondern verwenden lediglich ein oder zwei Module. Da der alte Multiplexer aus minimal fünf Euro-Platinen aufgebaut ist, war in der Prozessa 2090/2095 kein Platz mehr zum Einbau des Multiplexers vorhanden.

Das neue Interface vereinigt alle zum Betrieb eines Meßmittelkanals erforderlichen Funktionen auf einer MPC-Bus-kompatiblen Euro-Platine, so dass von der Hardware her ein Einbau in die 2090 möglich wäre. Lediglich die Software musste so geschrieben werden, dass sie sich in das bestehende Terminalprogramm über eine genau definierte Softwareschnittstelle einklinkt.

Genau dies wurde bei dem hier vorligenden Programm verwirklicht. In der Terminalsoftware existiert eine Hauptschleife, in der nur die Terminaltastatur abgefragt wird. Von dort wird bei Tastendruck in Unterprogramme verzweigt, welche nach Ausführung ihrer jeweiligen Aufgaben wieder in die Hauptschleife zurückkehren. Diese Hauptschleife wird im folgenden als Hauptschleife des Terminal-Programms bezeichnet.


6.3 Softwareschnittstelle zur vorhandenen Umgebung

Nach einem Neustart des Gesamt-Programms wird zuerst die Hardware initialisiert. Dabei wird in unterschiedliche Programm-Module gesprungen, welche z.B. die RS232-Schnittstelle zum übergeordneten PC, den Tastaturtreiber, die Video-Karte und die neuen MUX-Interface-Module initialisieren. Anschliessend befindet sich das Terminal-Programm in der oben erwähnten Hauptschleife. Von dort wird das MUX-Programm bei jedem Schleifendurchlauf angesprungen.

Zur Realisierung der Multiplexersoftware wurde ein vollständig neues Softwaremodul erstellt. Die Sprungadressen in externe Module (nachträglich durch den Linker einzubindende Programmteile) werden über Import- und Export-Lables definiert. Ein Lable ist ein Name, den man einer bestimmten Speicherstelle (RAM oder EPROM) gegeben hat, um sie unter diesem Namen leichter ansprechen zu können. Lables, welche von externen Modulen angesprungen werden, müssen exportiert werden, wogegen man Lables, wohin das MUX-Modul springen soll, importieren muss. Insgesamt wurden nur zwei Lables definiert:

Zum Label MUXINIT springt die Terminalsoftware, um den Multiplexerteil der Hardware zu initialisieren (z.B. nach einem Reset) MUXINIT wird über RTS wieder verlassen.

Nach MUX springt die Terminalsoftware, um den Fusstaster (Meßdatenanforderung) oder die Platinen-Auswahl-Taster abzufragen. Falls keiner der Schalter betätigt wurde, passiert nichts, das MUX-Programm kehrt direkt mit RTS zurück. Falls der Fusstaster gedrückt wurde, verzweigt das MUX-Programm in die zum Meßmittel passende Meßmittel-Lese-Routine. Nach dem Einlesen der Daten wird diese per RTS wieder verlassen. Es erfolgt dann der Test, ob ein Platinen-Auswahl-Taster betätigt wurde. Ist dies der Fall, so wird die betreffende Platine zur aktuellen Platine erklärt und die Basisadresse der neuen Platine abgespeichert, so dass sie bei einer eventuellen späteren Datenanforderung verfügbar ist. Anschliessend kehrt das MUX-Programm zur Terminalsoftware mit RTS zurück. Wurde kein Taster gedrückt, erfolgt die Rückkehr zum Hauptprogramm direkt.

Im Terminalprogramm wird dann überprüft, ob Daten neu eingelesen wurden. Ist dies der Fall, so werden diese in einer Bildschirmmaske angezeigt und es wird ein Flag gesetzt, welches signalisiert, dass die Daten gerade angezeigt wurden, so dass neue Daten nur einmal angezeigt werden und erst bei einer erneuten Dateneingabe wieder in die Anzeigeroutine verzweigt wird. Zuletzt setzt das Terminalprogramm seine Ausführung wieder am Anfang der Terminalprogramm-Hauptschleife fort.

Zusammenfassend soll noch einmal ein Überblick über die gesamte Programmstruktur gegeben werden. Links von der gestrichelten Linie befindet sich der im Rahmen der Diplomarbeit erstellte Programmteil, rechts von der Linie die bei Brankamp vorhandene Terminalsoftware. Die Terminalprogramm-Hauptschleife ist dicker gezeichnet, dabei ist der statische Ruhezustand des Gerätes abgebildet, d.h. keine Taste wird gedrückt, kein Fusstaster getreten, die Schleife kreist endlos und fragt laufend die Tastatur, den Meßmittelmodul-Auswahl-Taster und den Fussschalter ab. Der Meßmittelmodul-Auswahl-Taster wird gelegentlich auch Platinen-Auswahl-Taster genannt, da mit ihm eine Interface-Platine (nichts anderes ist ja ein Meßmittelmodul) ausgewählt wird.

© 2001 Marcel Sieling, http://www.powerslider.de
   Ich freue mich immer über nette EMails, die ich gerne beantworte.