|
6.6 Das MUX-Hauptprogramm
Das MUX-Hauptprogramm beginnt im Quellcode an dem Label MUX. Als erste Operation wird der Stackpointer
(Stapelzeiger) gerettet, d.h. in eine zwei-Byte-Speicherstelle kopiert. Dadurch kann man aus jeder beliebigen Unterprogrammtiefe (verschachtelte JSR-Aufrufe erniedrigen den Stackpointer, da die Returnadressen
-Rücksprungadressen- immer auf dem Stack abgelegt werden) durch ein Restaurieren des Stackpointers den Zustand zum Start des MUX-Hauptprogramms wieder herstellen, falls ein Weiterarbeiten in dem jeweiligen
Unterprogramm z.B. durch das Auftreten eines Fehlers unsinnig geworden sein sollte.
6.6.1 Die Fußtasterabfrage
Nach dem
Retten des Stackpointers erfolgt sofort die Abfrage des Fusstasters. Der Fusstaster belegt im Prototyp noch ein Eingabe-Bit der LED-Monitor-Platine, im Endausbau muss dafür evtl. eine andere Methode gefunden werden.
Wurde der Fusstaster gedrückt, erfolgt der Einsprung in die richtige Meßmittel-Lese-Routine, wurde er nicht gedrückt, geht es weiter mit der ...
6.6.2 Platinenauswahl.
Dabei werden nacheinander alle gesteckten Platinen (Wert in der Kodierschaltertabelle <>$00) abgefragt, ob dort irgendein Platinen-Auswahl-Taster gedrückt wurde. Ist dies der Fall, so wird
die Basisadresse der betreffenden Platine als neue aktuelle Basisadresse eingetragen (PLATADR) und der Softwarecode der betreffenden Platine in der Variable SFTCODE abgelegt. Zuletzt wird die LED an der bisher
benutzten Meßmittel-Modul-Frontplatte aus- und die LED an dem gerade ausgewählten Modul eingeschaltet, so dass der Bediener auch hier wieder sofort die ordnungsgemässe Funktion überprüfen kann. Bei einer erneuten
Datenanforderung wird dann das neuausgewählte Modul zur Meßdatenübertragung angesprochen. Auf diese Weise kann man sehr einfach während des Betriebes das Meßmittelmodul durch einen kurzen Druck auf den
Platinen-Auswahl-Taster wechseln.
(Anmerkung: Der Softwarecode-DIP-Schalter wird nur bei der Auswahl einer Platine abgefragt, danach nicht mehr.)
6.6.3 Einsprung in die Meßmittel-Lese-Routinen
Wurde der Fusstaster zur Datenanforderung gedrückt, so müssen, bevor
die eigentliche Meßmittel-Lese-Routine angesprungen werden kann, einige Vorbereitungen getroffen werden.
Zuerst werden alle Speicherstellen gelöscht, in denen Fehlercodes eingetragen werden, da zu Beginn der
Datenübertragung noch kein Fehler aufgetreten sein kann. Dabei handelt es sich um die Variablen ERROR, in der der Fehlercode des tatsächlich aufgetretenen Fehlers steht und die Variable P_ERROR (possible error), in
der der Fehlercode eines Fehlers steht, der bei der momentan durchgeführten Fehlerprüfung auftreten könnte. Wird der Fehler dann festgestellt, so muss nur der Wert von P_ERROR nach ERROR kopiert werden, was dann von
einer für alle Unterprogramme einheitlichen Fehlerbehandlungsroutine erledigt wird (siehe auch Abschnitt 6.7.1.3).
Dann erfolgt die Initialisierung der Speicherstelle, in der vom Timer bei einer fehlenden
Reaktion des Meßmittels auf die Datenanforderung die Zeit gemessen wird, bis zu der ein Timeoutfehler erzeugt wird. Der Wert 40 in dieser Speicherstelle sorgt für einen Timeoutfehler nach 2 Sekunden (genaueres in
6.7.1.1: Timerprogrammierung).
Nun wird die Startadresse der Meßmittel-Lese-Routine ermittelt. Dazu wird der aktuelle Softwarecode, der in der Variablen SFTCODE steht, zuerst um 1 dekrementiert und dann mit
2 multipliziert. Das hat folgenden Grund: Die Startadressen der Meßmittel-Lese-Routinen stehen in einer Tabelle hintereinander, wo sie pro Adresse 2 Bytes belegen. Der erste Eintrag dieser Tabelle liegt in einem
Speicherplatz mit dem Namen METAB (Meßmittel-Lese-Routinen-Startadressen-Tabelle) und enthält die Startadresse der Meßmittel-Lese-Routine für Schnittstellen mit dem Softwarecode $01. Man kann nun den Tabellenplatz,
der die Startadresse eines bestimmten Meßmittel-Lese-Programms enthält, nach folgender Formel berechnen:
Adresse, in der die Lese-Routinenadresse steht = Tabellenstartadresse+((Softwarecode-1)*2)
Man
muss nun den erhaltenen Wert (bei SFTCODE=1 ergibt sich eine 0, bei SFTCODE=2 eine 2, bei SFTCODE=3 eine 4 usw.) zu METAB (Startadresse der Meßmitteltabelle) hinzuaddieren und erhält die Tabellen-Adresse, in der die
Startadresse der richtigen Meßmittel-Lese-Routine steht. Als kleines Problem kommt hinzu, dass sowohl die Multiplikation von SFTCODE mit 2 als auch die Addition zu der Tabellenstartadresse METAB 16-Bit-Berechnungen
sein müssen, da einerseits SFTCODE von 1..255 gehen kann (und 2*255 einen 17-Bit Wert ergibt) und andererseits Berechnungen von Adressen (METAB+((SFTCODE-1)*2)) grundsätzlich mit allen 16 Bits erfolgen müssen, da
METAB als beliebige Adresse im Adressbereich immer 16-Bit-breit ist.
Nachdem die Adresse so ermittelt wurde, kann in die Meßmittel-Lese-Routine gesprungen werden, wo dann die Meßmittelspezifischen
Programmteile zum Lesen der Meßdaten untergebracht sind.
Hier das Ablaufdiagramm zum MUX-Hauptprogramm:
 |
Abb. 24: Ablaufdiagramm des MUX-Hauptprogramms |