4.15 Vektor Interrupt Baugruppe

Einsatz der Vektor-Interrupt-Baugruppe

Nach Vermittlung der Grundlagen der Mikrocomputer-Technik kann die hier beschriebene Vektor-Interrupt-Baugruppe im Rahmen der Interface-Technik für Einstieg in die Interrupt-Technik und für eine
Vertiefung benutzt werden. Um den Einstieg für den Lernenden überschaubar zu gestalten, kann man mit einer Minimalkonfiguration arbeiten:

  • CPU-Baugruppe
  • BK-RAM-Baugruppe
  • Bus-Signalgeber
  • Bus-Signalanzeige (Adresse: 0000)
    (zur Programmeingabe und für den Einzelschrittbetrieb)

Mittels der aufgeführten Konfiguration können die Grundlagen der Interrupt-Technik anhand kleiner Beispiele/ Anwendungen erarbeitet werden. In dieser Einstiegsphase kann beim Einsatz der Vektor-Interrupt-Baugruppe vorerst auf folgende tiefergehende Vorkenntnisse verzichtet werden:

  • tiefere Kenntnisse über das Betriebsprogramm
  • tiefere Kenntnisse über erweiterte Hardware-Strukturen, die unter Umständen “interruptgesteuert“
    arbeiten (siehe Floppy-Disk)
  • Kenntnisse über weitere Interrupt-Eingänge sowie über Priorität, Maskierung und Schachtelung
    von Interrupt-Eingängen.

Eine Vertiefung der Interrupt-Technik kann danach unter dem Betriebsprogramm MAT85 (inklusive Erweiterung) erfolgen. Hier können dann die weiteren Interrupt-Eingänge RST 5.5, RST 6.5, RST 7.5 und TRAP behandelt werden. In diesem Rahmen eröffnen sich weitere Anwendungsgebiete unter Zuhilfenahme der bereits -vorhandenen Baugruppen und Modelle. Einige Beispiele und weitergehende Anregungen sind in der folgenden Beschreibung der Baugruppe zu finden.

Einleitung

Beim Einsatz eines Mikrocomputers im Bereich der Steuer-, Mess- und Regelungstechnik ist es notwendig, dass der Mikrocomputer auf externe Ereignisse sofort reagieren muss.

Ein Beispiel hierzu ist der Einsatz in der chemischen Industrie. In einem chemischen Prozess muss zum Beispiel die Prozesstemperatur und der Druck geregelt und auf Grenzwerte hin überwacht werden. Der Zeitpunkt, an dem eine bestimmte Temperatur bzw. ein bestimmter Druck erreicht wird, ist unbestimmt. Bedingungen wie Umgebungstemperatur oder Heizleistung beeinflussen den Prozessablauf, so dass die genannten Zeitpunkte nicht durch ein vorgegebenes Programm erfasst werden können. Der Prozess und die vom Programm vorgegebene Arbeitsweise des Mikrocomputers verlaufen nicht synchron – sie sind also asynchron. Wie erreicht man nun, dass der Mikrocomputer prozesssynchron arbeitet?

Um dem Mikrocomputer eine Möglichkeit zu geben, während seiner Programmabarbeitung auf externe Ereignisse reagieren zu können, besitzen alle Mikroprozessoren Interrupt-Eingänge (Unterbrechungseingänge).

Bei einem Signal an einem Interrupt-Eingang unterbricht der Mikroprozessor seine momentane, durch das Programm Vorgegebene . Arbeit und bearbeitet das Programm für den Interrupt auslösenden Prozess. Nach dieser prozesssynchronen Bedienung setzt der Mikroprozessor seine unterbrochene Tätigkeit fort. Wie eine dafür notwendige Interrupt-Logik aufgebaut sein muss und wie der Mikroprozessor seine eigentliche Arbeit geordnet unterbricht und auch wieder aufnimmt, soll im folgenden aufgezeigt und erarbeitet werden. Die Beschreibung der Vektor-Interrupt-Baugruppe erfolgt nach einer grundlegenden Einführung in die Interrupt-Technik.

Grundlagen der Interrupt-Technik

Abfrage-Technik – polling –

Mikrocomputer arbeiten taktgesteuert nach einem vorgegebenen Programm, d. h., der Programmierer legt durch das Programm die Arbeit des Mikroprozessors und die Reihenfolge der Bedienung von externen Geräten fest. Die externen Geräte / Prozesse werden in der vorn Programm vorgegebenen Reihenfolge bedient. Ob eine Bedienung erfolgen soll, kann z.B. über ein Status-Bit bei programmierbaren IO-Port’s, an welche die Geräte angeschlossen sind, ermittelt werden. Diese Vorgehensweise bezeichnet man als

polling: Abfrage-Technik.

Nachteil dieser beschriebenen Abfrage-Technik ist die durch das Programm fest vorgegebene Reihenfolge, wobei unvorhergesehene, wichtige Ereignisse unter Umständen zu spät erkannt und bedient werden. Auch wenn keine kritischen Ereignisse auftreten, so wird der Prozessor die meiste Zeil mit der Abfrage nach Geräte-Bedienung verbringen.

Diese Abfrage-Technik ist rein programmgesteuert und daher einfach. Aus diesem Grund lassen sich evtl. Fehler in der Erstellungsphase oder später im Betrieb leichter lokalisieren und beheben.

Beispiel für ein Programm nach dem Polling-Verfahren:

Bild 1 Flussdiagramm „Polling-Methode“

Wie dieses Beispiel zeigt, ist die Struktur des Programms zwar übersichtlich, aber fest vorgegeben.
Für fast alle Anwendungen des Mikrocomputers benötigt man variable Strukturen und Reaktionen, die sich den Anforderungen durch die Peripherie anpassen.

Unterbrechungstechnik – interrupt –

Wie es der Name „Unterbrechungstechnik“ schon sagt, wird der Mikroprozessor in seiner programmgesteuerten Arbeit durch ein externes Ereignis unterbrochen. Solche Ereignisse kommen von den an den Mikrocomputer angeschlossenen Geräten ( Floppy Disk, Drucker, Maus, Terminal, Lichtgriffel, … ) oder von einem anderen Mikrocomputer (Informationsaustausch) bzw. von der Prozessperipherie, Schalter, Sensoren und Grenzwertmeldern für Wege, Füllstände, Temperatur, Drehzahl, Druck, … ). Die Verbindung Mikrocomputer/ Peripherie erfolgt über ..

  • parallele Ein-/Ausgabe-Schnittstellen,
  • serielle Ein-/Ausgabe-Schnittstellen,
  • Analog-Digital-Wandler,
  • Digital-Analog-Wandler und
  • spezielle Schnittstellen (IEC-Bus, Floppy-Bus, .. ).

Beispiele:

  • Ein digitaler Drehzahlgeber sendet einen Impuls, der erfasst werden muss
  • Bei einer Datenübertragung zwischen zwei Mikrocomputern ist der Eingabe-Puffer der Schnittstelle voll, d.h., das empfangene Zeichen muss gelesen werden.
  • Von einer Floppy-Disk-Station kann das nächste Zeichen gelesen werden.
  • Zeitsteuerung durch einen Uhr-Impuls.

Um zu wissen, wie die Melde- bzw. die Bedienungslogik in einem Mikrocomputer hard- und softwaremäßig aussehen muss, sind verschiedene Kriterien zur Beurteilung zu beachten:

  • Welche Priorität (Wichtigkeit) hat ein Ereignis?
    (Wird ein Temperatur-Grenzwert gemeldet, so hat diese Meldung sicherlich Vorrang vor einem Datenaustausch mit einem Drucker.
  • Wann tritt ein Ereignis auf?
    a) zeitlich regelmäßig (z.B.: Uhrimpulse)
    b) zeitlich unregelmäßig (z.B.: Sollwert-Temperatur erreicht)
  • Häufigkeit von Ereignissen
    a) häufig: Uhrimpulse
    b) selten: Sollwert-Temperatur erreicht

Aus den genannten Kriterien sieht man schon, wie komplex eine interruptgesteuerte Arbeit durch den Mikrocomputer sein kann.

In den folgenden Kapiteln soll jedoch auf eine einfache Art und Weise in dieses Thema eingeführt werden.

Mikrocomputer haben für die Interrupt-Steuerung mindestens einen Interrupt-Eingang, dieser wird

  • INTR: interrupt bzw.
  • IRQ: interrupt request (Interrupt-Anforderung)

genannt.

Bild 2 Interrupt-Eingang

Ablauf einer Interrupt-Bearbeitung:

Beim Eintreffen eines Interrupt-Signals läuft folgendes Schema ab:

  1. Der von der CPU gerade bearbeitete Befehl wird zu Ende geführt, da die CPU sich nicht merken kann, wie weit sie einen Befehl bereits abgearbeitet hat.
  2. Die Adresse des nächsten Befehls wird automatisch im Stack (Stapelspeicher, RAM-Bereich für die CPU) gespeichert – wie bei einem Unterprogrammaufruf.
  3. Die CPU setzt ihre Arbeit bei dem zur Unterbrechungsanforderung gehörenden Programm (interrupt-service-routine, ISR) fort.
  4. Ist das Unterbrechungsprogramm bearbeitet, so holt sich die CPU durch einen RETURN-Befehl (der letzte Befehl in der ISR muss ein RET-Befehl sein) die Rückkehradresse vom Stack und setzt ihre Arbeit in dem unterbrochenen Programm fort.

Der hier beschriebene Ablauf zur Bedienung eines Interrupts gleicht dem eines Unterprogrammaufrufs (CALL-Befehl). Bei der Interrupt-Bedienung handelt es sich um einen asynchron hardware-gesteuerten Unterprogrammaufruf. In der Interrupt-Service-Routine müssen die im Programm verwendeten Parameter (Werte, Registerinhalte) gerettet und vor der Rückkehr in das unterbrochene Programm wieder zurückgespeichert werden.

Interrupt-Freigabe und Sperrung

Interrupt-Eingänge verbessern die Anpassung an interne und externe Gegebenheiten – erschweren aber die Erstellungs- und Testphase eines interruptgesteuerten MC-Systems. Weiterhin ist manchmal in wichtigen Befehlssequenzen eine Unterbrechung nicht erwünscht, wenn es sich z.B. um zeitkritische Befehlssequenzen handelt.

Beispiel: Ein Drehzahlzähler muss ausgelesen werden, sonst erfolgt ein Überlauf. Die folgende Befehlsseguenz muss ohne Unterbrechung ablaufen.

    IN  CNT1LO       ;Zähler 1 LOW-Byte lesen
    STA DREZLO       ;abspeichern
    IN  CNT1HI       ;Zähler 1 HIGH-Byte lesen
    STA DREZHI       ;abspeichern

Aus den genannten Gründen heraus lassen sich Interrupt-Anforderungen
durch einen Programm-Befehl sperren.

Eine Sperrung der Interrupt-Annahme erfolgt durch:

DI disable interrupt (Interrupt verhindern).

Dieser Zustand „gesperrter Interrupt“ ist nach dem Einschalten des MC-Systems automatisch eingestellt und erm6glicht eine unterbrechungsfreie Initialisierung (Grundeinstellung von Speicher und 10-Ports) des MC-Systems. Jedes RESET-Signal erzeugt auch den Interruptzustand „gesperrt“.

Damit anstehende Interrupt-Signale angenommen und bearbeitet werden, muss vorn Programm her der Befehl:

EI enable interrupt (Interrupt ermöglichen}

gegeben werden.

Kommt nun bei freigegebenem Interrupt ein Interrupt-Signal, so wird in der CPU automatisch der Zustand „DI“ eingenommen. Erst durch eine ausdrückliche Freigabe über den Befehl „EI“ kann ein weiterer Interrupt erkannt und bearbeitet werden. Diese Freigabe kann -wenn notwendig- direkt am Anfang einer Interrupt-Service-Routine vorgenommen werden. Üblich ist eine Freigabe vor dem letzten Befehl „RET“ in der ISR. Der RET-Befehl wird dann noch von der CPU ausgeführt und erst danach erfolgt die Interrupt-Freigabe.

Merke:

  • Interrupte sind nach dem Einschalten des MC-Systems gesperrt.
  • Jedes RESET-Signal sperrt die Interrupt-Annahme.
  • Eine Interrupt-Annahme Kird erst durch den Befehl „EI“ ermöglicht.
  • Jede Interrupt-Annahme sperrt eine weitere Annahme; sie muss
    durch den Befehl „EI“ wieder freigegeben werden.
  • Es ist jederzeit m6glich, durch den Befehl „DI“ eine InterruptFreigabe
    wieder zu sperren.

Interrupt, Polling

Es stellt sich nun die Frage: „Wieviele Interrupt-Eingänge benötigt eine CPU oder kann man an einen Interrupt-Eingang mehrere Interruptsignale anschließen?“ Zu dieser Frage bieten die MikroprozessorHersteller mehrere Lösungen an bzw. der Hard-/Software-Entwickler muß diesbezüglich Hardware-Erweiterungen vornehmen.

Hardware-Erweiterung

Eine einfache Erweiterung eines Interrupt-Eingangs an der CPU lässt sich mit Hilfe eines ODER-Gatters vornehmen (siehe Bild 3).

Bild 3 Erweiterung eines INTR-Eingangs

Die Auffächerung des Interrupt-Eingangs an der CPU mittels eines ODER-Gatters erlaubt nun, von mehreren Geräten Interrupt-Signale anzuschließen. Wie aber kann unterschieden werden, durch welches Gerät ein Interrupt ausgelöst wurde? In der Interface-Technik ergeben sich immer drei grundsätzliche Lösungen:

  • die Hardware-Lösung (z.B. interrupt}
  • die Software-Lösung (z.B. polling)
  • eine Mischung von Hard-/Software-Lösung (z.B. interrupt/polling)

Software-Lösung: Polling

Im Fall eines eintreffenden Interrupts setzt die CPU ihre Arbeit an einer zu dem Interrupt-Eingang gehörenden Programm-Adresse fort. Diese Adresse ist vom Hersteller der CPU festgelegt. Ab dieser Adresse kann der Anwender ein kurzes Identifikationsprogramm schreiben, das alle angeschlossenen Geräte abfragt und überprüft, welches der Geräte einen Interrupt ausgelöst hat. Dazu besitzen die programmierbaren Schnittstellen-Bausteine, über welche die Peripheriegeräte angeschlossen sind, ein Statusregister (Zustandsregister). In diesem Statusregister wird ein Bit (z.B. Bit 7) bei einer Interruptanforderung gesetzt.

Zu der Hardware-Lösung „Gerätebedienung durch Interrupt“ kommt nun eine Software-Lösung „Suchen des interruptauslösenden Gerätes durch polling“.

Dazu ein Beispiel:

PROGRAMM
                  :
                  EI                      ; Interrupt erlauben
                  :
                  :
                  :     <- (1) Interrupt trift ein
                  :


(2)   IDENT:      IN    GER1              ;Status von Geraet 1 lesen
                  ANI   80                ;Interrupt-Bit gesetzt?
                  JNZ   ISR1              ;ja, Interrupt bedienen
                  IN    GER4              ;nein, weiter suchen
                  ANI   80                ;
                  JNZ   ISR4              ;
                  IN    GER2              ;
                  ANI   80                ;
                  JNZ   ISR2              ;(3) ja, Geraet 3 hat den
                                          ;Interrupt ausgeloest
                  usw.

      ISR1:       :                       ;Bedienung von Gerät 1
                  :                  
                  :
                  EI                      ;Interrupt wieder zulassen
                  RET                     ;zurueck

(3)   ISR2:       :                       ;Bedienung von Gerät 2
                  :                  
                  :
                  EI                      ;Interrupt wieder zulassen
                  RET                     ;zurueck

      ISR3:       :                       ;Bedienung von Gerät 3
                  :                  
                  :
                  EI                      ;Interrupt wieder zulassen
                  RET                     ;zurueck

Ablauf:

Trifft in dem normalen „Programm“ ein Interrupt ein (1), so führt die CPU den gerade bearbeiteten Befehl zu Ende und speichert die Rückkehradresse des nächsten auszuführenden Befehls im Stack. Danach arbeitet die CPU an der Interrupt-Adresse weiter, wo die Identifikationsroutine steht (2). Bei dem Gerät, das einen Interrupt ausgelöst hat, erfolgt eine Verzweigung zu der entsprechenden Interrupt-Service-Routine (ISR .. ) (3). Am Ende der ISR wird der Interrupt wieder freigegeben. Durch den Befehl „RET“ wird die CPU veranlasst, die Rückkehradresse vom Stack zu lesen (4) und an der unterbrochenen Stelle (5) weiter zu arbeiten.

Durch die Reihenfolge der Abfrage der Schnittstellen-Statusregister kann der Programmierer eine bestimmte Priorität in der Reihenfolge der Bedienung festlegen (siehe Beispiel: Gerät 1, Gerät 4, Gerät 2). Eine Gerätebedienung wie zum Beispiel „Drehzahlimpuls“ kommt in der Identifikationsroutine als eine der ersten Abfragen. Das Gerät, dessen Status zuerst abgefragt wird, hat die höchste Priorität. Nachteilig bei diesem Verfahren ist das Suchen nach dem anfordernden Gerät. Dadurch entstehen unterschiedlich lange Reaktionszeiten bei der Bedienung eines Interrupts.

Vektor-Interrupt

Hardware-Lösung

Eine Möglichkeit, das Suchverfahren bei der Interrupt/ Polling-Methode zu umgehen, bietet der „Vektor-Interrupt“. Bei dieser Methode sind einem Interrupt-Eingang mehrere Interrupt-Adressen im Speicher zugeordnet. Zusätzlich zu dem Interrupt-Eingang „INTR“ steht ein Quittungsausgang „INTA“ (interrupt-acknowledge, Interrupt bestätigen bzw. angenommen) zur Verfügung (siehe Bild 4).

Bild 4 Vektor-Interrupt-Erzeugung

Ablauf: Nach der Annahme des Interrupts (1) durch die CPU sendet diese ein Quittungssignal INTA „Interrupt angenommen“ (2). Mit diesem Signal kann das anfordernde Peripheriegerät veranlasst werden, eine Geräte-Kennung auf den Datenbus zu senden (3). Die CPU liest diese Kennung und kann direkt zu der entsprechenden Interrupt-Service-Routine verzweigen.

Bei der Vektor-Interrupt-Methode gibt sich das anfordernde Gerät durch eine „Kennung“ – hervorgerufen durch das Lesesignal INTA der CPU – selbst zu erkennen.

Intel als Hersteller der 8080/85-CPU und auch die Firma Zilog als Hersteller der Z80-CPU bieten die Möglichkeit, maximal 8 Adressvektoren zu bilden. Diese Adressvektoren (Zieladressen) sind in der folgenden Tabelle dargestellt.

Kennung
(durch INTA gelesen)
binär

hex
Zieladresse
hex
1 1 0 0 0 1 1 1C70 0 0 0
1 1 0 0 1 1 1 1CF0 0 0 8
1 1 0 0 1 1 1 1D70 0 1 0
1 1 1 0 1 1 1 1DF0 0 1 8
1 1 0 1 1 1 1 1E70 0 2 0
1 1 1 0 1 1 1 1EF0 0 2 8
1 1 1 1 0 1 1 1F70 0 3 0
1 1 1 1 1 1 1 1FF0 0 3 8

Interrupt-/Prioritätskodierung

Für eine funktionierende Hardware zur Interruptsteuerung benötigt man eine Schaltung, die die Kennung und die – wie bei der Software-Lösung eine Priorität bei mehreren Interrupten erzeugt.

Das folgende Bild zeigt die dazu notwendige Schaltung.

Bild 5 Vektor-Interrupt und Prioritätskodierung

Die von den externen Geräten kommenden Interruptsignale gelangen über eine Prioritätskodierung (UND-Gatter) zum einen über das ODER-Gatter an den Interrupteingang, zum anderen wird aus ihnen über den 1 aus 8 in dual Prioritätskodierer ein Teil der Kennung gebildet (Datenleitungen D3, D4, D5). Die restlichen Datenleitungen bei der Kennung (D0, D1, D2 und D6, D7) führen laut vorhergehender Tabelle 1-Signal. Durch den Tristate-Treiber gelangt die Kennung beim Lesen durch die CPU mit dem INTA-Signal auf den Datenbus. Je nach eintreffendem Interrupt verzweigt die CPU zu der entsprechenden Zieladresse und der dazugehörenden Interrupt-Service-Routine.

Interruptsystem CPU 8085

Interrupt-Anschlüsse

Die CPU 8085 von INTEL bietet ohne Hardwareerweiterung ein gut ausgebautes Interruptsystem. Sie hat mehrere Interrupteingänge und die in den vorhergehenden Kapiteln besprochene Interrupt-/Prioritätskodierung (interrupt controller, Unterbrechungsteuerung).

Bild 6 Interrupt-Anschlüsse CPU 8085

Außer dem Interrupteingang INTR hat die CPU 8085 noch die Interrupteingänge:

  • TRAP (Falle, nicht rnaskierbarer Interrupt)
  • RST 7.5 (Restart 7.5, Neustart)
  • RST 6.5 (Restart 6.5)
  • RST 5.5 (Restart 5.5)

Interrupt-Adressen

Die zu den Interrupteingängen gehörenden Zieladressen sind in der folgenden Tabelle zusammengestellt.

Interrupt-AnschlussZieladresse
TRAP (RST 4.5)0 0 2 4
RST 7.50 0 3 C
RST 6.50 0 3 4
RST 5.50 0 2 C
INTRhängt von der gelesenen Kennung ab
(Siehe Tabelle Interrupt Vektor Erzeugung)

Hinweis: Die Zieladresse läßt sich über die Interrupt-Nr. berechnen.

Beispiel: RST 4.5 —-> ADR = 4.5 * 8 = 36/10 = 24/16

Interner Interrupt-Controller

Von dem internen Interrupt-Controller der CPU 8085 ist in dem folgenden Bild 7 ein vereinfachtes Prinzipschaltbild dargestellt.

Bild 7 Vereinfachte Interrupt-Steuerung CPU 8085

Wie aus der Prinzipschaltung zu ersehen ist, kann ein eintreffender Interrupt {H-Pegel an INTR) von der CPU nur dann erkannt werden, wenn das Interrupt-Enable-Flipflop (INTE-FF) gesetzt ist. Das Setzen des Flipflops erfolgt über den Maschinen-Befehl „EI“ (enable interrupt, FB/16, siehe Befehlsliste). Wird der Interrupt angenommen, so wird von der Control-Unit (CU, Steuereinheit in der CPU) das Lesesignal INTA (interrupt acknowledge, Interrupt angenommen, L-Pegel) zum Lesen des Interrupt-Vektors ausgegeben.

Das INTE-FF wird über das RESET-Signal oder einen angenommenen Interrupt oder durch den Befehl „DI“ (disable interrupt, F3/16, siehe Befehlsliste) zurückgesetzt. Dadurch ist eine Interrupt-Annahme gesperrt.

In dem folgenden Prinzipbild ist die gesamte Interrupt-Steuerung der CPU 8085 zu sehen.

Bild 8 Erweiterte Interrupt-Steuerung CPU 8085

Die höchste Priorität hat der Interrupt-Eingang TRAP (RST 4.5) und die niedrigste der Interrupt-Eingang INTR – diese Aussage gilt bei gleichzeitigem Anstehen mehrerer Interrupt-Anforderungen. Wie in dem Bild zu sehen ist, sind die Interrupt-Eingänge TRAP und RST 7. 5 flankengesteuert – gleichzeitig werden Interrupt-Signale – bis auf TRAP- in den Flipflops gespeichert.

Die restlichen Interrupt-Eingänge sind H-Pegel-gesteuert ohne Eingangssignal-Speicherung, d.h., Anforderungen müssen bis zur Annahme anstehen. Alle Interrupt-Eingänge bis auf den TRAP lassen sich über das INTE-Flipflop sperren.

Interrupt-Masken-Register

Bei der Anzahl von Interrupt-Eingängen der CPU 8085 muss es außer der generellen Freigabe über den EI-Befehl eine weitere Möglichkeit geben, die Interrupt-Anforderungen individuell zu sperren und freizugeben. Diese Forderung ergibt sich einmal von den verschiedenen Aufgabenstellungen her, zum anderen ist dies bei der Test- bzw. Inbetriebnahmephase notwendig. Bei der CPU 8085 ist eine solche individuelle Behandlung der Interrupt-Eingänge über das Interrupt-Masken-Register {I-Register) möglich.

Das Setzen einer Interrupt-Maske erfolgt durch den Maschinen-Befehl SIM (30/16, set interrupt mask, Interrupt Maske setzen). Bedeutung der Bit beim Schreiben in das I-Register:

BITRegisterBedeutung
7SODSOD-Ausgang der CPU
6SOD ENFreigabe: H
5Xnicht verwendet
4RES 7.5Rücksetzen des RST 7.5-Flip-Flops durch H-Pegel
3MSEMaske
L: wird ignoriert
H: wird gesetzt
2M 7.5Unterbrechungsmaske:
L: Interrupt erlaubt
H: Interrupt gesperrt
1M 6.5Unterbrechungsmaske:
L: Interrupt erlaubt
H: Interrupt gesperrt
0M 5.5Unterbrechungsmaske:
L: Interrupt erlaubt
H: Interrupt gesperrt

Anmerkung
Die Interrupt-Maske muss vor dem SIM-Befehl im Akkumulator stehen und wird durch ihn in das I-Register kopiert.

Beispiel:

      MVI A,1B    ; Maske:0 0 0 1 1 0 1 1/2
                  ; Ruecksetzen RST 7.5-FF
                  ; Maske freigeben, RST 7.5 freigeben
      SIM         ; Maske setzen

SOD: seriell output data (serieller Datenausgang, Anschluss 4 an der CPU)

Das Bit 6 (SODEN, SOD enable, seriellen Ausgang freigeben) und das Bit 3 ( MSE, mask set enable, Maske setzen freigeben) werden aufgrund der zwei Funktionen des SIM-Befehls benötigt:

Interrupt-Maske setzen:
SOD-EN: L und MSE: H

Bit seriell ausgeben:
SOD-EN: H und MSE: L

Außer der Möglichkeit, eine Maske mit dem SIM-Befehl zu setzen, ist es möglich, den aktuellen Zustand des Interrupt-Systems mit dem Maschinen-Befehl RIM ( 20/16 , read interrupt mask, Interrupt Maske lesen) zu lesen. Nach dem RIM-Befehl steht das Zustands-Bitmuster im Akku.

ACHTUNG: Die oberen 4 Bit (Bit 4 bis Bit 7) haben beim Lesen des I-Registers eine andere Bedeutung als beim Schreiben.

Bedeutung der Bit beim Lesen des I-Registers:

BITRegisterBedeutung
7SIDPegel am Eingang SID der CPU
6I 7.5Flags für anstehende Unterbrechungen
5I 6.5Flags für anstehende Unterbrechungen
4I 5.5Flags für anstehende Unterbrechungen
3IEUnterbrechungs-Freigabe-Bit
H: Maske ist freigegeben
2M 7.5Aktuelle Unterbrechungsmaske:
L: Interrupt erlaubt
H: Interrupt gesperrt
1M 6.5Aktuelle Unterbrechungsmaske:
L: Interrupt erlaubt
H: Interrupt gesperrt
0M 5.5Aktuelle Unterbrechungsmaske:
L: Interrupt erlaubt
H: Interrupt gesperrt

Anmerkungen:

SID: seriell input data (serieller Dateneingang, Anschluss 5 an der CPU).

Durch Bit 4 bis Bit 6 kann ermittelt werden, ob Interrupt-Signale an den Anschlüssen RST 5.5, RST 6.5 und RST 7.5 anstehen. Dies ist auch bei zeitweise gesperrtem Interruptsystem möglich.

Bild 9 Zusammenfassung Interrupt-Controller/-Masken-Register

Nutzung der Interrupte im BFZ/MFA-Mikrocomputer

Ein Teil des Interrupt-Systems wird von dem Betriebsprogramm MAT85 bzw. von der Erweiterung SP1 und MINI-DOS genutzt. Welche Interrupte es sind und wie sie genutzt werden, zeigt die folgende Tabelle.

Interrupt-EingangZieladresseNutzung durch das Betriebsprogramm
TRAP (RST 4.5)0 0 2 4MAT85, MONITOR RESTART, initialisiert den oberen RAM-Bereich neu
RST 7.50 0 3 CVerzweigung in den RAM-Bereich: FC9E (1) , Nutzung vom SPS-Interpreter (timer)
RST 6.50 0 3 4Verzweigung nach FC9B (wird von SPS und BASIC zum Programmabbruch über die Tastatur genutzt)
RST 5.50 0 2 CVerzweigung nach FC95 (wird vom MINI-DOS genutzt, Floppy Disk)
INTRKennungAdresseNutzung durch das Betriebsprogramm
0C70 0 0 0MAT85, *RESET*
1CF0 0 0 8MAT85, USER, Benutzer-Einsprung
2D70 0 1 0frei, Verzweigung in den RAM-Bereich nach FC8C (1)
3DF0 0 1 8frei, Verzweigung in den RAM-Bereich nach FC8F (1)
4E70 0 2 0MAT85, BREAKPOINT
5EF0 0 2 8frei, Verzweigung in den RAM-Bereich nach FC92 (1)
6F70 0 3 0frei, Verzweigung in den RAM Bereich nach FC98 (1)
7FF0 0 3 8MAT85, PROGRAM ABORT

1) im RAM sind inklusive der angegebenen Adresse 3 Byte frei für einen Sprung in die Anwender-ISR frei für den Anwender

Ausblick:
Von den CPU-Herstellern werden externe Interrupt-Controller angeboten, die eine Erweiterung des Interruptsystems erlauben. Ein Beispiel sei hier der Interrupt-Controller von INTEL, der sehr weit verbreitet ist. Hinweise hierzu bei der Inbetriebnahme der Baugruppe.

Vektor-Interrupt-Baugruppe

Basisschaltung

Die in dem Kapitel 3.2.2 beschriebene Hardware-Erweiterung (ODER-Gatter) für den INTR-Eingang erfordert

  • ein ODER-Gatter auf der CPU-Baugruppe und
  • acht Bus-Leitungen als Interrupt-Leitungen.

In der realisierten Schaltung wird die ODER-Verknüpfung durch eine „wired-or-Verknüpfung“ (verdrahtetes ODER) erreicht. Die Ausgänge der einzelnen Interrupt-Quellen sind in „open-collector-Technik“ ausgeführt; der notwendige „pull-up-„Widerstand“ befindet sich auf der Bus-Aufsteckplatine, ebenso der notwendige Inverter als Schmitt-Trigger. Die verdrahteten ODER-Ausgänge liefern ein aktives Low-Signal. Da der Interrupt-Eingang INTR der 8085-CPU aber High-aktiv ist, wird ein Inverter benötigt. Die Aufsteckplatine muss deshalb bei Betrieb der Vektor-Interrupt-Baugruppe auf dem Bus aufgesteckt sein. Eine Busleitung INTRo ( 24 c ) wird für das verdrahtete ODER benötigt, die zweite Busleitung (25c) ist die INTR-Leitung zur CPU-Baugruppe.

Da der INTR-Eingang keine Flankensteuerung mit Signalspeicherung besitzt, benötigen wir ein Flipflop als Interrupt-Signalspeicher – erinnern wir uns: Ein Interrupt kann gesperrt sein und muss solange anstehen,
bis er angenommen wird. Dieses wird durch das Flipflop erreicht, das bei der Bedienung des Interrupts mit dem INTA-Signal (Interrupt-Annahme, Vektor lesen) gelöscht wird.

Bild 10 Basisschaltung Vektor-Interrupt

Die notwendige Kennung wird über 3 DIL-Schalter eingestellt, hieraus ergeben sich 23 = 8 Adress-Vektoren. Über ein Tristate-Gatter werden die drei Leitungen auf den Datenbus geschaltet, die Freigabe der Kennung erfolgt mit dem INTA-Lesesignal ( siehe auch CPU-Baugruppe, Fachpraktische Übungen Band 1, Kap. 2.1).

Die restlichen Datenbus-Signale (D1, D2, D6 und D7) werden nicht von der Vektor-Interrupt-Baugruppe angesteuert; sie führen ohne Ansteuerung über die pull-up-Widerstände, die sich auf dem Busabschluss befinden, H-Pegel.

Ein Interrupt kann ..

  • durch einen prellfreien Taster (TEST-/Handauslösung)
  • oder durch ein externes Signal ausgelöst werden.

In der folgenden Tabelle sind in Abhängigkeit von den DIL-Schalterstellungen die Kennungen und die entsprechenden Zieladressen aufgelistet.

SX3
D5
SX2
D4
SX1
D3
Kennung
Datenbus
Zieladresse (Adressvektor)
onononC70000
ononoffCF0008
onoffonD70010
onoffoffDF0018
offononE70020
offonoffEF0028
offoffonF70030
offoffoffFF0038

Anmerkung:
Die Leitung D1 wird bei der „Erweiterung der Adressvektoren“ Kapitel 5.3.1 gebraucht, d.h., sie wird aktiv angesteuert

Prioritätskodierung: daisy chain

Bei der Prioritätskodierung „daisy chain“ (Gänseblümchen-Kette) handelt es sich, wie der Name grob beschreibt, um eine Kette, besser gesagt, um eine Prioritäten-Kette. Die einzelnen Vektor-Kodierungsschaltungen (kurz: V-K-Schaltung) sind wie die Glieder einer Kette miteinander verbunden, wobei die erste Schaltung die höchste, die letzte in der Kette die niedrigste Priorität hat (siehe Bild 11).

Bild 11 Prioritätskodierung „daisy-chain“

Beschreibung:

Liegt an der ersten Vektor-Kodierungsschaltung kein Interrupt vor, so ist das Interrupt-Flipflop nicht gesetzt und das INTA-Lesesignal gelangt an die in der Kette folgende V-K-Schaltung. Liegt ein Interrupt an (Bsp.: V-K-Schaltung 2), so ist das I-FF gesetzt und die Weitergabe des INTA-Lesesignals über das UND-Gatter gesperrt. Kommt nun bei der Interrupt-Annahme das INTA-Lesesignal von der CPU, so gelangt es bis zu dem ersten gesetzten I-FF in der Kette. Die CPU kann aufgrund des gesetzten I-FF die Kennung dieser Vektor-Kodierungsschaltung (V-K-Schaltung 2) lesen.

Das gezeigte daisy-chain-Verfahren eignet sich besonders gut für MC-Systeme in Einschubtechnik, wo die Interrupte von den verschiedenen Baugruppen kommen, ausgelöst von den angeschlossenen Peripheriegeräten. Auf dem Systembus werden bei diesem Verfahren nur 2 Busleitungen benötigt,

  • eine Leitung für den Sammelinterrupt und
  • eine Leitung für die Prioritätenkette.

Die Schnittstellen-Bausteine der Firma Zilog beinhalten das daisychain-Verfahren, so dass es sehr einfach ist, ein Vektor-Interrupt-System aufzubauen; sei es auf einer Baugruppe oder in einem Einschubsystem.

Realisierte Schaltung

Die vollständige Schaltung in Bild 12 hat gegenüber der Schaltung in Bild 10 folgende Ergänzungen:

  • Prioritätskodierung: „daisy-chain“,
  • Monoflop für ein zeitlich begrenztes Setzsignal, so dass bei sofortiger Annahme das Interrupt-Flipflop gelöscht werden kann, auch wenn das Anforderungssignal länger ansteht. Die Monoflopeingänge erlauben eine positive/negative Flankenansteuerung.
  • Eine Erweiterung des Adressvektors durch die Leitung Datenleitung D1.

Bild 12 Schaltbild für eine Vektor-Interrupt-Kodierung und Prioritätskodierung

Die Ergänzungen in der realisierten Schaltung “Vektor-Interrupt-Baugruppe“ erweitern die Einsatzmöglichkeiten der Baugruppe.

Durch die Erweiterung des Adressvektors mittels der Datenleitung D1 (Punkt c) ergibt sich die Möglichkeit einer anschaulichen Einführung in den komplexeren Interrupt-Controller 8259, der in den Personal-Computern und in der Industrie häufig eingesetzt wird.

Erweiterung der Adressvektoren

Die CPU 8085 kann, außer den 8 schon beschriebenen Interrupt-Kennungen, eine weitere Kennung lesen und dekodieren.

Diese zusätzliche Kennung in Verbindung mit dem externen Interrupt Controller 8259 ermöglicht eine Erweiterung der bisher kennengelernten Interrupt-Vektoren. Vom CPU-Hersteller wurde dazu eine flexible
Interrupt-Kennung genommen:

CD/16 = 1 1 0 0 1 1 0 1 /2

Diese Kennung ist der Maschinen-Befehl: CALL ADR ( ein Unterprogramm-Aufruf mit der Adresse: ADR ).

Hierdurch ist es möglich, den gesamten von der CPU adressierbaren Speicherbereich über einen von einem externen Interrupt-Controller gelieferten Adressvektor als Interrupt-Adresse zu benutzen.

Um nun die Kennung CD/16 kodieren zu können, benötigen wir auf der Vektor-Interrupt-Baugruppe einen weiteren Schalter zur Einstellung dieser Kennung. Betrachten wir die Kennung CD/16 als Dualcode, so ist zu sehen, dass die Datenleitung „D1“ auf Low-Potential gelegt werden muss.

DatenleitungenD7D6D5D4D3D2D1D0
PegelHHLLHHLH

Ablauf einer Interrupt-Anforderung mit der Kennung CD/16

Stellen wir der CPU nach einer Interrupt-Anforderung über einen vierpoligen DIL-Schalter die Kennung CD/16 zur Verfügung, so erzeugt die CPU nach dem Einlesen dieser Kennung mittels INTA-Signal zwei weitere INTA-Lesezyklen. Mit dem ersten INTA-Lesezyklus liest die CPU das Low-Byte und mit dem zweiten INTA-Lesezyklus das High-Byte des zur Kennung benötigten Adressvektors. Danach schreibt die CPU wie bei einem CALL-Befehl die Rückkehradresse in den vom Stack-Pointer adressierten Stapelspeicher und verzweigt zu dem gelesenen Adress-Vektor. Im Gegensatz zu den bisher kennengelernten Kennungen, die einen bestimmten Adressvektor in der CPU erzeugten, ist dieser Adressvektor einstellbar.

Der Interrupt-Controller 8259 liefert den notwendigen Adressvektor automatisch – er lässt sich durch Steuerwörter programmieren. Bei der Vektor-Interrupt-Baugruppe lässt sich ebenfalls ein Adressvektor
über eine dazu geeignete Hardwarelösung einstellen. Dazu müssen drei Vektor-Interrupt-Schaltungen durch eine „daisy-chain“-Kette miteinander verbunden werden und über die drei parallel zu schaltenden
Eingänge angesteuert werden.

Das folgende Bild 13 zeigt die notwendige „daisy-chain“-Kette, bestehend aus drei Grundschaltungen. Aus diesen drei Grundschaltungen besteht die Vektor-Interrupt-Baugruppe – siehe Anhang. Die Interrupt-Eingänge INTRA bis INTRo sind miteinander verbunden, so dass ein Interruptsignal alle drei Interrupt-Anforderungs-Flipflops (INTR-FF) setzt. An der ersten Schaltung, auf die das INTA-Lesesignal von der CPU geht, muss die Kennung CD eingestellt werden. Die zweite und die dritte Schaltung liefern der CPU den Adressvektor.

Bild 13 Erweiterung der Interrupt-Vektoren über die Kennung CD

Ablauf-Beschreibung beim Eintreffen einer Interrupt-Anforderung:

  1. Das Eintreffen einer Interrupt-Anforderung setzt alle drei INTR-FF.
  2. Nach der Annahme des Interrupt sendet die CPU das INTA-Lese-Signal und liest in der Prioritätenkette die erste Kennung CD (CALL). Hierdurch wird das INTR-FFa der Schaltung A gelöscht.
  3. Mit dem zweiten INTA-Signal liest die CPU die an der zweiten Schaltung eingestellte Kennung – in diesem Fall das Low-Byte des benötigten Adressvektors (INTR-FFb wird gelöscht).
  4. Durch das dritte INTA-Signal wird von der CPU die an der dritten Schaltung eingestellte Kennung gelesen – das High-Byte des benötigten Adressvektors (INTR-FFc wird gelöscht).
  5. Die CPU speichert die Rückkehradresse auf dem Stack und setzt ihre Arbeit an der gelesenen Adresse fort. Die zur Interrupt-Anforderung gehörende Interrupt-Service Routine wird ausgeführt.

Aufgabe: Erstellen Sie sich eine Funktionstabelle mit den möglichen Adressvektoren, die sich mit den 4 DIL-Schaltern auf der Vektor-Interrupt-Baugruppe einstellen lassen – die Kombination CD (Kennung) ist kein Adressvektor.

Bus-Aufsteckplatine (Schmitt-Trigger)

Diese Bus-Aufsteckplatine muß bei der Verwendung der Vektor-Interrupt-Baugruppe auf der Rückwand der Busplatine aufgesteckt sein; ebenso die Bus-Abschlußplatine.

Auf der Bus-Aufsteckplatine befinden sich ..

  • der pull-up-Widerstand mit nachfolgendem Inverter für die INTR-Leitung (Vektor-Interrupt),
  • eine Impulsformerstufe für die 100 Hz-Impulse vom Netzteil (liefert Impulse bei jedem Nulldurchgang der Netzspannung, siehe auch Fachtheoretische Übungen Kap. 7.2, S.146 – die beiden dort angegebenen CMOS-NAND-Gatter mit Schmitt-Triggereingang befinden sich auf dieser Aufsteckplatine und dürfen dann nicht mehr in der Baugruppe „Spannungsregelung“ nachgerüstet sein) und
  • ein Steckbrückensockel, über den die geformten 100 Hz-Impulse den verschiedenen Interrupt-Eingängen zugeführt werden können. Hier ist ein freier Steckbrückenplatz, der die Impulse auf eine freie Busleitung (30a) führt, dort stehen sie über die Adapterkarte für andere Anwendungen zur Verfügung.

ACHTUNG:
Bei Änderung der Steckbrücke von dem freien Platz auf einen Interrupt-Eingang ist immer darauf zu
achten, dass dieser Interrupt-Eingang noch nicht anderweitig genutzt wird !

Bild 14 Schaltbild Bus-Aufsteckplatine

Anwendungsbeispiel 1: START-/STOP-UHR

Die beiden folgenden Anwendungsbeispiele sind einfach aufgebaut, so dass der Lernende sich mit dem Thema „Interrupt-Technik“ Vertraut machen kann. Erweiterungen sollten erfolgen, viel Spaß !

Hinweis: Vor der Durchführung dieses Anwendungsbeispiels sollte die Inbetriebnahme durchgeführt worden sein. Benutzen Sie bitte bei auftretenden Problemen den Inbetriebnahme-Teil.

;Assembler-Programm-Beispiel:
;******************************************
;* Interruptgesteuerte UHR (0 bis 59 sec)*
;******************************************
;mit START-/STOP-Funktion über eine Paralleleingabe (Bit 0)
;Ansteuerung des INTR-Eingangs mit Hilfe der Vektor-Interrupt-Baugruppe:
;Kennung: D7 (RST 2), Schalterstellungen:
;S14 S13 S12 S11
; on off  on off
;Diese Kennung wird von MAT 85 bzw. vom Software-Paket SP1
;nicht genutzt

;Autor: E. Matl, 4/90, Berufsfoerderungszentrum Essen

IS2ADR      EQU   0FC8C       ;Sprungtabelle im RAM
PEING       EQU   06          ;ADR Paralleleingabe, START/STOP
PAUSG       EQU   07          ;ADR Parallelausgabe, Sekundenanzeige
IMASKE      EQU   1F          ;0001 1111, Maske für die 
                              ;nicht benoetigten Interrupteingänge

            ;
            ; Initialisierung
            ;
            MVI   A,0C3       ;Sprung zur ISR2-Routine:
            STA   IS2ADR
            LXI   H,SECISR    ;*SEKUNDEN-UHR*
            SHLD  IS2ADR+1    ;vorbelegen
            MVI   A,IMASKE    ;alle Interrupte bis auf
            SIM               ;INTR sperren

            ;
            ; Hauptprogramm
            ;
NEU:        LXI   H,UHR       ;UHR: loeschen
            XRA   A           ;1/100 Sekunden
            MOV   M,A         ;auf Null
            INX   H           ;Sekunden
            MOV   M,A         ;auf Null
START:      IN    PEING       ;START/STOP - Bit:
            RAR               ;Bit 0 = 1 ?
            JNC   START       ;nein, warten auf START
            EI                ;ja, START

ANZEIG:     LXI   H,UHR+1     ;ADR Sekunden laden
            MOV   A,M         ;Sekunden holen
            OUT   PAUSG       ;und anzeigen
STOP:       IN    PE ING      ;warten auf
            RAR               ;STOP
            JC    ANZEIG      ;nein--> ANZEIG: Uhr läuft
            DI                ;ja, Interrupt sperren
            JMP   NEU         ;neuer Start: Uhr steht

            ;
            ; Interrupt-Service-Routine:
            ; SEKUNDEN-UHR
            ;
SECISR:     PUSH  H           ;die im Hauptprogramm verwendeten
            PUSH  PSW         ;Registerinhalte retten

HSEC:       LXI   H,UHR       ;ADR 1/100 Sekunden laden
            MOV   A,M         ;1/100 Sekunden holen
            CPI   63          ;HSEC = 63/16 = 59/10 ?
            JZ    HSEC0       ;ja--> HSEC0
            INR   M           ;<HSEC> := <HSEC> + 1
            JMP   REGRET      ;Ende

HSEC0:      MVI   M,0         ;1/100 Sekunden auf Null
            INX   H           ;ADR Sekunden laden
SEC:        MOV   A,M         ;Sekunden holen
            CPI   59          ;SEC= 59/10 ?
            JZ    SEC0        ;ja--> SEC0
            ADI   1           ;Sekunden dezimal
            DAA               ;zählen
            MOV   M,A         ;und speichern
            JMP   REGRET      ;Ende

SEC0:       MVI   M,0         ;Sekunden auf Null

REGRET:     POP   PSW         ;Registerinhalte return
            POP   H
            EI                ;Interrupt wieder freigeben EI
            RET               ;zurueck zum unterbrochenen Programm
            ;
            ;
UHR:        DB 0,0            ;Speicher: HSEC, SEC

Vor der Programmeingabe müssen die Hardware-Voraussetzungen, eine ordnungsgemäße Funktion des Programms notwendig sind, sein. Gehen Sie anhand der folgenden Stichpunkte vor:

  • Haben die Ein-/Ausgabe-Baugruppen die richtigen Adressen?
  • Werden die Interrupte 5.5, 6.5 und 7.5 anderweitig genutzt?
    Sie haben eine höhere Priorität. Die Maske in diesem Programm kann z.B. vom Betriebsprogramm wieder umdefiniert werden.
  • Ist die richtige Kennung auf der Interrupt-Vektor-Baugruppe eingestellt? Sind die Kennungen nicht doppelt?
  • Falls ein externer Generator für die 100 Hz-Impulse verwendet wird: “Hat er die richtige Frequenz und den richtigen Pegel (TTL)?“
  • Bei Verwendung des 100Hz-Impulses vom Netzteil: Ist die Brücke an der Bus-Aufsteckplatine an der richtigen Stelle? Der 100Hz-Impuls muss auf der Busleitung 30a zu messen sein.
  • Ist die 100Hz-Impulsquelle an dem richtigen Interrupteingang:
    A,B,C und stimmt dieser mit der Kennung überein?

Anwendungsbeispiel 2: Drehzahlmessung

Hinweis: Vor der Durchführung dieses Anwendungsbeispiels sollte die Inbetriebnahme durchgeführt worden sein. Benutzen Sie bitte bei auftretenden Problemen den Inbetriebnahme-Teil.

;Assembler-Programm-Beispiel:
;********************************************
;* Drehzahlmessung (0 bis 99 Umdr./sec) *
;* Anzeige: BCD-Code an der Parallelausgabe*
;********************************************
;Ansteuerung des INTR-Eingangs mit Hilfe der
;Vektor-Interrupt-Baugruppe:
;Tor-Zeit: Eingang A, 100Hz --> 1 Sekunde Messzeit
;Kennung : D7 (RST 2)
;Schalterstellungen:
; S14 S13 S12 S11
;  on off  on off
;Umdrehungen:
;Eingang B --> Umdrehungsimpulse (1 Impuls/Umdr)
;Kennung : DF (RST 3)
;Schalterstellungen:
;S24 S23 S22 S21
; on off off off
;Beide Kennungen (Aressvektoren) werden von MAT 85 bzw. SP1
;nicht genutzt !

;Autor: E. Matl, 4/90, Berufsfoerderungszentrum Essen

IS2ADR      EQU   0FC8C             ;Sprungtabelle im RAM: RST 2
IS3ADR      EQU   0FC8F             ;Sprungtabelle im RAM: RST 2
PAUSG       EQU   07                ;ADR Parallelausgabe, Cmdrehungsanzeige
IMASKE      EQU   1F                ;0001 1111, Maske für die 
                                    ;nicht benoetigten Interrupteingänge
            ;
            ; Initialisierung
            ;
            MVI   A,0C3             ;Sprung zur
            STA   IS2ADR            ;ISR2-Routine und zur
            STA   IS3ADR            ;ISR3-Routine
            LXI   H,SECISR          ;* TOR-ZEIT (1 SEKUNDE) *
            SHLD  IS2ADR+1          ;vorbelegen (ISR 2)
            LXI   H,UMDISR          ;*UMDREHUNGEN*
            SHLD  IS3ADR+1          ;vorbelegen (ISR 3)
            XRA   A                 ;Null setzen:
            STA   UHR               ;1/100 Sekunden
            STA   UMDR              ;Umdrehungen pro Sekunde
            OUT   PAUSG             ;Umdrehungsanzeige
            MVI   A,IMASKE          ;alle Interrupte bis auf
            SIM                     ;INTR sperren
            EI                      ;allgemeine Interrupt-Freigabe

            ;
            ; Hauptprogramm
            ;
            HLT                     ;anhalten, bis INTR eintrifft !
            JMP   WAIT              ;nach ISR 2/3-->WAIT (Endlos-Schleife)
                                    ;hier wird nur auf einen Uhren- bzw.
                                    ;Umdrehungsimpuls gewartet

            ;
            ;Interrupt-Service-Routine: SEKUNDEN-UHR
            ;  1 Sekunde Torzeit für die Umdrehungsimpulse 
            ;
SECISR:     PUSH  PSW               ;Registerinhalte retten
HSEC:       LDA   UHR               ;1/100 Sekunden holen
            CPI   63                ;HSEC = 63/16 = 59/10 ?
            JZ    HSEC0             ;ja--> HSEC0
            INR   A                 ;<HSEC> := <HSEC> + 1
            STA   UHR               ;speichern
            JMP   REGRET            ;Ende

HSEC0:      LDA   UMDR              ;1 sec um, Umdrehungen pro sec holen
            OUT   PAUSG             ;und anzeigen
            XRA   A                 ;1/100 Sekunden
            STA   UHR               ;und
            STA   UMDR              ;Umdrehungen auf Null
REGRET:     POP   PSW               ;Registerinhalte return
            EI                      ;Interrupt wieder freigeben
            RET                     ;zurueck zum unterbrochenen Programm

            ;
            ; Interrupt-Service-Routine: UMDREHUNGEN
            ;
UMDISR:     PUSH  PSW               ;Registerinhalt retten
            LDA   UMDR              ;Umdrehungen holen
            ADI   01                ;und Impuls
            DAA                     ;dezimal zählen
            STA   UMDR              ;und speichern
            POP   PSW               ;Registerinhalt zurück
            EI                      ;Interrupt wieder freigeben
            RET                     ;zurueck zum unterbrochenen Programm

UHR:        DB    0                 ;Speicher: HSEC
            DB    0                 ;UMDR: Umdrehungen pro Sekunde

Anmerkung:
Sollte kein Motor mit Impulsgeber zur Verfügung stehen, so kann als Ersatz ein Frequenzgenerator mit TTL-Ausgang genommen werden.

Vor der Programmeingabe müssen die Hardware-Voraussetzungen, eine ordnungsgemäße Funktion des Programms notwendig sind, sein. Gehen Sie anhand der folgenden Stichpunkte vor:

  • Haben die Ein-/Ausgabe-Baugruppen die richtigen Adressen?
  • Werden die Interrupte 5.5, 6.5 und 7.5 anderweitig genutzt?
    Sie haben eine höhere Priorität. Die Maske in diesem Programm kann z.B. vom Betriebsprogramm wieder umdefiniert werden.
  • Ist die richtige Kennung auf der Interrupt-Vektor-Baugruppe eingestellt? Sind die Kennungen nicht doppelt?
  • Falls ein externer Generator für die 100 Hz-Impulse verwendet wird: „Hat er die richtige Frequenz, den richtigen Pegel (TTL)“
  • Bei Verwendung des 100Hz-Impulses vorn Netzteil: Ist die Brücke an der Bus-Aufsteckplatine an der richtigen Stelle? Der 100HzImpuls muss auf der Busleitung 30a zu messen sein.
  • Ist die 100Hz-Impulsquelle an dem richtigen Interrupteingang:
    A,B,C und stimmt dieser mit der Kennung überein?

Inbetriebnahme

Die Inbetriebnahme dieser Baugruppe wird hier auf zwei Ebenen durchgeführt. In der ersten Ebene wird mit einer Minimalkonfiguration des MC-Systems gearbeitet. Es ist eine überschaubare Ebene, eventuelle Nebeneffekte durch das Betriebsprogramm oder weitere Baugruppen entfallen hier. Der Lernende kann sich hier ganz auf das Problem „Interrupt-Technik“ und der dazu notwendigen Hardware konzentrieren. In der zweiten Ebene wird mit dem Betriebsprogramm gearbeitet, dieses setzt einige Kenntnisse über das Betriebsprogramm und dessen Unterstützung weiterer IQ-Baugruppen voraus. Die Nutzung von Interrupt-Eingängen (siehe Tabelle Seite 18) muss hier beachtet werden.

Inbetriebnahme Minimalkonfiguration

Für diese Inbetriebnahme benötigen wir außer der Vektor-Interrupt-Baugruppe folgende Baugruppen:

  • CPU
  • RAM (ab der Adresse 0000)
  • Eingabe (Port-Adresse 06)
  • Ausgabe (Port-Adresse 07)
  • Bus-Signalgeber (zur Programm-Eingabe)
  • Bus-Signalanzeige (zur Programm-Eingabe und für den Einzelschritt-Betrieb-Single-Step)
  • Adapterkarte
    (auf diese Karte die Vektor-Interrupt-Baugruppe aufstecken; für Handbetrieb bzw. Messungen)
  • Bus-Aufsteckplatine mit dem Widerstand für den offenen Kollektor-Ausgang: INTR und dem notwendigen Inverter.

Voreinstellungen an der Vektor-Interrupt-Baugruppe:

  • Stecken Sie die Steckbrücke auf CON5 in die Stellung: 1. Baugruppe.
  • Die Steckbrücken der Schaltung A (CON2), der Schaltung B (CON3) und der Schaltung C (CON4) sind in die Stellung „Hand-Betrieb“ zu stecken.
  • Die drei Steckbrücken an der Frontplatte CON6, CON7 und CON8 für die Eingänge mit negativer Flankenansteuerung sind anstatt auf die Eingänge auf Masse zu stecken.

Stellen Sie die drei folgenden Kennungen ein:

Schaltung ASchaltung A hat die höchste Priorität
KennungC7
DatenleitungD5 on
D4 on
D3 on
D1 off
Schaltung BSchaltung A hat die nächsthöchere Priorität
KennungCF
DatenleitungD5 on
D4 on
D3 off
D1 off
Schaltung CSchaltung A hat die niedrigste Priorität
KennungD7
DatenleitungD5 on
D4 off
D3 on
D1 off

Sind alle oben angegebenen Vorarbeiten/ Einstellungen durchgeführt, so können Sie den Baugruppenträger mit den Baugruppen bestücken.

Nachdem Sie alles nochmals überprüft haben, schalten Sie die Versorgungsspannung ein und geben Sie mit dem Bus-Signalgeber das folgende Testprogramm ein.

Testprogramm 1: Minimalkonfiguration:

INTR-NrAdresseDatenMnemonicKommentar
RST 00 0 0 0
0 0 0 1
0 0 0 3
AF
D3 07
C3 40 00
XRA A
OUT 07
JMP 0040
Akkuinhalt := 0
INTR-Nr 0 anzeigen Sprung zur Initialisierung
RST 10 0 0 8
0 0 0 A
0 0 0 C
3E 01
D3 07
C9
MVI A,01
OUT 07
RET
INTR-Nr 1 laden
und anzeigen
zurück
RST 20 0 1 0
0 0 1 2
0 0 1 4
:
:
0 0 4 0
0 0 4 3
0 0 4 5
0 0 4 6
0 0 4 8
0 0 4 A
0 0 4 D
0 0 4 E
3E 02
D3 07
C9
:
:
31 00 20
3E 1F
30
DB 06
E6 01
CA 46 00
FB
C3 46 00
MVI A,02
OUT 07
RET
:
:
LXI SP,2000
MVI A,1F
SIM
IN 06
ANI 01
JZ 0046
EI
JMP0046
INTR-Nr 2 laden
und anzeigen
zurück

Stackpointer setzen
INTR RST 5.5/6.5/7.5
sperren
START bei B0 = 1
B0 = 0, Karten
B0 = 1, Interrupt frei
START abfragen

Stellen Sie, bevor Sie das Testprogramm starten, die Bus-Signalanzeige auf „Einzelschritt-Betrieb“ (Schalter: RUN/HLT auf HLT und Schalter: ON/OFF auf OFF; Hardware-Breakpoint aus). Danach können Sie das Programm starten, indem Sie den Bus-Signalgeber abschalten (Schalter: EIN/AUS auf AUS). Protokollieren Sie das Testprogramm im Einzelschritt-Betrieb nach dem folgenden Schema:

STEPADRDATAMEMRMEMWIOWIORINSTRKommentar
0: RESET0000AF**INTR-Nr 0
10001D3**anzeigen
2000207*
30003C3**Sprung …

Mit dem Schalter B0 an der Paralleleingabe können Sie die Interrupt-Freigabe starten. Bevor der Befehl EI (Interrupt freigeben) nicht ausgeführt Kurde, müssen auf der Vektor-Interrupt-Baugruppe von Hand
ausgelöste Interrupt-Signale ignoriert werden. Sobald der Schalter B0 an der Eingabe eingeschaltet wird, reagiert die CPU auf anstehende Interrupt-Anforderungen. Erzeugen Sie mit den Hand-Tastern (TA1, TA2 und TA3) auf der Vektor-Interrupt-Baugruppe Interrupt-Anforderungen und protokollieren Sie den Ablauf.

In einem weiteren Schritt können Sie vom Einzelschritt-Betrieb in den „RUN-Betrieb“ umschalten und die Baugruppe dynamisch testen. Je nach gedrückter Interrupt-Anforderung wird die entsprechende Interrupt-Nummer an der Ausgabe-Baugruppe angezeigt.

Nach dem vorgegebenen Testprogramm für die ersten drei Interrupt-Vektoren sollten Sie auch die noch fünf verbleibenden Interrupt-Vektoren testen. Dazu müssen auf der Vektor-Interrupt-Baugruppe die Interrupt-Kennungen entsprechend eingestellt werden und die dazu notwendigen ISR-Testroutinen unter den Zieladressen eingegeben werden.

Beispiel:

INTR-Nr 5 –> Kennung: EF –>DIL-Schalter:

DatenleitungD5D4D3D1
DIL-Schalteroffonoffoff

ISR-Testroutine:

Zieladresse: 0028      MVI A,05       ; Interrupt 5
             002A      OUT 07         ; anzeigen
             002C      RET

Interrupt-Anforderungen über die Interrupt-Eingänge

Die Steckbrücken der Schaltung A (CON2), der Schaltung B (CON3) und der Schaltung C (CON4) sind in die Stellung „AUTO“ zu stecken.

Zur Ansteuerung der Baugruppe 1, wird ein Signalgeber mit TTL-Ausgang benötigt. Wenn Sie das zuvor angegebene Testprogramm hier nutzen wollen, müssen Sie einen Signalgeber mit niedriger Ausgangsfrequenz benutzen, um die Signale an der Ausgabe-Baugruppe beobachten zu können.

Für die negativ-Flankeneingänge müssen die Steckbrücken an der Frontplatte CON6, CON7 und CON8 von „Masse“ auf die Eingangsbuchsen (linke Reihe Buchsen A bis C) gesteckt werden. In dieser Stellung
der Steckbrücken funktionieren die positiv-Flankeneingänge nur, wenn die negativ-Flankeneingänge den Pegel „Low“ einnehmen, d.h., sie müssen auf „Low-Pegel“ gelegt oder zur Ansteuerung genutzt werden .

Inbetriebnahme mit dem Betriebsprogramm MAT85

Außer den benötigten Baugruppen unter dem Inbetriebnahme-Teil „Minimalkonfiguration“ wird die ROM-Baugruppe mit dem Betriebsprogramm MAT85 ( ab Adresse 0000) für diese Inbetriebnahme benötigt, RAM-Speicher muss mindestens ab der Adresse E000 vorhanden sein, Durch die Nutzung des Betriebsprogramms MAT85 liegen nun alle Interrupt-Adressvektoren der CPU 8085 am Anfang des ROM-Bereichs von MAT85. Damit der Anwender später mit den vom Betriebsprogramm nicht genutzten Interrupten flexibel arbeiten kann, steht im ROM an den entsprechenden Adressen ein Sprung in den RAM-Bereich (siehe Tabelle Seite 18), Im RAM stehen jeweils 3 Byte für einen Sprung in die notwendige Anwender-Interrupt-Service-Routine.

Sprungliste im ROM:

ROM-AdrMnemonicBemerkungRST
0000JMP 0149RESET, Sprung in den ROM-BereichRST 0
0008JMP 023FUSER-Einsprung, ROM-BereichRST 1
0010JMP FC8Cfrei, Sprung in den RAM-BereichRST 2
0018JMP FC8Ffrei, Sprung in den RAM-BereichRST 3
0020JMP 02DFBREAKPOINT-Einsprung, ROM-BereichRST 4
0024JMP 0286Warmstart-Einsprung, ROM-BereichTRAP
0028JMP FC92frei, Sprung in den RAM-BereichRST 5
002CJMP FC95MINI-DOS: Floppy-Disk-ControllerRST 5.5
0030JMP FC98frei, Sprung in den RAM-BereichRST 6
0034JMP FC9BSPS/BASIC: Abbruch über TastaturRST 6.5
0038JMP 024DPROGRAM-ABBORT-Einsprung, ROM-BereichRST 7
003CJMP FC9ESPS-Interpreter (timer)RST 7.5

Anmerkung:
Eine Beschreibung des Betriebssystems finden Sie in dem Band Fachtheoretische Übungen, Kapitel 7.1 MAT 85 und Kapitel 7.2 Software-Paket SP1.

Voreinstellungen an der Vektor-Interrupt-Baugruppe:

  • Stecken Sie die Steckbrücke auf CON5 in die Stellung: 1. Baugruppe.
  • Die Steckbrücken der Schaltung A (CON2), der Schaltung B (CON3) und der Schaltung C (CON4} sind in die Stellung „Hand-Betrieb“ zu stecken.
  • Die drei Steckbrücken an der Frontplatte CON6, CON7 und CON8 für die Eingänge mit negativer Flankenansteuerung sind anstatt auf die Eingänge auf Masse zu stecken,

Stellen Sie die drei folgenden Kennungen ein:

SchaltungASchaltung A hat die höchste Priorität
KennungC7
DatenleitungD5 on
D4 on
D3 on
D1 off
SchaltungBSchaltung A hat die nächsthöchere Priorität
KennungCF
DatenleitungD5 on
D4 on
D3 off
D1 off
SchaltungCSchaltung A hat die niedrigste Priorität
KennungD7
DatenleitungD5 on
D4 off
D3 on
D1 off

Bevor Sie die Versorgungsspannung einschalten, überprüfen Sie bitte alle Einstellungen. Geben Sie anschließend mit Hilfe des Assemblers das folgende Testprogramm ein.

Testprogramm 2 unter MAT 85:

INTR-NrAdresseDatenMnemonicKommentar
RST 00 0 0 0C3 49 01JMP 0149Sprung nach 149, RESET
RST 10 0 0 8C3 3F 02JMP 023FSprung nach 23F, USER
RST 20 0 1 0C3 8C FCJMP FC8CSprung nach FC8C, RAM
START:E000
E002
E003
E004
E006
E007
E008
:
3E 1F
30
AF
D3 07
FB
76
C3 07 E0
:
MVI A,1F
SIM
XRA A
OUT 07
EI
HLT
JMP E007
:
INTR RST 5.5/6.5/7.5
individuell sperren
Akku := 0 anzeigen
Interrupt allgemein freigeben
und HALT-Zustand
Endlos-Schleife
(verlassen nur durch RESET- oder
Interrupt-Signal möglich
ISR2:E010
E011
E013
E014
:
:
FC8C
3C
D3 07
FB
C9
:
:
C3 10 E0
INR A
OUT 07
EI
RET
:
:
JMP E010
lnterrupte zählen
anzeigen
Interrupt freigeben
zurück

Sprungleiste zur Anwender-
ISR2

Wenn Sie das Testprogramm2 gestartet haben, werden die lnterrupt-Signale der Schaltung C ( niedrigste Priorität) gezählt und an der Ausgabe-Baugruppe angezeigt. Bei Auslösung der anderen beiden Vektor-Interrupt-Signale kann die Endlos-Schleife mit einer Rückkehr in das Betriebsprogramm verlassen werden.

Schaltung B: Rückkehr in das Betriebsprogramm mit Meldung: USER
Schaltung A: Rückkehr in das Betriebsprogramm mit MeJdung: *RESET*
(höchste Priorität)

Dieses kleine Testprogramm für die Vektor-Interrupt-Baugruppe zeigt einmal die Nutzung eines freien Interrupt-Adressvektors ( RST ) und als zweites Beispiel die Nutzung von Betriebssystem-Adressvektoren.

Aufgabe: Testen Sie in gleicher Weise die restlichen 5 Interrupt-Adressvektoren.

Hinweis:
Unter dem RST 4 -Adressvektor erfolgt die Meldung: BREAKPOINT-ERROR mit einer Ausgabe der aktuellen CPU-Registerinhalte. Dieses kann zu Programmtests genutzt werden, wobei durch ein externes Ereignis eine Triggerung bzw. Programm-Terminierung mit einer aktuellen Protokollierung erreicht werden kann.

Inbetriebnahme mit den erweiterten Adressvektoren

Wie in dem Kapitel Erweiterung der Adressvektoren beschrieben, müssen die Interrupteingänge A bis C untereinander verbunden und von einer Interrupt-Quelle angesteuert werden. Dadurch wird in allen drei Schaltungen das Interrupt-Flipflop gesetzt. Die CPU liest bei eingestellter Kennung „CD“ an der Schaltung A diese Kennung sowie die nächsten beiden Adressvektoren und löscht die entsprechenden Interrupt-Anforderungen.

Durch diese Maßnahme steht nur noch ein Interrupteingang zur Verfügung (Nachteil); es ergeben sich weitere Adressvektoren (Vorteil, siehe Anhang A8).

Stellen Sie die folgenden Kennungen ein:

Schaltung A: Kennung : CD –> Schalterstellungen

S14S13S12S11
ononoffon

Schaltung B: Kennung : CF –> Schalterstellungen

S24S23S22S21
ononoffoff

Schaltung C: Kennung : D7 –> Schalterstellungen

S34S33S32S31
onoffonoff

Testprogramm 2 unter MAT 85:

INTR-NrAdresseDatenMnemonicKommentar
START:E000
E002
E003
E004
E006
E007
E008
:
3E 1F
30
AF
D3 07
FB
76
C3 07 E0
:
MVI A,1F
SIM
XRA A
OUT 07
EI
HLT
JMP E007
:
INTR RST 5.5/6.5/7.5
individuell sperren
Akku := 0 anzeigen
Interrupt allgemein freigeben
und HALT-Zustand
Endlos-Schleife
(verlassen nur durch RESET- oder
Interrupt-Signal möglich
ISRCALL:D7CF
D7D0
D7D1
D7D2
3C
D3 07
FB
C9
INR A
OUT 07
EI
RET
lnterrupte zählen
anzeigen
Interrupt freigeben
zurück

Wenn Sie das Testprogramm 3 gestartet haben, werden die Interrupt-Signale an den untereinander verbundenen Eingängen gezählt und an der Ausgabe-Baugruppe angezeigt. Auf diese Weise lässt sich die richtige Funktion der gesamten Interrupt-Logik des MC-Systems testen. Die Frequenz des eintreffenden Interrupt-Signals sollte nicht zu hoch sein, so dass die richtige Zählung an der Ausgabe verfolgt werden kann. Ist ein Zweikanal-Oszilloskop vorhanden, kann die Eingangs- und Ausgangsfrequenz verglichen werden.

Hinweis: Die Frequenz an B0 der Ausgabe hat die halbe Frequenz des Interruptsignals – positive Flanke löst den Interrupt aus.

Interrupt-Adresstabelle

Anschluss
Signal
PrioritätZieladresseAuslösung durch
RST 0 (C7)freigegeben durch EI-Befehl50000H-Pegel bis zur Annahme
RST 1 (CF)freigegeben durch EI-Befehl50008H-Pegel bis zur Annahme
RST 2 (D7)freigegeben durch EI-Befehl50010H-Pegel bis zur Annahme
RST 3 (DF)freigegeben durch EI-Befehl50018H-Pegel bis zur Annahme
RST 4 (E7)freigegeben durch EI-Befehl50020H-Pegel bis zur Annahme
RST 5 (EF)freigegeben durch EI-Befehl50028H-Pegel bis zur Annahme
RST 6 (F7)freigegeben durch EI-Befehl50030H-Pegel bis zur Annahme
RST 7 (FF)freigegeben durch EI-Befehl50038H-Pegel bis zur Annahme
RST 5.5maskierbar durch SIM-Befehl4002CH-Pegel bis zur Annahme
RST 6.5maskierbar durch SIM-Befehl30034H-Pegel bis zur Annahme
RST 7.5maskierbar durch SIM-Befehl2003CL-H-Flanke
Anforderung wird bis
zur Annahme gespeichert
TRAP (RST 4.5nicht maskierbar10024L-H-Flanke und H-Pegel
bis zur Annahme

Interrupt-Masken-Register

I-Register – Schreiben

BITRegisterBedeutung
7SODSOD-Ausgang der CPU
6SOD ENFreigabe: H
5Xnicht verwendet
4RES 7.5Rücksetzen des RST 7.5-Flip-Flops durch H-Pegel
3MSEMaske
L: wird ignoriert
H: wird gesetzt
2M 7.5Unterbrechungsmaske:
L: Interrupt erlaubt
H: Interrupt gesperrt
1M 6.5Unterbrechungsmaske:
L: Interrupt erlaubt
H: Interrupt gesperrt
0M 5.5Unterbrechungsmaske:
L: Interrupt erlaubt
H: Interrupt gesperrt

I-Register – Lesen

BITRegisterBedeutung
7SIDPegel am Eingang SID der CPU
6I 7.5Flags für anstehende Unterbrechungen
5I 6.5Flags für anstehende Unterbrechungen
4I 5.5Flags für anstehende Unterbrechungen
3IEUnterbrechungs-Freigabe-Bit
H: Maske ist freigegeben
2M 7.5Aktuelle Unterbrechungsmaske:
L: Interrupt erlaubt
H: Interrupt gesperrt
1M 6.5Aktuelle Unterbrechungsmaske:
L: Interrupt erlaubt
H: Interrupt gesperrt
0M 5.5Aktuelle Unterbrechungsmaske:
L: Interrupt erlaubt
H: Interrupt gesperrt

Adressvektoren incl, Erweiterung für den Interrupt INTR

SX
D5
SX
D4
SX
D3
SX
D1
Kennung
Datenbus
Zieladresse
Adressvektor
ononononC5( C5 )
onononoffC70000
ononoffonCDCALL
ononoffoffCF0008
onoffononD5D5
onoffonoffD70010
onoffoffonDDDD
onoffoffoffDF0018
offonononE5E5
offononoffE70020
offonoffonEDED
offonoffoffEF0028
offoffononF5F5
offoffonoffF70030
offoffoffonFDFD
offoffoffoffFF0038

SX: DIL-Schalter S1 bis S3 (Schaltung Abis C)

Anmerkung:
Diese Tabelle ist eine Erweiterung der Adressvektor-Tabelle von Seite 20 der Funktionsbeschreibung. Für die Erweiterung werden alle drei Vektor-Interrupt-Schaltungen (A, B und C) auf der Baugruppe benötigt.
An der Schaltung A muss dann die Kennung „CD“ (CALL) eingestellt werden. Die Schaltungen B und C liefern dann das Low- bzw. High Byte des notwendigen Adressvektors ( Zieladresse in Klammern ) für die Kennung „CD“.

Beispiel:

Schaltung ASchaltung BSchaltung C
CDCFD7

ergibt: CALL D7CF

Hinweise zur Inbetriebnahme

Nützliche Hinweise zum Betrieb und zur Erweiterung (2. Baugruppe)

Hier soll nun eine kurze Zusammenfassung von Hinweisen erfolgen – sozusagen eine Checkliste.

Denken Sie daran, dass das Interruptsystem Ihres Mikrocomputers unter Umständen noch nie genutzt wurde – verdeckte Fehler sind möglich. Eine einfache und überschaubare Inbetriebnahme ist auf jeden Fall für den Einstieg und für eine m6gliche Fehlersuche von Vorteil. Anderweitige Nutzung des Interruptsystems wird dabei ausgeschlossen.

Zum Betrieb der Vektor-Interrupt-Baugruppe ist die Bus-Aufsteckplatine erforderlich, sie liefert für den “offenen Kollektorausgang“ der Interruptleitung den notwendigen „pull-up-Widerstand“ und stellt die Verbindung zur Bus-INTR-Leitung über einen Inverter her.

Der netzsynchrone 100 Hz-Impuls kann nur eine TTL-Last treiben. Bei einer Nutzung in Zusammenhang mit der Erweiterung der Adressvektoren (Ansteuerung der drei untereinander verbundenen Interrupteingänge) muss ein Treiber-IC zwischengeschaltet werden.

Werden zwei Vektor-Interrupt-Baugruppen zusammengeschaltet -Erweiterung der „daisy-chain-Ketten auf 6 Interruptquellen-, so muss eine Baugruppe über die Steckbrücke CON5 auf Baugruppe 1 und die zweite Baugruppe muss über die Steckbrücke CON5 auf Baugruppe 2 eingestellt sein. Die auf Baugruppe 1 eingestellte Vektor-Interrupt-Baugruppe liegt dann in der Prioritätenkette vor der Baugruppe 2.
Die beiden Baugruppen sollten nebeneinander gesteckt sein, da das INTA-Lesesignal extern verbunden werden muss:

Baugruppe 1: INTA-Übertrag AUS verbunden mit

Baugruppe 2: INTA-Übertrag EIN

Bevor Sie ein Beispiel aus dieser Beschreibung ausprobieren, überprüfen Sie bitte folgende Punkte:

  • Sind die Kennungen richtig eingestellt?
  • Kommen keine Kennungen doppelt vor?
  • Haben die Steckbrücken CON2, CON3 und CON4 (HAND/AUTO) die richtige Position?
  • Falls Sie lnterrupte über die Interrupteingänge A, Bund C auslösen, so müssen die Steckbrücken CON2, CON3 und CON4 auf “AUTO“ gesteckt sein.
  • Haben die Interruptsignale die richtigen Pegel und eine entsprechende Flankensteilheit?
  • Pegel lassen sich gut im „Hand-Betrieb“ der Vektor-Interrupt-Baugruppe im Zusammenspiel mit dem „single-step-Betrieb“ des MC-Systems überprüfen.
  • Ist die Bus-Aufsteckplatine auf den Bus gesteckt?
  • Erstellen Sie sich zusätzlich zu einem Programmablaufplan (Flussdiagramm)
    Ihres Programms einen Interruptplan mit den verwendeten Interrupten, Kennungen, Adressvektoren.
    Prioritäten und die zeitliche Abfolge der Ansteuerung müssen stimmen und in den Plan aufgenommen werden.

Wichtige Hinweise für die Benutzer der MAT 32 K TerminalVersion

Durch die Anpassung des MAT85 Betriebsprogramm an die Terminalversion hat sich die Sprungliste im ROM verändert. Entgegen der Beschreibung auf S. 33 ergibt sich für den Anwender der Terminalversion
folgende Sprungliste:

Sprungliste im ROM:

ROM-AdrMnemonicBemerkungRST
0000JMP 0149RESET, Sprung in den ROM-BereichRST 0
0008JMP 023FUSER-Einsprung, ROM-BereichRST 1
0010CALL 082DSerielle Eingabe, ROM-BereichRST 2
0018JMP 0877Sprung im ROM-BereichRST 3
0020JMP 02DFBREAKPOINT-Einsprung, ROM-BereichRST 4
0024JMP FC8CSprung in den RAM-BereichTRAP
0028JMP FC92frei, Sprung in den RAM-BereichRST 5
002CJMP FC95MINI-DOS: Floppy-Disk-ControllerRST 5.5
0030JMP FC98frei, Sprung in den RAM-BereichRST 6
0034JMP FC9BSPS/BASIC: Abbruch über TastaturRST 6.5
0038JMP 024DPROGRAM-ABBORT-Einsprung, ROM-BereichRST 7
003CJMP FC9ESPS-Interpreter (Timer)RST 7.5

Ein Vergleich der Sprunglisten zeigt, dass sowohl RST 2 als auch RST 3 für den Anwender der Terminalversion nicht nutzbar ist. Bei der Durchführung der Anwendungsbeispiele 1 und 2 sowie vom Testprogramm 2 müssen daher andere Vektoren als vorgegeben eingestellt werden (RST 5 und/oder RST 6).

Stromlaufplan – Interrupt-Vektor-Karte

Bestückungsplan

Leiterplatte

Stromlaufplan CPU-Baugruppe

BUS Aufsteckplatine


Weitere Informationen

Dokumente