Einen vollständigen 80C31-Computer auf Steckbrettern bauen

Der Philips P80C31SFPN ist ein ROM-loser Prozessor aus der 8051-Familie. Er benötigt einen Takt, eine Reset-Schaltung, ein externes Programm-ROM und ein Latch, das die unteren Adressbits vom Datenbus trennt. Dieser Aufbau ergänzt 8 KB externes RAM und zwei Diagnose-LEDs. Alle unten genannten aktiven Bauteile sind im iMania-Shop erhältlich; dazu kommen gewöhnliche passive Bauteile, Drähte, eine geregelte 5-V-Versorgung und ein Programmiergerät für das ROM. Dies ist eine geprüfte Verdrahtungsanleitung, aber keine Behauptung, dass die fertige Schaltung praktisch getestet wurde.

Blockschaltbild mit 80C31, Adresslatch, Programm-ROM und Daten-RAM
Die vier ICs und ihre Signale. Auf dem Handy seitlich wischen.

Bauteile

  • 1 × Philips P80C31SFPN, DIP-40 — 80C31-CPU — Prozessor ohne internes Programm-ROM.
  • 1 × SN74ALS873BNT, DIP-24 — 8-Bit-Adresslatch — Hält A0–A7 fest.
  • 1 × AT27C512R-55PC, DIP-28 — 64-KB-OTP-ROM — Programmspeicher; vorher programmieren.
  • 1 × HM6264LP-15, DIP-28 — 8-KB-SRAM — Externer Datenspeicher.
  • 1 × 11,0592-MHz-HC49/SMT-Quarz — NKG-Quarz — Takt; zwei kurze Drähte für das Steckbrett anlöten.
  • 2 × Steckbretter mit 630 Kontakten — MCBB630 — Platz für die Busleitungen.
  • 2 × bedrahtete weiße LEDs — Vishay TLWW76 — Erfolg-/Fehleranzeige.

Zusätzlich werden benötigt: eine geregelte 5-V-Versorgung, Schaltdraht, je ein 100-nF-Keramikkondensator direkt an jedem IC, ein 10-µF-Kondensator über den Versorgungsschienen, zwei 22-pF-Kondensatoren für den Quarz, ein 10-µF-Resetkondensator, ein 10-kΩ-Widerstand, zwei 1-kΩ-LED-Widerstände und optional ein Reset-Taster (Schließer). Ein DIP-40-Sockel ist optional. Der SMT-Quarz benötigt zwei kurze angelötete Drähte; seine Kontaktflächen gehören nicht direkt in ein Steckbrett. Das Programmiergerät ist ein Vorbereitungsmittel, kein Bauteil der laufenden Schaltung. Ein leeres OTP-ROM kann nicht booten.

Ein Speicherzyklus

Zuerst legt die CPU A0–A7 an Port 0 und A8–A15 an Port 2. Bei hohem ALE folgt das SN74ALS873BNT den Eingängen; mit der fallenden ALE-Flanke hält es A0–A7 fest. Danach wird Port 0 zum Datenbus D0–D7. Ein niedriges PSEN gibt das ROM für einen Befehlsabruf frei. Ein niedriges RD gibt das RAM für einen MOVX-Lesezugriff frei; ein niedriges WR schreibt in das RAM. ROM und RAM teilen die Datenleitungen, aber nicht die Ausgangsfreigabe. Ihre OE-Pins dürfen nicht verbunden werden: Sonst können beide ICs gleichzeitig den Bus treiben.

Verdrahtung Schritt für Schritt

  1. Versorgung und Reset. Strom trennen. Alle vier ICs über die Mittelrillen der Steckbretter setzen, mit Kerben in gleicher Richtung. Alle Masse- und +5-V-Schienen verbinden; viele Schienen sind in der Mitte unterbrochen. CPU Pin 40, Latch Pin 24, ROM Pin 28 und RAM Pin 28 an +5 V. CPU Pin 20, Latch Pin 12, ROM Pin 14 und RAM Pin 14 an Masse. Je 100 nF dicht an jedes IC und 10 µF über die Versorgung. CPU EA Pin 31 fest an Masse: Der ROM-lose Prozessor muss externen Code holen. CPU RST Pin 9 erhält 10 kΩ nach Masse und 10 µF nach +5 V (Pluspol eines Elkos an +5 V); der optionale Taster verbindet RST mit +5 V. Reset ist aktiv high und muss bis zum Anlaufen des Oszillators anliegen.
  2. Takt. Den 11,0592-MHz-Quarz zwischen CPU XTAL1 Pin 19 und XTAL2 Pin 18 anschließen. Von jedem Quarzanschluss 22 pF nach Masse. Diese Leitungen kurz halten. Die angelöteten Drähte des SMT-Quarzes müssen vor dem Einschalten fest sitzen. Diese CPU-Version ist bis 16 MHz spezifiziert; 11,0592 MHz sind zulässig.
  3. Gemeinsamer Adress-/Datenbus. Für jedes Bit n=0…7 CPU P0.n mit Latch Dn, ROM On und RAM I/On verbinden. CPU P0.0…P0.7 sind die Pins 39, 38, 37, 36, 35, 34, 33, 32. ROM- und RAM-D0…D7 sind 11, 12, 13, 15, 16, 17, 18, 19. Latch D0…D7 sind 3, 4, 5, 6, 7, 8, 9, 10. Bei externen Speicherzyklen hat Port 0 interne Pull-ups; für diesen Bus ist kein zusätzlicher Widerstandsblock erforderlich.
  4. Untere Adresse. Latch Q0…Q7 sind 22, 21, 20, 19, 18, 17, 16, 15. Sie gehen jeweils an ROM- und RAM-A0…A7, bei beiden Speicher-ICs 10, 9, 8, 7, 6, 5, 4, 3. CPU ALE Pin 30 an Latch LE Pins 23 und 14. Aktiv-niedrige OE Pins 2 und 11 an Masse; aktiv-niedrige CLR Pins 1 und 13 an +5 V. Beide 4-Bit-Hälften müssen eingeschaltet sein.
  5. Obere Adresse. CPU P2.0…P2.7, Pins 21…28, an ROM A8…A15: ROM-Pins 25, 24, 21, 23, 2, 26, 27, 1 in dieser Reihenfolge. RAM besitzt nur A8…A12: P2.0…P2.4 an RAM-Pins 25, 24, 21, 23, 2. P2.5…P2.7 bleiben vom RAM getrennt.
  6. Steuersignale. ROM CE Pin 20 an Masse; ROM OE/VPP Pin 22 ausschließlich an CPU PSEN Pin 29. RAM aktiv-niedriges CS1 Pin 20 an Masse, aktiv-hohes CS2 Pin 26 an +5 V. RAM OE Pin 22 ausschließlich an CPU RD/P3.7 Pin 17; RAM WE Pin 27 ausschließlich an CPU WR/P3.6 Pin 16. Ohne Adressdecoder spiegelt sich das 8-KB-RAM im ganzen externen Datenadressraum. Für diesen Minimalaufbau ist das gewollt; Software soll 0000h–1FFFh als RAM verwenden.
  7. Anzeigen. Für jede LED: +5 V → 1 kΩ → LED-Anode; LED-Kathode an CPU P1.0 Pin 1 beziehungsweise P1.1 Pin 2. Ein niedriger Ausgangspegel schaltet die LED ein. LEDs nie ohne Vorwiderstand anschließen.
Draufsicht auf die Pins von 80C31 und SN74ALS873BNT
Pins in Draufsicht; Kerben der Bauteile prüfen. Auf dem Handy seitlich wischen.

Programmieren und erster Start

Das mitgelieferte Assembler-Testprogramm und die 64-KB-ROM-Binärdatei beginnen bei Codeadresse 0000h. Das Programm schreibt 5Ah in externes RAM bei 0000h und liest den Wert zurück. Bei Erfolg blinkt P1.0; bei Fehler leuchtet P1.1 dauerhaft. Die Binärdatei mit einem Programmiergerät, das ausdrücklich den genauen Typ AT27C512R-55PC unterstützt, in ein leeres IC schreiben und anschließend Byte für Byte verifizieren. OTP lässt sich nur einmal programmieren; ein falsches Image braucht einen neuen leeren Baustein. Vor dem Einsetzen oder Entfernen von ICs immer ausschalten.

Eine strombegrenzte, geregelte 5-V-Quelle verwenden. 5 V und Masse an jedem IC prüfen. Nach dem Start soll P1.0 blinken und P1.1 dunkel bleiben. Passiert nichts, Reset-Freigabe, Oszillator, EA low, ALE-Impulse, ROM-OE an PSEN und die ersten drei Codebytes bei 0000h prüfen. Leuchtet P1.1, die beiden RAM-Chip-Selects, RD/WR und die gemeinsame Adress-/Datenverdrahtung kontrollieren. Ein Tastkopf mit hoher Kapazität kann den Quarzoszillator anhalten. Der Aufbau wurde nicht praktisch geprüft; lange Steckbrettdrähte können bei 11 MHz Fehler verursachen.

Datenblätter

Pinbelegung und Zeitverhalten wurden anhand von Philips 80C31/80C32, TI SN74ALS873B, Microchip AT27C512R und dem Originaldatenblatt Hitachi HM6264LP-15 (Hitachi IC Memories Data Book 1985, Seite 158) kontrolliert. Vor dem Einschalten Markierungen und Kerben der tatsächlichen Bauteile prüfen.