Einführung Datenverarbeitungssysteme


von Prof. Jürgen Plate

6. Leitwerk

Das Rechenwerk verarbeitet Daten(-worte) aus dem Speicher - das Leitwerk verarbeitet Befehle (Befehlsworte) Befehlsprozessor. Das Leitwerk wird auch als Steuerwerk bezeichnet. Das Leitwerk hat folgende Aufgaben:

Diese Kommunikation erfordert Steuer- und Meldeleitungen:

Von der Funktion her ist das Leitwerk in eine Reihe von Unterwerken zu gliedern: Einige Komponenten des Leitwerks haben Sie bereits bei der Betrachtung des Befehlszyklus und der Adressierungsarten kennen gelernt: Befehlszähler und Befehlsregister bilden das Befehlswerk, das den Ablauf des Befehlszyklus festlegt:
  1. Befehlshol-Phase:
    <PC> = Adr. des zu holenden Befehls
    PC = <PC> + 1
  2. Befehlsausführungs-Phase:
    <IR> = auszuführende (geholter) Befehl
    Das Instruktionsregister (IR) wird unterteilt in Operandenregister (OR) und Adre&Szlig;register (AR). Das OR nimmt den Befehlscode auf (was zu tun ist) und das AR die Adresse des Operanden (womit ist es zu tun).
    <OR> Befehlsdecoder Ablaufsteuerung
    <AR> Adreßrechnung (Ermitteln effektiver Adresse)
Das Befehlswerk legt fest, welcher Befehl als nächster zu holen ist und nimmt ihn zur Verarbeitung auf. Gesteuert wird das Befehlswerk und die Ausführung des Befehls durch die Ablaufsteuerung.

6.1 Ablaufsteuerung und Befehlsdecoder

Sie ist das Herz des Leitwerks: Erzeugung aller in den übrigen Unterwerken des Leitwerks benötigten Steuersignale. Die Gesamtheit der Steuersignale bildet ein Steuerwort, das in einzelne Felder unterschiedlicher Länge aufgeteilt wird. Jedes Feld enthält die Steuersignale für eine bestimmte Einheit der CPU (z.B. ALU). Durch das Steuerwort werden die bei jedem Taktzyklus in den einzelnen Werken/Unterwerken auszuführenden Teiloperationen bestimmt. Zu jedem Taktzyklus muss ein neues Steuerwort erzeugt werden.

Dabei kann jedes Steuerwort vom vorhergehenden Steuerwort und von äußeren Bedingungen abhängen. Die äußeren Bedingungen können z.B. der Op-Code und/oder Modifikatorteil des auszuführenden Befehls oder Status-Signale sein Ablaufsteuerung ist synchrones Schaltwerk.

Die Anzahl der Taktzyklen zur Ausführung eines Befehls hängt vom jeweiligen Befehl ab (ca. 1 ... 170 Taktzyklen). CPUs haben typisch 50 bis einige 100 Befehle Ablaufsteuerung hat dann 500 bis einige 1000 verschiedene Steuerworte. Daher erfolgt heute bei CISC die Realisierung als mikroprogrammiertes Schaltwerk. Die einzelnen Steuerworte stehen dann in einem Festwertspeicher (ROM) - siehe Umdruck. Die Auswahl eines bestimmten Steuerworts erfolgt durch Anlegen seiner Adresse. Das adressierte Steuerwort wird aus dem Speicher ausgelesen und die einzelnen Steuersignale über direkte Leitungen auf die Steuereingänge der entsprechenden Werke geschaltet. Die Auswahl des nächsten Steuerwortes erfolgt dann durch Auswahl der Folgeadresse Sequencer.

Normalfall: Sequentielle (lineare) Folge von Steuerworten im Mikroprogrammspeicher.

Die Folgeadresse kann von der linearen Folge abweichen, wenn z. B.:

Jedes Steuerwort wird um einen Folgeadressteil (Adressauswahlfeld und Sprungadressfeld) erweitert. Ein derart ergänztes Steuerwort heißt Mikrobefehl. Die für die Durchführung eines bestimmten CPU-Befehls erforderliche Folge von Mikrobefehlen heißt Mikroprogramm. In diesem Zusammenhang wird der CPU-Befehl manchmal auch Makrobefehl genannt. Für die Realisierung der Adressbestimmung existieren eine Reihe unterschiedlicher Konzepte. An dieser Stelle soll beispielhaft nur ein relativ einfaches Konzept vorgestellt werden. Die Startadresse jedes Mikroprogramms wird durch den Op-Code des entsprechenden CPU-Befehls festgelegt. Da die Startadressen der einzelnen Mikroprogramme weiter auseinander liegen, wird ein Zuordnungsspeicher (Mapping ROM) zwischengeschaltet.

Die jeweils nächste Adresse kann dann bestimmt werden durch:

Zum Beispiel kann das Vorliegen einer Programmunterbrechung (bzw. PU-Anforderung) durch die Abfrage eines Status-Signals überprüft werden. Am Ende der Befehls-Ausführungsphase muss ein entsprechender Mikrobefehl stehen. Der letzte Mikrobefehl jedes CPU-Befehlszyklus muss ein unbedingter Sprung in die Mikrobefehls-Sequenz der Befehls-Holphase sein.

Charakteristisch für Mikroprogrammspeicher ist die relativ geringe "Programmlänge" für die Bearbeitung eines CPU-Befehls (typisch ca. 500 bis 2000 Mikrobefehle) und die große Wortbreite (typisch 32 .. 128 Bit, bei IBM-Großrechnern mehrere 100 Bit).

Im allgemeinen ist bei heutigen Rechnern die Ablaufsteuerung für den Benutzer unzugänglich und kann auch nicht geändert werden. Es gibt jedoch Prozessoren (z.B. Bit-Slice-P. AM 29xx-Serie) und CPUs, bei denen der Benutzer die vorhandenen Mikroprogramme selbst erstellen oder ergänzen kann speziell angepasste Maschinenbefehle effektivere Programmierung und Einsatz des Rechners "Wunsch-CPU". Durch Verwendung von speziellen IC-Bausteinen wäre sogar eine CPU denkbar, die während der Abarbeitung eines Programms die CPU-Befehlsliste ändern kann.

Bei RISC-Prozessoren wird zur schnelleren Ablaufsteuerung ein anderer Weg beschritten. Hier besteht die Ablaufsteuerung aus einer fest verdrahteten Logik. Zusammen mit einer passenden Architektur der übrigen Werke gelangt man so zu Prozessoren, die einen Befehl innerhalb eines Taktzyklusses ausführen können.

6.2 Unterbrechungs-Behandlung

Die Komponenten des Leitwerks, die der Unterbrechungs-Behandlung dienen, werden als Unterbrechungswerk bezeichnet (Unterbrechung = Interrupt).

Aufgabe des Unterbrechungs-Werks:

Die eigentliche Durchführung der PU wird in der Regel von der Ablaufsteuerung durchgeführt. Die PU-Anforderung (interrupt request, IRQ) kommt auf einer oder mehreren Leitungen an die CPU.

Einfachster Fall ist eine einzige IRQ-Leitung. Diese führt auf ein Flipflop, das durch die IRQ-Anforderung gesetzt wird. Nach Annahme der PU durch die Ablaufsteuerung wird das FF durch die Ablaufsteuerung zurückgesetzt.

Häufig ist es sinnvoll, die sofortige Ausführung einer Unterbrechung zu verhindern (u. a. dann, wenn gerade eine Routine zur PU-Behandlung abläuft).Die PU-Anforderung wird gesperrt (interrupt disable) maskierbarer Interrupt. Nur, wenn das Masken-FF gesetzt ist, führt eine PU-Anforderung auch zu einer PU-Anmeldung (d.h. die PU wird akzeptiert). Das Masken-FF kann per Software gesetzt oder gelöscht werden.

Als Reaktion auf eine PU erfolgt:

Nach Ende der ISR wird der ursprüngliche Zustandsvektor wieder vom Stack geholt und das Programm an der Unterbrechungsstelle fortgesetzt. Während des Rettens des Programmzustands und des anschließenden Ladens des Zustandsvektors der ISR darf keine neue Unterbrechungsanforderung auftreten (Zustandsinformation unvollständig!).

Fast immer gibt es mehrere Quellen für PU-Anforderungen. Viele CPUs besitzen mehrere IRQ-Eingänge (aber man kann über zusätzlichen HW-Aufwand auch bei einem einzigen IRQ-Eingang mehrere PU-Quellen bedienen). Die Freigabe der einzelnen IRQ-Eingänge erfolgt über ein spezielles Register, das IRQ-Masken-Register (dem Masken-FF entsprechend). Das Masken-Register kann wieder per SW geladen werden. Neben den maskierbaren IRQ-Eingängen gibt es meist auch nicht-maskierbare IRQ-Eingänge (NMI, RESET). NMI kann z.B. verwendet werden, um Ausfall der Versorgungsspannung zu signalisieren (Nothalt und Datensicherung bei Prozesssteuerung).

Wenn mehr PU-Quellen als IRQ-Eingänge vorhanden sind, müssen mehrere PU-Anforderungen mittels zusätzliche Hardware zusammengefasst werden, z. B. über ODER-Verknüpfung (bei 0-aktiven PU-Anforderungen über NAND). Daraus ergibt sich das Problem, dass die ISR (Interrupt Service Routine) zunächst die jeweilige Quelle identifizieren muss, da in der Regel auf unterschiedliche PU-Quellen vom Programm aus auch unterschiedlich reagiert werden muss. Die Identifizierung der Quelle ist auch notwendig, um das entsprechende IRQ-Flipflop beim Interrupt-Verursacher zurücksetzen zu können. Für die Identifizierung der PU-Quelle gibt es folgende Methoden:

Sind mehrere PU-Quellen an einem IRQ-Eingang angeschlossen, ist es häufig zweckmäßig, zwischen wichtigen und weniger wichtigen PU-Quellen zu unterscheiden prioritätsgesteuertes Interrupt-System. Die einfachste Form der Realisierung einer Prioritäts-Steuerung ist die Vorrang-Kette (daisy-chain = "Gänseblümchen-Kette"). Das von der Ablaufsteuerung kommende Quittungssignal gelangt über die UND-Gatter nur bis zu der PU-Quelle mit höchster Priorität. Nur von dieser wird dann der Identifikations-Code ausgesendet und das PU-Anforderungs-FF zurückgesetzt. Die Prioritätsreihenfolge ist durch die Verschaltung der Quittungsleitungen festgelegt "geographische Priorität".

Das Retten des aktuellen Programmzustands des unterbrochenen Programms geschieht häufig in einem Kellerspeicher (Stack), der i. a. Teil des Arbeitsspeichers ist, wobei der Top of Stack über ein spezielles Register (Stackpointer) des Leitwerks adressiert wird beliebig geschachtelte Programmunterbrechungen sind möglich.

Während des Rettens des Programmzustands und des anschließenden Ladens des Zustandsvektors der ISR darf keine neue Unterbrechungsanforderung auftreten (Zustandsinformation unvollständig!) Bei den meisten CPUs wird daher vom Leitwerk die PU-Anforderung gesperrt. In der ISR muss dann die Möglichkeit für PU-Anforderungen wieder per CPU-Befehl freigegeben werden.

Nach Ende der ISR wird der ursprüngliche Zustandsvektor wieder vom Stack geholt und das Programm an der Unterbrechungsstelle fortgesetzt.

6.3 Bus-System und Bussteuerung

Der Bus ist die gemeinsame Verbindungsschiene (deutsche Bezeichnung für Bus: "Datensammelschiene") für die Kommunikation zwischen Prozessor, Speicherwerk und Ein-/Ausgabe-Werk. Er gliedert sich in die drei Signalgruppen "Adressen", "Daten" und "Steuersignale".
Die a-stelligen Adressen und die d-stelligen Daten werden jeweils parallel übertragen. Es gibt Mikroprozessoren, bei denen aus Gründen der Pin-Reduzierung (kleineres Gehäuse!) die Daten und Adressen im Zeitmultiplex über die gleichen Leitungen geschickt werden, dies ändert jedoch nichts an deren funktionaler Trennung!

Wesentliches Merkmal des Busprinzips ist die Möglichkeit, mit einer Signalleitung nicht nur einen Sender und einen Empfänger zu verbinden (Punkt-zu-Punkt-Verbindung), sondern mehrere Empfänger und sogar mehrere Sender anschalten zu können. Je nachdem, ob die am Bus angeschlossenen Einheiten jeweils nur als Sender bzw. nur als Empfänger wirken, oder ob einzelne oder alle Einheiten beides gleichzeitig sein können, ist der Informationsfluß auf dem Bus unidirektional oder bidirektional.
Der Adreß-Bus z.B. ist im einfachsten Fall unidirektional, wenn die Adressen nur vom Prozessor auf den Bus gegeben werden, während Speicher und E/A-Werk nur Adreßempfänger sind. Der Daten-Bus dagegen ist typisch bidirektional, denn Daten müssen von jeder Einheit zu jeder anderen transportiert werden können.

Während beim A- und D-Bus jeweils alle Leitungen parallel betrieben und deshalb auch identisch verschaltet werden, besteht der Steuerbus (Control-Bus oder C-Bus) meist aus verschiedenen voneinander unabhängigen Takt-, Status- und Steuerleitungen. Über sie wird das sogenannte Busprotokoll realisiert, d.h. die Regeln, nach denen die einzelnen Signalübertragungen abzuwickeln sind. Die Tatsache, daß an einem Bus mehrere Sender und Empfänger angeschaltet sind, bringt zwei Probleme mit sich:

  1. Es darf zu jedem Zeitpunkt nur ein Sender aktiv sein.
    Würden zwei Treiberbausteine gleichzeitig auf die selbe Signalleitung senden, so würde zumindest die Information gestört (z. B. das logische ODER der beiden binären Informationen entstehen), im ungünstigsten Fall könnte es sogar zu einer Zerstörung der Treiberbausteine kommen! Bei Bussen kommen zwei Treiberschaltungs-Varianten zum Einsatz: Open-Collector-Ausgänge oder Tri-State-Ausgänge (= Three-State).

    Die "offenen" Kollektoren der Bustreiber-Transistoren bei Open-Collector-Ausgängen können nur den Low-Pegel aktiv durchschalten; sind sie gesperrt, so muß ein für alle gemeinsamer Pull-up-Widerstand (Zieh-Widerstand) für den High-Pegel sorgen. Damit ergeben sich unterschiedliche Flankenformen der Rechtecksignale auf dem Bus: schaltet ein Treiber-Transistor durch, so wird rasch (weil niederohmig) der Low-Pegel erreicht (steile High-Low-Flanke); beim Sperren des Transistors erzeugt der hochohmigere Pull-Up den High-Pegel. Die immer vorhandenen Kapazitäten der Busleitungen bilden mit dem Pull-up ein R-C-Glied mit relativ langer Zeitkonstante, die Flanke Low-High ist flacher.

    Tri-State-Treiber besitzen den Vorteil, daß beide Pegel aktiv durchgeschaltet werden und damit beide Flanken steil sind. Für die Abschaltung der jeweils inaktiven Treiber sorgt ein Steuereingang, der den Ausgang hochohmig macht; so als wäre kein Treiber angeschaltet (dritter Zustand). Durch die Verschaltung geeigneter Steuersignale des C-Busses muß zu jedem Zeitpunkt dafür gesorgt werden, daß alle Busteilnehmer - mit Ausnahme des einzigen aktiven - im hochohmigen (dritten) Zustand sind. Sind auch nur kurzzeitig zwei aktiv, die unterschiedliche Pegel anlegen wollen, so fließt über die Transistoren der zwei Treiber ein sehr hoher Strom, der zu ihrer Zerstörung führen kann!

  2. der Empfänger muß ausgewählt werden (wen betrifft eine gesendete Info?)
    Sendet der Prozessor Daten auf den Bus, so muß vorher das Ziel (der Adressat) bestimmt sein, denn prinzipiell kann jeder Busteilnehmer "mithören" was über den Bus läuft. Die potentiellen Ziele einer Daten-Nachricht sind Speicherkarten und E/A-Karten; welche von ihnen gemeint ist (bei Speichern: welche Zelle), entscheidet die vorher übertragene Adresse. Alle Teilnehmer müssen die Adressinformation mit ihrer "eigenen" eingestellten Adresse vergleichen und nur dann ihre Empfängerbausteine für die Daten durchschalten, wenn Adressübereinstimmung besteht. Da die Bussignale nur für bestimmte (kurze) Zeit gültig sind, müssen Adress- bzw. Datenbus-Infos in den Busteilnehmern ggf. zum richtigen Zeitpunkt in Register Übernommen und dort zwischengepuffert werden.

    Bei einfachen Rechnersystemen steuert der Prozessor das Busprotokoll, d.h. er aktiviert die wichtigsten Steuersignale, während die übrigen Teilnehemer in der geforderten Weise mit entsprechenden Antwortsignalen reagieren müssen (Master-Slave-Prinzip). In Systemen mit mehreren Mastern (z.B. Mehrprozessorsysteme) müssen zusätzliche Steuersignale vorhanden sein, um den sogenannten Master-Transfer zu steuern, d.h. die Übergabe des Rechtes, die Steuerleitungen zu aktivieren. Mit steigenden Prozessorgeschwindigkeiten wachsen auch die Anforderungen an die Übertragungskapazität der Busse. Das führt zu steileren Flanken der Signale und damit zu höheren Frequenzanteilen (Fourier-Analyse!). Entsprechend wächst das Problem der Leitungsreflexionen an den Bus-Enden. Nur durch sorgfältigen Abschluß der Busleitungen mit dem Leitungs-Wellenwiderstand und durch Verwendung der vorgeschriebenen Treiber- und Empfängerbausteine können "saubere" Rechtecksignale mit steilen Flanken und ohne Überschwingen sichergestellt werden!

Das Busprotokoll für den Datentransport kann auf zwei grundsätzlich verschiedene Arten realisiert werden:

  1. Synchroner Bus:
    Von einem "synchronen Bus" spricht man, wenn der Transfer von einem Taktsignal gesteuert wird, das für alle am Bus angeschlossenen Teilnehmer verfügbar ist. Häufig sendet der Prozessor sogar zwei phasenverschobene Taktsignale aus, um in einer Taktperiode insgesamt 4 Flanken zur Definition bestimmter Zeitpunkte zur Verfügung zu haben.

    Durch die starre Zeiteinteilung kann der Ablauf eines Transfers ohne viel Aufwand gesteuert werden. Bei synchronen Bussen ist es sinnvoll, den Prozessortakt und die Zugriffszeiten der Speicher- und Peripheriebausteine aufeinander abzustimmen um Wartezyklen möglichst zu vermeiden.
  2. Asynchroner Bus:
    Die oben genannten Probleme sind beim asynchronen Bus unbekannt, denn hier ist kein festes Zeitraster für die Datenübertragungen auf dem Bus vorgeschrieben. Stattdessen quittiert der adressierte Empfänger die Übernahme der Daten vom Bus bzw. das Aussenden der Daten auf den Bus mit einem sogenannten Acknowledge-Signal (ACK) zum Prozessor. Erst damit ist dann der Buszyklus beendet, darf also ein neuer Buszyklus angestoßen werden.

    Prinzip eines Schreibzyklus auf einem asynchronen Bus:

    1. Adressen und Daten werden vom Pozessor auf den Bus gesendet
    2. Prozessor signalisiert Gültigkeit von Adresse und Daten mit dem Übergabe-Signal
    3. Speicher quittiert die Übergabe
    4. Prozessor hat Quittung erhalten und deaktiviert Übergabe
    5. Speicher erkennt, daß Quittung angekommen ist und deaktiviert sie
    6. Prozessor erkennt an Rückflanke der Quittung das Ende des Zyklus und deaktiviert Adresse und Daten

    Ein Vorteil dieses Prinzips ist die Möglichkeit, Speicherbausteine beliebiger Zugriffszeit verwenden zu können (z.B. Austausch gegen schnellere oder Verwendung verschiedener in einem System), wobei jeweils mit der optimal erreichbaren Buszykluszeit operiert wird. Notwendig ist jedoch ein gewisser Aufwand auf der Speicherkarte für das Signal-Handshaking. Auf der Prozessorseite wird außerdem eine Time-Out-Schaltung benötigt, die dann ansprechen muß, wenn innerhalb einer vorgegebenen Zeit keine Quittung empfangen wird (nicht existierende Adresse oder defekte Speicherkarte). Ein Ansprechen des Time-Out muß zu einem Interrupt des Prozessors führen ("Non existing memory trap").

Anhang: Einfache Beispiele zur Ablaufsteuerung

Es ist die folgende einfache Schaltung einer Ablaufsteuerung aus Festwertspeicher (mit 32 Worten), Register und Bedingungsmultiplexer gegeben. Der zeitliche Ablauf wird durch die Taktfrequenz festgelegt.

Die Ausgänge Q0 bis Q4 des Registers wählen die Adressen des Speichers aus und bestimmen so das Datenwort, das an den Speicherausgängen D0 bis D8 anliegt. Die Speicherausgänge D0 bis D3 bestimmen zusammen mit dem Multiplexerausgang QM, der auf den Registereingang D4 geleitet wird, den Folgebefehl. Die Speicherausgänge D7 und D8 wählen einer der Multiplexereingänge E0 bis E3 aus:

Bei den Eingangskombinationen 01 oder 10 für D7,D8 hängt die Folgeadresse von Wert der Eingänge A und B ab. Als Beispiel soll Eingang A betrachtet werden:

Die Speicherausgänge D4 bis D6 können zur Steuerung von angeschlossenen Einheiten verwendet werden.

Die folgenden Beispiele sind absichtlich nicht auf die (komplexe) Ablaufsteuerung im Leitwerk einer CPU bezogen, sonder sollen durch Ihre einfache Aufgabenstellung die Arbeitsweise der einfachen Ablaufsteuerung demonstrieren.

1. Abfüllanlage

Auf einem Fließband werden Schachteln unter eine Abfüllstation transportiert. Die Schachtel wird jeweils mit 5 Teilen gefüllt und danach geschlossen. Während des Schließens muss 3 Taktperioden gewartet werden. Anschließend wird auf die nächste Schachtel gewartet. Die Ein- und Ausgänge werden folgendermaßen belegt:
Y0     0: Band stop, 1: Band läuft
Y1     Taktimpulse für die Abfülleinrichtung
Y2     Taktimpuls für Schließmechanismus
A      1: Schachtel in Position

Der Ablauf sieht dann folgendermaßen aus:

  1. Warten, bis Schachtel in Position
  2. 5 Taktimpulse für die Abfülleinrichtung
  3. 1 Taktimpuls für die Schließeinrichtung
  4. 3 Taktperioden warten
  5. Sprung nach Schritt 1
(Bei den Taktimpulsen wirkt jedes Mal die steigende Flanke)

Speicherbelegung:

A0 A1 A2 A3 A4  D0 D1 D2 D3  D4 D5 D6  D7 D8 
---------------+------------------------------ 
 0  0  0  0  0   0  0  0  0   1  0  0   0  1   Schritt 1 
 0  0  0  0  1   0  0  1  0   0  1  0   0  0   Schritt 2 (T1) 
 0  0  1  0  0   0  0  1  1   0  0  0   0  0   Schritt 2 (T1) 
 0  0  1  1  0   0  1  0  0   0  1  0   0  0   Schritt 2 (T2) 
 0  1  0  0  0   0  1  0  1   0  0  0   0  0   Schritt 2 (T2) 
 0  1  0  1  0   0  1  1  0   0  1  0   0  0   Schritt 2 (T3) 
 0  1  1  0  0   0  1  1  1   0  0  0   0  0   Schritt 2 (T3) 
 0  1  1  1  0   1  0  0  0   0  1  0   0  0   Schritt 2 (T4) 
 1  0  0  0  0   1  0  0  1   0  0  0   0  0   Schritt 2 (T4) 
 1  0  0  1  0   1  0  1  0   0  1  0   0  0   Schritt 2 (T5) 
 1  0  1  0  0   1  0  1  1   0  0  0   0  0   Schritt 2 (T5) 
 1  0  1  1  0   1  1  0  0   0  0  1   0  0   Schritt 3 
 1  1  0  0  0   1  1  0  1   0  0  0   0  0   Schritt 3/4 (1) 
 1  1  0  1  0   1  1  1  0   0  0  0   0  0   Schritt 4   (2) 
 1  1  1  0  0   1  1  1  1   0  0  0   0  0   Schritt 4   (3) 
 1  1  1  1  0   0  0  0  0   0  0  0   0  0   Schritt 5 
Schritt 1 stellt einen bedingten Sprung dar. Mit D7/D8 wird über den Multiplexer der Eingang A als Steuerung für Bit 4 des Registers ausgewählt. Solange der Eingang A Null ist, erfolgt ein Sprung nach 00000, also auf den Befehl selbst. Wechselt der Eingang auf 1, erfolgt ein Sprung nach 00001 (Schritt 2): Die beiden Sprungalternativen sind allgemein immer xxxx0 und xxxx1. Da die erste Adresse (00000) festliegt, ergibt sich die zweite zwangsläufig. Alle nun noch freien Speicherzellen werden sicherheitshalber wie Schritt 5 programmiert (Sprung nach Schritt 1).

2. Automatische Schranke

Eine im Ruhezustand geschlossene Schranke soll durch Tastendruck geöffnet werden und für die Dauer von 4 Taktimpulsen offen bleiben. Danach wird die Schranke wieder geschlossen. Gleichzeitig wird ein Lichtsignal (rot/grün) gesteuert. Der Schrankenmotor wird in den jeweiligen Endstellungen (offen/geschlossen) durch Kontakte am Schrankenantrieb stromlos geschaltet. Die Ein- und Ausgänge werden folgendermaßen belegt:
Y0     0: Schranke öffnen, 1: Schranke schließen
Y1     Lampe rot
Y2     Lampe grün
A      0: Schranke nicht offen, 1: Schranke ist offen
B      Taster (1 = öffnen)
Der Ablauf sieht dann folgendermaßen aus:
  1. (Ruhezustand) Schranke schließen, Lampe rot an, Lampe grün aus
  2. Mit den Ausgangssignalen von Schritt 1 warten, bis Taste=1 ist
  3. Schranke öffnen
  4. Warten bis Schranke offen ist
  5. Lampe rot aus, Lampe grün an, 4 Taktimpulse abwarten
  6. Weiter bei Schritt 1

Speicherbelegung:

A0 A1 A2 A3 A4  D0 D1 D2 D3  D4 D5 D6  D7 D8 
---------------+------------------------------ 
 0  0  0  0  0   0  0  0  1   1  1  0   0  0   Schritt 1 
 0  0  0  1  0   0  0  0  1   1  1  0   1  0   Schritt 2 
 0  0  0  1  1   0  0  1  0   0  1  0   0  1   Schritt 3 
 0  0  1  0  0   0  0  1  0   0  1  0   0  1   Schritt 4 
 0  0  1  0  1   0  0  1  1   0  0  1   0  0   Schritt 5 (1) 
 0  0  1  1  0   0  1  0  0   0  0  1   0  0   Schritt 5 (2) 
 0  1  0  0  0   0  1  0  1   0  0  1   0  0   Schritt 5 (3) 
 0  1  0  1  0   0  1  1  0   0  0  1   0  0   Schritt 5 (4) 
 0  1  1  0  0   0  0  0  0   0  0  1   0  0   Schritt 6 
Alle nun noch freien Speicherzellen werden sicherheitshalber wie Schritt 6 programmiert (Sprung nach Schritt 1).

Erläuterungen: Die Schritte 2 und 3 enthalten bedingte Sprünge. Bei Schritt 2 wird abhängig von Eingang B (Taster) verzweigt:

B=0 0 0 0 1 0: Sprung auf die gleiche Stelle (das letzte Bit wird ja von Eingang B festgelegt).
B=1 0 0 0 1 1: Sprungziel, wenn Taste = 1. Da B = D4 das letzte Bit festlegt, ergibt sich das Sprungziel zwangsläufig.

Bei Schritt 3 wird nach dem gleichen Schema verfahren:

A=0 0 0 1 0 0: Sprung auf die gleiche Stelle (Letztes Bit = Eingang A)
A=1 0 0 1 0 1: Sprungziel für A = 1 Schranke öffnen.

Schritt 6 ist ein unbedingte Sprung nach 0 0 0 0 0.

Zum vorhergehenden Abschnitt Zum Inhaltsverzeichnis Zum nächsten Abschnitt


Die HTML-Fassung entstand unter Mitwirkung von Volker Arndt
Copyright © FH München, FB 04, Prof. Jürgen Plate