zurück zur Startseite

 

 

Das MCS-48 Microcontrollersystem


Ich bin begeistert von dem alten 8048 Microcontroller (Intels MCS-48 System). Er ist sehr einfach aufgebaut und aus meiner Sicht ideal für den Anfänger, der erste Schritte in der Assemblerprogrammierung unternehmen will.

Dieser Microcontroller wurde sehr oft hergestestellt, man fand ihn in  Nähmaschienen, Waschmaschienen, Kopierern usw.. Er trägt sein Programm als maskenprogrammiertes ROM in sich, dieses läßt sich aber abschalten, indem Pin 7 des 40 poligen Gehäuses (EA) mit + 5 Volt verbunden wird. Man erhält dann gewissermassen die ROMlose Version (beim 8048 den 8035 bzw. beim 8049 den 8039), der über das EPROM bzw. besser EEPROM gesteuert wird. 

Auch im Kosmos Mircocomputer CP1 in den 80er Jahren wurde ein 8049 verwendet.

Man findet die 8048 oder 8049 immer wieder mal beim Ausschlachten von Geräten. Egal was er vorher gesteuert hat, er ist für ein kleines Entwicklersystem weiter verwendbar. 
Auf ebay begegnet man ihm ebenfalls, auch als ROM-losen Controller 8039.

Der 8048 lässt eine Taktfrequenz von 10 Mhz zu, hat 64 Byte internes RAM (beim 8049 sind es 128 Byte, beim 8050 sogar 256), hat 2 je 8 Bit breite Ports, einen Eingang für Interupt und 2 Testeingänge.

Die EEPROMs gibt es ebenfalls weiterhin im Handel  (z. B. Reichelt Elektronikversand), sie kosten etwa 2 Euro pro Stück. 

Vor ca. 20 Jahren wurde bei Völkner Elektronikversand eine Platine mit der Bezeichnung PECAZ (Weidners „Preiswertester Einplatinen Computer Aller Zeiten“) vertrieben, ergänzt mit kleinem Entwicklungsboard, EPROM-Simulator und einfachem Assembler. Ich habe mir diese Komponenten von dem Entwickler Dipl. Ing. Weidner schicken lassen, seitdem hat mich dieses Ding immer wieder beschäftigt. Herr Weidner ist allerdings leider nicht mehr unter seiner alten Adresse und Telefonnummer erreichbar. Auch im Internet konnte ich seine Seite über PECAZ nicht mehr finden.

PECAZ hatte einen Bus-artigen  21 poligen Steckanschluss, um ihn auf einem ebenfalls erhältlichen Testboard zu einem Entwicklungssystem ausbauen zu können. Als Programmspeicher konnten 2716 (mit 2 Kilobyte) oder 2764 (mit 8 Kilobyte, von denen allerdings nur die "unteren" 4 KB nutzbar waren) verwendet werden.

Weidners PECAZ

Weidners PECAZ

   

Als Ergänzung war der EPROM Simulator PEPSI und das Entwicklungsboard PECAID erhältlich. PEPSI wurde an den paralellen Druckerausgang des PCs anschlossen und die mit dem Assmbler erstellte Binärdatei mittels mitgelieferter Software in das RAM von PEPSI übertragen.  PECAZ betrachtete das ganze als EPROM. Auf dem Entwicklungsboard konnten die Zustände des Ports P1 sowie der oberen 5 Bits des Port P2 mittels LEDs dargestellt werden. Es finden sich Taster für Reset und Interupt sowie Schalter für die Testeingänge T0 und T1. Weiterhin war noch eine Schaltung für Single Step Betrieb des Prozessors vorhanden. Ein zusätzlicher Steckplatz war für Erweiterungsschaltungen vorgesehen. 

  


  

Weidners EPROM Simulator PEPSI und Entwicklungsboard PECAID  

  

      

   

 

MeinTestboard:        Kein Single Step, nur Taster für Reset und Interupt, Schalter für T0 und T1    

   

 

EEPROM Programmiergerät

   

Um dem umständlichen Arbeiten mit EPROMs zu entkommen habe ich ein kleines Programmiergerät für EEPROMs entwickelt. 

Das EEPROM hat einen entscheidenden Vorteil. Es benötigt kein UV Licht zum Löschen, sondern wird einfach neu beschrieben. Natürlich gibt es entsprechende Programmiergeräte zu kaufen, sie haben allerdings ihren Preis.

Der Aufbau ist denkbar einfach:

Dem PC wird durch Immitation der Centronicsnorm ein angeschlossener Drucker vorgespielt. Die Binärdatei mit dem Programm für das EEPROM mit "copy xxx.bin lpt"1 in das EEPROM geschrieben. Durch einen 74HCT541 Treiber gelangen die 8 Datenbits vom PC an das EEPROM. Ein 4040 Zähler spricht die Adressen an, ein 555 besorgt die Steuerung der Zeiten.
Bei der Einfachversion mit dem 4040 kann man bis 4 Kilobyte adressieren, also 28C16 oder 28C32 EEPROMs, bzw. einen „halben“ 28C64. Ich habe bei meinem Aufbau einen 4020 dazugeschaltet, das reicht dann bis für einen 28C128.

   
 
 

Mein altes EEPROM Programmiergerät

 
   

 Hier ist das Schaltbild dazu (Qualität wird demnächst besser)

   
      

   

  


8048 Befehle
    
CALL addr      Rufe Unterprogramm auf

JMP addr       Springe zu Adresse
JZ addr        Springe zu Adresse wenn Akku Null ist
JNZ addr       Springe zu Adresse wenn Akku nicht Null ist
JT0 addr       Springe zu Adresse wenn T0 high ist
JNT0 addr      Springe zu Adresse wenn T0 low  ist
JT1 addr       Springe zu Adresse wenn T1 high ist
JNT1 addr      Springe zu Adresse wenn T1 low  ist
JTF addr       Springe zu Adresse wenn Timer Flag gesetzt ist
JF0 addr       Springe zu Adresse wenn Flag 0 gesetzt ist
JF1 addr       Springe zu Adresse wenn Flag 1 gesetzt ist
JC             Springe zu Adresse wenn Carrybit gesetzt ist
JNC            Springe zu Adresse wenn Carrybit nicht gesetzt

CLR A          Akku löschen
CLR F0         Flag 0 löschen
CLR F1         Flag 1 löschen
CLR C          Carrybit löschen

CPL A          Akku invertieren
CPL F0         Flag 0 invertieren
CPL F1         Flag 1 invertieren
CPL C          Carrybit invertieren

INC A          Akku um 1 erhöhen
DEC A          Akku um 1 erniedrigen
INC Rr         Register um 1 erhöhen
DEC Rr         Register um 1 erniedrigen
INC @Rr        indirektes Register um 1 erniedrigen

MOV A,#data    Lade Akku mit Daten
MOV A,Rr       Lade Akku mit Registerwert
MOV A,@Rr      Lade Akku mit Wert aus indirektem Register
MOV Rr,A       Lade Register mit Akkuwert
MOV @Rr,A      Lade indirektes Register mit Akkuwert
MOV Rr,#data   Lade Register mit Daten
MOV @Rr,#data  Lade indirektes Register mit Daten
MOV A,T        Lade Akku mit Timerregisterwert
MOV T,A        Lade Timerregister mit Akkuwert
MOV A,PSW      Lade Akku mit Prozessorzustandswort
MOV PSW,A      Bilde Prozessorzustandswort aus Akku

OUTL Pp,A      Gebe Akkuinhalt auf Port 1 oder 2 aus
IN A,Pp        Lese Zustand von Port 1 oder 2 in Akku ein

ANL A,Rr       AND  Akku mit Register
ANL A,@Rr      AND  Akku mit indirektem Register
ANL A,#data    AND  Akku mit Daten
ANL Pp,#data   AND  Port 1 oder 2 mit Daten

ORL A,Rr       OR  Akku mit Register
ORL A,@Rr      OR  Akku mit indirektem Register
ORL A,#data    OR  Akku mit Daten
ORL Pp,#data   OR  Port 1 oder 2 mit Daten

XRL A,Rr       XOR  Akku mit Register
XRL A,@Rr      XOR  Akku mit indirektem Register
XRL A,#data    XOR  Akku mit Daten

STRT T         Timer starten
STRT CNT       Counter starten
STOP TCNT      Timer/Counter anhalten

XCH A,Rr       Akku mit Register tauschen
XCH A,@Rr      Akku mit indirektem Register tauschen

NOP            No Operation

RET            Rücksprung ohne PSW Restore
RETR           Rücksprung mit  PSW Restore

SEL RB0        Select Register Bank 0
SEL RB1        Select Register Bank 1
SEL MB0        Select Speicher Bank 0
SEL MB1        Select Speicher Bank 1

EN I           Enable  Interupt
DIS I          Disable Interupt
EN TCNTI       Enable  Timer/Counter Interupt
DIS TCNTI      Disable Timer/Counter Interupt

ENT0 CLK       Taktausgabe auf T0

DJNZ Rr,addr   DEC Register, wenn nicht Null, JMP Adresse

SWAP A         Austausch der Akku Nibbles
DA A           Dezimaleinstellung des Akku

ADD A,Rr       Addiere Registerinhalt zum Akku
ADD A,@Rr      Addiere Inhalt von indirektem Register zum Akku
ADD A,#data    Addiere Daten zum Akku
ADDC A,Rr      ADD A,Rr  und Carrybit
ADDC A,@Rr     ADD A,@Rr und Carrybit
ADDC A,#data   ADD A,#data und Carrybit

RL A           Linksverschiebung  ohne Carrybit
RR A           Rechtsverschiebung ohne Carrybit
RLC A          Linksverschiebung  mit Carrybit
RRC A          Rechtsverschiebung mit Carrybit






 

 
 
 
 

Startseite