intel 8049 / MCS-48 Hardware-Debugger & Monitor
Der 8049-Mikrocontroller gehört zur intel MCS-48 Single Chip Microcomputer Familie, die 1976 eingeführt und damals sinngemäß als "Erster vollständiger Computer auf einem Chip" (von intel) beworben wurde. Sie wurde zunächst in NMOS-Technologie gefertigt und ließ sich mit einer maximalen Oszillatorfrequenz von 6MHz, später 11MHz, betreiben. Beim Betrieb mit 11MHz ergibt sich eine Befehlszykluszeit von 1,36µs (T[µs] = 15 / fosc[MHz]), in denen 1-Byte-/1-Zyklus-Befehle, deren Anteil mehr als 50% an dem aus 96 Befehlen bestehenden Befehlssatz beträgt, ausgeführt werden. Spätere Ausführungen wurden im HMOS-II-Prozess mit geringeren Strukturgrößen (Kanallänge ca. 2µm) und Gatterverzögerungen (ca. 30ns) gefertigt. Die µCs der MCS-48 Familie sind für eine Harvard-Architektur ausgelegt, also zur Nutzung von logisch und physisch getrenntem Befehls- und Datenspeicher.
MCS-48 µC Family Members & On-Chip Ressources (1979) :
Device | Package | ROM | EPROM | RAM | I/O | Notes |
---|---|---|---|---|---|---|
8035 | DIP40 | - | - | 64 | 27 | RAM-Standby |
8048 | DIP40 | 1k | - | 64 | 27 | RAM-Standby |
8748 | DIP40 | - | 1k | 64 | 27 | - |
8039 | DIP40 | - | - | 128 | 27 | RAM-Standby |
8049 | DIP40 | 2k | - | 128 | 27 | RAM-Standby |
8749 | DIP40 | - | 2k | 128 | 27 | - |
8040 | DIP40 | - | - | 256 | 27 | RAM-Standby |
8050 | DIP40 | 4k | - | 256 | 27 | RAM-Standby |
8021 | DIP28 | 1k | - | 64 | 20 | - |
8022 | DIP40 | 2k | - | 64 | 26 + 2xAD | - |
8041 | DIP40 | 1k | - | 64 | 18 | Master interface |
8741 | DIP40 | - | 1k | 64 | 18 | Master interface |
Erwähnung der MCS48-Familie in Publikationen der 1970er und -80er Jahre :
Zeitpunkt | Titel | Publikation |
---|---|---|
1976 / 02 | "Intel prepares 8-bit processor for low end" | "Electronics", 05.02.1976 |
1976 / 11 | "Single-chip 8- bit microcomputer fills gap between calculator types and powerful multichip processors" (8048 (Mask ROM) / 8748 (EPROM); 1kB ROM, 64bytes RAM; 6MHz max. clock frequency) | "Electronics", 25.11.1976 |
1977 / 03 | "Intel to double microcomputer chip program memory" (2kB 8049 / 8039) | "Electronics", 03.03.1977 |
1977 / 03 | "Programmer added for MCS-48 family" (Prompt-48) | "Electronics", 31.03.1977 |
1978 / 02 | "Single-chip µC has twice memory of MCS-48s" (2kB 8049 / 8039) | "Electronic Design", 15.02.1978 |
1978 / 04 | "IBM receives license for MCS-48, UPI-41 architectures and software" | "Electronics", 27.04.1978 |
1978 / 05 | "Intel's 8022 packs a-d converter, plus" | "Electronics", 11.05.1978 |
1978 / 05 | "Intel speeds up 8049 and 8039 by 80% to 11 MHz" | "Electronics", 11.05.1978 |
1978 / 05 | "Microcontroller includes a-d converter for lowest-cost analog interfacing" (8022) | "Electronics", 25.05.1978 |
1979 / 05 | "Intersil's C-MOS drive" (MCS-48 C-MOS devices; 87C48, 87C41, 80C48, 80C41, 80C49, 80C35) | "Electronics", 10.05.1979 |
1980 / 02 | "Valvo, the Hamburg-based component-producing subsidiary of NV Philips Gloeilampenfabrieken, is now gearing up for production of the 8048 microcomputer" | "Electronics", 28.02.1980 |
1980 / 02 | "8048 to be made with Intel's HMOS process" | "Electronics", 28.02.1980 |
1980 / 09 | "National Semiconductor quadruples memory of 8048 microcomputer" (INS8050: 4kB ROM, 256bytes RAM) | "Electronics", 25.09.1980 |
1981 / 03 | "Intel announced [...] a [...] 'automotive grade' version of its MCS-48 single-chip microcomputer family (able to operate at - 40° to + 100°C" | "Electronics", 24.03.1981 |
Der 8049 µC besteht neben den Bestandteilen der eigentlichen CPU (ALU, Register etc.) aus :
Zusätzlich verfügt er über zwei "Test" Anschlüsse (T0 und T1), die je nach Programmierung für bedingte Sprünge abgefragt, als Eingang für den 8-Bit-Zähler oder als Ausgang für das "CLK"-Signal (fclk = fosc / 3), mit dem die interne Zustandsmaschine zur Erzeugung der S1 bis S5 Zyklen, aus denen ein Maschinenzyklus besteht, getaktet wird, dienen können.
Bild: Ausführen des "ENT0 CLK"-Befehls (Opcode 0x75) zur Ausgabe von CLK an T0
Indem man an den "EA"-Anschluss (External Access) H-Pegel legt, lässt sich das interne ROM abschalten und ein externer Speicherbaustein als Programmspeicher mit der Basisadresse 0x000 verwenden : der 8049 µC verhält sich dann exakt wie die sonst identische, aber ROM-lose Version 8039.
Zum Zugriff auf einen externen Programmspeicher werden die Signale von BUS und der unteren Hälfte von P2 (P2.0 bis P2.3) herangezogen. Auf BUS liegen im Zeitmultiplexverfahren abwechselnd die unteren 8-Bit der Adresse und Daten an, das untere Nibble (die niederwertigen 4Bit) von P2 signalisiert die oberen 4Bit der Adresse bzw. zu bestimmten Zeitpunkten während eines Befehlszyklus, der aus den fünf Zuständen S1 bis S5 der CPU-Zustandsmaschine besteht, die auf P2 geschriebene I/O-Information.
Bild: Mit dieser Schaltung lässt sich das Programm im externen EPROM 2732 ausführen
Bauteil | Funktion |
---|---|
8049 | Mikrocontroller |
74LS373 | "Octal D-Type Latch With 3 State Output" zum Zwischenspeichern von A0...A7 |
2732 | "32 Kbit (4Kb x 8) UV EPROM" als Programmspeicher |
Ist der EA-Eingang (External Access) an Pin 7 des µCs auf High-Potential (+5V), erfolgen alle Programmspeicherzugriffe mittels ALE, *PSEN, BUS, P2.0, P2.1, P2.2 und P2.3 auf externe Speichereinheiten, der interne Programmspeicher ist deaktiviert.
Low-Pegel-aktiver Initialisierungseingang an Pin 4 des µCs. Muss mindestens 10ms aktiviert (Low) werden, nachdem Vcc, Vdd und Vss stabil anliegen. Muss mindestens 5 Maschinen-Zyklen (T(Reset)[s] = 75 / fosc[Hz]) aktiviert (Low) werden, wenn sich der Oszillator des µC bereits stabilisiert hat.
Durch Aktivieren des Reset-Eingangs wird folgender Zustand hergestellt :
Low-Pegel-aktiver Eingang für externe Interrupt-Anforderung an Pin 6 des µC. Muss mindestens 3 Maschinen-Zyklen (T(*INT)[s] = 45 / fosc[Hz]) aktiviert (Low) sein, um eine zuverlässige Funktion der Interruptanforderung zu gewährleisten. Nachdem der µC die Interrupt-Anforderung erkannt hat, werden PC und PSW auf dem Stack gesichert und PC wird mit Adresse 003 (immer in MB0) geladen - auch wenn gerade der obere 2kB-Block 0x800 bis 0xFFF durch einen "SEL MB1"-Befehl aktiviert oder vorbereitet ist. Zur Rückkehr aus der ISR ist der "RETR"-Befehl zu nutzen.
Nach einem Reset ist die Auslösung eines Interrupts durch den *INT-Anschluss deaktiviert und kann durch den Befehl "EN I" (Opcode 0x05) aktiviert werden. Auch wenn Interrupts durch den *INT-Eingang deaktiviert sind, kann der Pegel am *INT-Anschluss über den "JNI"-Befehl für bedingte Sprünge ausgewertet werden. Die Erkennung von Interrupt-Anforderungen am *INT-Eingang kann im Programm durch Ausführen des "DIS I"-Befehls (Opcode 0x15) deaktiviert werden.
Die fallende Flanke des ALE-Ausgangs (Address Latch Enable) an Pin 11 des µCs zeigt an, dass gültige Adressinformation auf BUS vorhanden ist und kann zur Übernahme der Adresse in einen FlipFlop-Zwischenspeicher genutzt werden. Zum Zeitpunkt der steigenden Flanke des ALE-Signals sind immer die zuletzt geschriebenen I/O-Informationen an P2.0 bis P2.3 verfügbar und können ebenfalls in ein entsprechendes FlipFlop übernommen werden.
Mit Hilfe des low-aktiven *PSEN-Ausgangs (Program Store Enable) an Pin 9 des µCs wird aus einem externen Programmspeicher gelesen. Die vom Programmspeicher bei *PSEN=low auf BUS gelegte Information wird vor der steigenden Flanke von *PSEN in den µC übernommen.
Der low-aktive *RD-Ausgang (Read) an Pin 8 des µCs dient zur Übernahme von Informationen von einer externen Einheit (RAM / IO etc.). Wenn *RD low wird, legt die externe Einheit die Informationen auf BUS, wo sie dann vor der steigenden Flanke des *RD-Signals in den µC übernommen werden. Zur Erzeugung des *RD-Signals kommen bei EA=high nur die "MOVX A,@Ri"-Befehle (1 Byte, 2 Zyklen) in Frage.
Der low-aktive *WR-Ausgang (Write) an Pin 10 des µCs dient zur Übernahme von Informationen in eine externen Einheit (RAM / IO etc.). Wird *WR low, legt der µC die an die externe Einheit zu übermittelnde Information auf BUS, wo sie dann bei der steigenden Flanke des *WR-Signals stabil anliegt und von der externen Einheit übernommen wird. Zur Erzeugung des *WR-Signals kommen bei EA=high nur die "MOVX @Ri,A"-Befehle (1 Byte, 2 Zyklen) in Frage.
Die fallende Flanke des PROG-Ausgangs an Pin 25 des µCs signalisiert, dass an P2.0 bis P2.3 ein Befehlscode und eine Portadresse ausgegeben wird. Die zugehörigen Daten werden bei der steigenden Flanke des PROG-Signals in eine externe Einheit oder vom µC übernommen.
Der Befehlscode wird durch den eingesetzten Befehl des MCS-48 Befehlssatzes bestimmt | Die Portadresse wird durch den in diesem Befehlscode angegebenen Port bestimmt | ||||||||||||||||||||||||||||||
|
|
Die Daten entsprechen bei Schreibzugriffen dem unteren Nibble (Bit0...Bit3) des Akkumulator-Inhalts bzw. werden bei Lesezugriffen mit Hilfe des PROG-Signals durch den µC in das untere Nibble des Akkumulator-Inhalts übernommen.