Stand: 2004-03
Thomas Mertin
Netzwerk- und Elektrotechnik
D-41334 Nettetal
Beispiel: Uhr
Es soll die Einschaltdauer des Rechners in Sekunden gemessen werden. Dazu muß jede Sekunde ein Speicherplatzpaar (C200, C201) inkrementiert werden.
Rufe das Unterprogramm auf, das bei der niedrigen Speicheradresse beginnt, die durch n spezifiziert wird.
RST n = 11nnn111
n = Restartnummer 0...7
Einsprungadresse = Restartnummer * 8 (Dezimal)
Beispiel: RST 5
Einsprungadresse = 5 * 8 = 4010 = 28H (0028H ROM-Bereich!)
RST 0 |
RST 1 |
RST 2 |
RST 3 |
RST 4 |
RST 5 |
RST 6 |
RST 7 |
0000H |
0008H |
0010H |
0018H |
0020H |
0028H |
0030H |
0038H |
=>
Je Einsprungadresse steht im ROM-Bereich (0000 - 0040H) ein Speicherbereich von 8 Byte zur Verfügung.
Der dort stehende Programmcode muß beim Erstellen des ROM's mit berücksichtigt werden (JMP zu einem RAM-Bereich).
Bei einen Interrupt Aufruf muß ein RST-Befehl per Hardware erzeugt werden.
Impulsdiagramm: RST n als Reaktion auf INTR = 1
Wenn eine Anwendung nicht alle RST-Befehle zur Bedienung von Unterbrechungen verwendet, besteht die Möglichkeit Unterprogramme mittels RST-Befehl aufzurufen.
Häufig verwendete Unterprogramme werden dann an geeigneten RST - Adressen gebracht, dann können diese Unterprogramme mit einem einzelnen Byte bestehenden RST-Befehl anstatt einem CALL-Befehl aus drei Bytes aufgerufen werden.
Problem:
Hardware für Uhr
RST 5 = EFH = 1110 11112
Interrupt Steuerung (EI = Enable Interrupt; DI = Disable Interrupt)
Vollständige Interruptsteuerung (Interrupt-Controller 8259)
Bei Adresse 0028H (ROM-Bereich) steht der Befehl JMP 0FC92 (RAM-Bereich).
Der Zeitzähler steht auf Adresse 0C200H und 0C201H.
Der RIM-Befehl liest in den Akkumulator Daten, die sich auf die Unterbrechungen und den seriellen Eingang beziehen. Die Daten stellen folgende Informationen dar:
Unmittelbar nach einer TRAP-Unterbrechung muß der RIM-Befehl als Teil der Unterbrechungsbedienroutine ausgeführt werden, wenn es notwendig ist, den Zustand der Unterbrechungs Freigabe zur Unterbrechungszeit später wieder herzustellen. Bit 3 des Akkumulators wird (nur in diesem speziellen Fall nach TRAP) mit dem Zustand des Unterbrechungs Freigabe Flip-Flops (IE) geladen, wie er vor Auftreten der TRAP-Unterbrechung bestand.
Nachfolgend einer Unterbrechung, ausgelöst durch ein Signal ein RST 5.5, RST 6.5, RST 7.5 oder ein INTR-Eingang, zeigt das Bit 3 den momentanen Zustand der Unterbrechungsfreigabe.
Bit 6 des Akkumulators (I 7.5) wird geladen mit dem Zustand des RST 7.5 Flip-Flops. Dieses Flip-Flop wird immer gesetzt durch eine positive Flanke am RST 7.5 Eingang, auch wenn die RST 7.5 Unterbrechung maskiert ist.
Inhalt des Akkumulators nach Ausführung des RIM-Befehls
SID: Serieller Eingang SID
I7.5, I6.5, I5.5: Anstehende Unterbrechungen
IE: Unterbrechungs Freigabe Flip-Flip
M7.5, M6.5, M5.5: Unterbrechungsmasken
nach oben
3. Der SIM (Setzt Unterbrechungsmaske)-Befehl
Die Ausführung des SIM-Befehls verwendet den Inhalt des Akkumulators, um folgende Funktionen durchzuführen:
Zur Programmierung der Unterbrechungsmasken muß zunächst Bit 3 des Akkumulators auf "1" gesetzt sein. Eine gesetzte "1" in den Bits 0, 1 und 2 des Akkumulators sperrt die dazu korrespondierenden Unterbrechungen RST 5.5, RST 6.5 und RST 7.5, eine "0" gibt sie entsprechend frei (falls generell Unterbrechungen freigegeben sind durch den EI-Befehl). Ein nachfolgender SIM-Befehls setzt aktuell die Masken. Falls Bit 3 im Akkumulator auf "0" zurückgesetzt ist, hat die Ausführung eines SIM-Befehls keine Auswirkung auf das Unterbrechungsmaskenregister.
Ist das Bit 4 im Akkumulator gesetzt, wenn ein SIM-Befehl ausgeführt wird, so wird das RST 7.5 Flip-Flop zurückgesetzt. Die RST 7.5 Unterbrechung unterscheidet sich von den anderen dadurch, daß ein internes Flip-Flop durch eine steigende Flanke am RST 7.5 Eingang gesetzt wird, auch wenn der Sprung zur Bedienroutine durch die Unterbrechungsmaske unterbunden ist. Dieses Flip-Flop bleibt solange gesetzt, bis es durch ein Rücksetzsignal am Eingang, einen SIM-Befehl mit Bit 4 im Akkumulator = "1", oder durch interne Unterbrechungsannahme mit Ausführung eines entsprechenden Unterprogrammsprungs zur Bedienroutine (Maske und Unterbrechungssystem müssen freigegeben sein) rückgesetzt wird. Ein Rücksetzsignal am Eingang setzt auch immer alle drei Unterbrechungsmaskenbits auf "1" (Unterbrechungen gesperrt).
Ist das Bit 6 im Akkumulator auf "1" gesetzt, wenn ein SIM-Befehl ausgeführt wird, so wird der Wert des Bit 7 im Akkumulator in das Flip-Flop für den seriellen Ausgang SOD übernommen und somit extern verfügbar. Diese Flip-Flop bleibt unverändert bei der Ausführung eines SIM-Befehls, wenn Bit 6 des Akkumulators auf "0" rückgesetzt ist.
Durch Rücksetzen am Eingang wird das Flip-Flop für den seriellen Ausgang (SOD) immer auf "0" rückgesetzt.
Inhalt des Akkumulators vor Ausführung des SIM-Befehls
SOD: Serieller Ausgang SOD
SOE: Übernahme SOD-Freigabe
x: undefiniert
R7.5: Rücksetzen RST7.5 Flip-Flop
MSE: Maske Setzen Freigabe
M7.5, M6.5, M5.5: Unterbrechungsmasken
nach oben | ||
Seite zurück | Inhalt | Seite vor |
Startseite |
Nachricht an: webmaster@mertech.de