ctr

DeMon48_128k

intel 8049 / MCS-48 Hardware-Debugger & Monitor

Dokumentation - Kapitel 2


2.0.0 8049-Primer

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) :

DevicePackageROMEPROMRAMI/ONotes
8035DIP40--6427RAM-Standby
8048DIP401k-6427RAM-Standby
8748DIP40-1k6427-
8039DIP40--12827RAM-Standby
8049DIP402k-12827RAM-Standby
8749DIP40-2k12827-
8040DIP40--25627RAM-Standby
8050DIP404k-25627RAM-Standby
8021DIP281k-6420-
8022DIP402k-6426 + 2xAD-
8041DIP401k-6418Master interface
8741DIP40-1k6418Master interface

Erwähnung der MCS48-Familie in Publikationen der 1970er und -80er Jahre :

ZeitpunktTitelPublikation
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

2.1.0 Der 8049 Mikrocontroller

Der 8049 µC besteht neben den Bestandteilen der eigentlichen CPU (ALU, Register etc.) aus :

  • einem als maskenprogrammiertes ROM ausgeführten internen 2kByte Programmspeicher
  • 128 Byte RAM (eigene Standby-/LowPower-Versorgung möglich)
  • einem 8-Bit Timer/Counter
  • drei 8-Bit Ports (BUS, P1, P2)
  • Oszillator-Hardware
  • Interrupt-Logik : 2 Quellen (externer Interrupt und Timer-/Counter-Überlauf), 1 Ebene

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.

Enable T0-Clock-output
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.

2.2.0 8049-Minimalsystem mit externem Programmspeicher

8049 Minimalsystem mit externem EPROM
Bild: Mit dieser Schaltung lässt sich das Programm im externen EPROM 2732 ausführen

BauteilFunktion
8049Mikrocontroller
74LS373"Octal D-Type Latch With 3 State Output" zum Zwischenspeichern von A0...A7
2732"32 Kbit (4Kb x 8) UV EPROM" als Programmspeicher

2.3.0 8049-Steuersignale, -Timing

2.3.1 EA

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.

2.3.2 *RESET

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 :

  1. PC = 0 (Program Counter)
  2. SP = 0 (Stack Pointer, S0, S1, S2)
  3. RB = 0 (Register Bank Flag)
  4. MB = 0 (Memory Bank Flip-Flop)
  5. P1 = P2 = Input Mode (Port1, Port2)
  6. Interrupts werden deaktiviert (T und *INT)
  7. Timer wird gestoppt
  8. Timer-Flag = 0
  9. F0 = F1 = 0 (User Flag0, User Flag1)
  10. Stoppt die Ausgabe von CLK (fosc/3) an T0 (Test0)

2.3.3 *INT

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.

2.3.4 ALE

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.

Timing MCS-48 Instruction Fetch

2.3.5 *PSEN

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.

2.3.6 *RD

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.

Timing MCS-48 Data Read

2.3.7 *WR

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.

Timing MCS-48 Data Write

2.3.8 PROG

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
BefehlP2.3P2.2
MOVD A,Pp00
MOVD Pp,A01
ORLD Pp,A10
ANLD Pp,A11
pP2.1P2.0
400
501
610
711

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.

Timing MCS-48 Portexpander Read

Timing MCS-48 Portexpander Write

2.3.9 8049-Timing

MCS-48 Timing