home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Best of German Only 1
/
romside_best_of_german_only_1.iso
/
anwender
/
sim
/
sim51_04.arj
/
BEF51.DOC
< prev
next >
Wrap
Text File
|
1993-01-03
|
39KB
|
1,179 lines
Befehlssatz der 8051 Mikrocontroller:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Dieser Text enthält eine Aufstellung aller Maschinenbefehle des
8051. Alle Weiterentwicklungen besitzen denselben Befehlssatz. Sie
unterscheiden sich nur in erweiterten Funktionen, die werden aber
über zusätzliche Spezial-Funktion-Register (SFR) gesteuert.
Opcodes:
~~~~~~~~
Die Maschinenbefehle werden im Programmspeicher als Zahlenwerte ab-
gelegt.
┌──────────┬───────────┬───────────┐
│ OpCode │ 1.Operant │ 2.Operant │
└──────────┴───────────┴───────────┘
Für den Operations-Code sind Werte von 0 bis 255 zulässig. Damit
können bis zu 256 Befehle unterschieden werden. Die Operanten sind
optional. Somit belegt ein Befehl 1 bis 3 Byte im Speicher.
Cyclen:
~~~~~~~
Die CPU's der 8051-Reihe können mit 1,2...12 MHz (neue Typen auch
bis 20 MHz) getacktet werden.
Quarz-Takt: ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌
─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘
System-Takt: | S1 | S2 | S3 | S4 | S5 | S6 | S1
|<------------------ 1. Cyclus ---------------->|<---
| ^Code-Fetch ^Code-Fetch
Der Code-Fetch (für OpCode) eines abzuarbeitenden Befehls erfolgt
in S1. In S4 wird der 1.Operant gelesen. Bei Befehlen ohne Operan-
ten wird der Wert wieder verworfen. In S5/S6 wird der Befehl aus-
geführt, der Cyclus ist beendet. Nun gibt es auch Befehle mit zwei
Operanten oder die mehr Zeit zur Ausführung benötigen. Sie benö-
tigen dann 2 oder 4 Cycluse.
Je Cyclus erfolgen immer zwei Code-Fechtes (außer bei MOVX). Zu-
viel gelesener Code wird wieder verworfen, indem der PC (Programm
Counter) nicht erhöht wird.
Mnemonics:
~~~~~~~~~~
Die Zahlencodes für die Befehle werden üblich mit einem Assembler
generiert. Der Programmierer hat so nicht nicht mit Zahlen zu jon-
glieren, sondern kann die Befehle in Worten (Mnemonics) hinschrei-
ben, die dann vom Assembler übersetzt werden.
Im folgenden werden die 8051-Befehle beschrieben, es werden Opcode
und Mnemonics, die benötigte Cycluse und die sich ändernden Flags
angegeben. Weitere Ausführungen zur 8051-Hardware und zu den ver-
wendeten Abkürzungen finden sich am Ende dises Textes.
──────────────────────────────────────────────────────────────────
ACALL Flags: -
Absolute CALL (innerhalb 2 KByte Page):
Der PC (Programm-Counter) wird um 2 incrementiert und die Return-
Adresse auf den Stack gelegt (low Byte zuerst). Für den Einsprung
ins Unterprogramm. wird die Adresse folgendermaßen gebildet:
A11 bis A15 im PC (Programm-Counter) bleiben unverändert,
die unteren 11 Bit werden aus dem Opcode geladen.
┌────────────────┬───────────────────────┐
ACALL codeAdr │A10 A9 A8 1 0001│A7 A6 A5 A4 A3 A2 A1 A0│ 2 Cyc
└────────────────┴───────────────────────┘
──────────────────────────────────────────────────────────────────
ADD Flags: CY AC P OV
Addiere zu ACC
Addiere Wert, Register-Inhalt oder intern RAM-Inhalt zum ACC.
Nach der Ausführung hält der ACC das Ergebnis, CY hält den Über-
trag aus Bit 7 und AC hält den Übertrag aus Bit 3. Das OV-Flag ist
gesetzt, wenn ein Vorzeichenfehler auftrat.
┌─────────┬─────────┐
ADD A, #wert │ 24h │ wert │ 1 Cyc
├─────────┼─────────┘
ADD A, @Ri │0010 011i│ 1 Cyc
├─────────┤
ADD A, Rn │0010 1nnn│ 1 Cyc
├─────────┼─────────┐
ADD A, data │ 25h │ data │ 1 Cyc
└─────────┴─────────┘
──────────────────────────────────────────────────────────────────
ADDC Flags: CY AC P OV
Addiere mit Übertrag zu ACC
Addiere Wert, Register-Inhalt, oder intern RAM-Inhalt und CY zum
ACC. Nach der Ausführung hält der ACC das Ergebnis, CY hält den
Übertrag aus Bit 7 und AC hält den Übertrag aus Bit 3. Das OV-Flag
ist gesetzt, wenn ein Vorzeichenfehler auftrat.
┌─────────┬─────────┐
ADDC A, #wert │ 34h │ wert │ 1 Cyc
├─────────┼─────────┘
ADDC A, @Ri │0011 011i│ 1 Cyc
├─────────┤
ADDC A, Rn │0011 1nnn│ 1 Cyc
├─────────┼─────────┐
ADDC A, data │ 35h │ data │ 1 Cyc
└─────────┴─────────┘
──────────────────────────────────────────────────────────────────
AJMP Flags: -
Absoluter Sprung (innerhalb 2 KByte Page):
Der PC wird um 2 incrementiert, die Zieladresse wird dann folgen-
dermaße gebildet:
A11 bis A15 im PC (Programm-Counter) bleiben unverändert,
die unteren 11 Bit werden aus dem Opcode geladen.
┌────────────────┬───────────────────────┐
AJMP codeAdr │A10 A9 A8 0 0001│A7 A6 A5 A4 A3 A2 A1 A0│ 2 Cyc
└────────────────┴───────────────────────┘
──────────────────────────────────────────────────────────────────
ANL Flags: -
Logisch AND zu ACC, intern RAM oder SFR
Der Inhalt der angegebenen Register wird bitweise logisch AND ver-
knüpft und im ersten Register gespeichert.
┌─────────┬─────────┐
ANL A, #wert │ 54h │ wert │ 1 Cyc P-Flag
├─────────┼─────────┘
ANL A, @Ri │0101 011i│ 1 Cyc P-Flag
├─────────┤
ANL A, Rn │0101 1nnn│ 1 Cyc P-Flag
├─────────┼─────────┐
ANL A, data │ 55h │ data │ 1 Cyc P-Flag
├─────────┼─────────┤
ANL data, A │ 52h │ data │ 1 Cyc
├─────────┼─────────┼─────────┐
ANL data, #wert │ 53h │ data │ wert │ 2 Cyc
└─────────┴─────────┴─────────┘
(Anmerkung: X AND Y = 1 nur dann, wenn beide X=1 und Y=1)
──────────────────────────────────────────────────────────────────
ANL Flags: CY
Logisch AND zum CY-Flag
Der Inhalt der angegebenen Bit-Adresse wird logisch AND mit dem CY-
Flag verknüpft. /bit bedeutet, das der negierte Bit-Inhalt verwen-
det wird.
┌─────────┬─────────┐
ANL C, bit │ 82h │ bitAdr │ 2 Cyc
├─────────┼─────────┤
ANL C, /bit │ B0h │ bitAdr │ 2 Cyc
└─────────┴─────────┘
──────────────────────────────────────────────────────────────────
CJNE Flags: CY
Vergleiche und springe, wenn nicht gleich
Ist der linke Operand kleiner als der Rechte, so ist anschließend
das Carry Flag gesetzt (CY = 1).
┌─────────┬─────────┬─────────┐
CJNE A, data, codeAdr │ B5h │ data │ Offset │ 2 Cyc
├─────────┼─────────┼─────────┤
CJNE A, #wert, codeAdr │ B4h │ wert │ Offset │ 2 Cyc
├─────────┼─────────┼─────────┤
CJNE Rn, #wert, codeAdr │1011 1nnn│ wert │ Offset │ 2 Cyc
├─────────┼─────────┼─────────┤
CJNE @Ri, #wert, codeAdr │1011 011i│ wert │ Offset │ 2 Cyc
└─────────┴─────────┴─────────┘
──────────────────────────────────────────────────────────────────
CLR Flags: P
Lösche ACC
┌─────────┐
CLR A │ E4h │ 1 Cyc
└─────────┘
──────────────────────────────────────────────────────────────────
CLR Flags: CY
Lösche Bit
┌─────────┐
CLR C │ C3h │ 1 Cyc
├─────────┼─────────┐
CLR bit │ C2h │ bitAdr │ 1 Cyc no Flags
└─────────┴─────────┘
──────────────────────────────────────────────────────────────────
CPL Flags: P
Einerkomplement zu ACC (= ACC bitweise invertieren)
Der Befehlssatz des 8051 kennt kein Zweierkomlement. Es kann aber
gebildet werden durch CPL A mit anschließenden INC A.
┌─────────┐
CPL A │ F4h │ 1 Cyc
└─────────┘
──────────────────────────────────────────────────────────────────
CPL Flags: CY
Invertiere Bit
┌─────────┐
CPL C │ B3h │ 1 Cyc
├─────────┼─────────┐
CPL bit │ B2h │ bitAdr │ 1 Cyc no Flags
└─────────