header.self8051
Suche   ||   HOME   ||   Eigenschaften   ||   Befehlsreferenz   ||   Derivate   ||  
 Eigenschaften
 Befehlsreferenz
    > Einführung
       > Aufschlüsselung
        Adressierungsarten
     alle Befehle
 Derivate
 interessante Links
Sie sind hier: SELF8051 || Befehlsreferenz || Einführung || Aufschlüsselung

Funktionale Aufschlüsselung des Befehlsvorrats


Der Befehlsvorrat der 8051-Mikrocontroller-Familie gliedert sich in vier funktionale Gruppen:
 

> Datentransport
> Arithmetische Operationen
> Logische Operationen
> Programmverzweigung zu einem nicht unmittelbar folgenden Speicherplatz

 

 

Datentransport


Diese Operationen lassen sich in drei Typen einteilen:

  • für allgemeine Zwecke
  • akkumulatorspeziefische
  • Adresswert unmittelbar

Keine dieser Operationen beeinflußt die im Programmstatusregister gesetzten Kennzeichnungsbits, mit Ausnahme von POP-Befehlen und solchen MOV-Befehlen, die das Programmstatusregister zum Ziel haben.

 

Datentransport für allgemeine Zwecke

  • MOV bewirkt den Transport eines Bits oder Bytes vom Quellen- zum Zieloperanden.
     
  • PUSH inkrementiert (erhöht) den Stack pointer (spezielles Funktionsregister SP) und transportiert dann ein Byte vom Quelloperanden zu demjenigen Speicherplatz im Stack, der nunmehr durch SP adressiert wird.
     
  • POP transportiert ein Byte aus dem durch SP adressierten Speicherplatz im Stack zum Zieloperanden und dekrementiert (verringert) dann SP


Akkumulatorspeziefischer Datentransport

  • XCH vertauscht den Inhalt des Quelloperanden (1 Byte Länge) mit dem Inhalt des Akkumulators (spezielles Funktionsregister A).
     
  • XCHD vertauscht den Inhalt des niederwertigen Halbbytes (Nibble) des Quelloperanden mit dem niederwertigen Halbbyte vom Akkumulator (A).
     
  • MOVX transportiert ein Byte zwischen dem externen Datenspeicher und dem Akkumularor. Die externe Adresse wird durch das spezielle Funkrtionsregister DPTR (16bit-Datenzeiger) oder durch die Register R1 oder R0 (8 bit) bezeichnet.
     
  • MOVC transportiert ein Byte vom Programmspeicher zum Akkumulator. Der Operand im Akkumulator wird als Index für eine 256Byte-Tabelle verwendet, auf die durch das Basisregister (DPTR oder PC) gezeigt wird. Der so erhaltene Operand (1 Byte Länge) wird in den Akkumulator gebracht (kopiert).

Adresswert unmittelbar

  • MOV   DPTR,#data     lädt 16 Bits unmittelbarer Daten in die beiden Zielregister DPH und DPL (DPH höherwertiges Byte von DPTR und DPL niederwertiges Byte von DPTR).

 

Arithmetische Operationen


Der 8051-Mokrocontroller kennt vier grundlegende mathematische Operationen. Nur 8bit-Operationen, die kein Vorzeichen verwenden, werden direkt ausgeführt. Das Überlaufbit OV erlaubt jedoch die Ausführung von Additionen und Subtraktionen ganzzahliger Binärziffern mit und ohne Vorzeichen. Arithmetische Operationen können auch unmittelbar mit Daten in gepackter Darstellung (BCD-Ziffern) erfolgen


Addition

  • INC (Inkrementieren) addiert eine Eins zum Quelloperanden und bringt das Ergebnis in den Operanden.
     
  • ADD adddiert den Akkumulator (A) zum Quelloperanden und bringt das Ergebnis in den Akkumulator.
     
  • ADDC (Addieren mit Übertrag) addiert A zum Quelloperaden und dann noch eine Eins, wenn das Übertragsbit CY gesetzt ist. Das Ergebnis wird im Akkumulator abgelegt.
     
  • DA (Korrektur nach Addition von zwei BCD-Ziffern) korrigiert die Summe, die durch binäres Addieren von zwei zweistelligen binär codierten Dezimaloperanden entstanden ist. Das Ergebnis (in gepackter Darstellung) wird in den Akkumulator zurückgebracht. Das Übertragsbit CY wird gesetzt, wenn das BCD-Ergebnis größer als 99 ist, andernfalls gelöscht.


Subtraktion

  • SUBB (Subtrahieren mit Übertrag) subtrahiert den zweiten Quelloperanden vom ersten Operanden (dem Akkumulator), ferner subtrahiert eine Eins, wenn CY gesetzt ist, und bringt das Ergebnis in den Akkumulator.
     
  • DEC (Dekrementieren)  subtrahiert eine Eins vom Quelloperanden und bringt das Ergebnis in den Operanden.


Multiplikation

  • MUL erzeugt eine Multiplikation ohne Vorzeichen des Akkumulatorinhaltes (A) mit dem Inhalt von Register B. Das Ergebnis ist 2 Bytes lang. Der Akkumulator nimmt das niederwertige Byte, Register B das höherwertige Byte auf. Das Überlaufbit OV wird gelöscht, wenn die obere Hälfte des Ergebnisses Null ist, und gesetzt, wenn es nicht Null ist. Das Übertragsbit CY wird gelöscht, das Hilfsübertragsbit AC bleibt unbeeinflusst.


Division

  • DIV erzeugt eine Division ohne Vorzeichen des Akkumulatorinhaltes (A) durch den Inhalt von Register B. Der zanzzahlige Teil des Ergebnisses wird im Akkumulator abgelegt, der Rest im Register B. Das Übertragsbit CY wird gelöscht, das Hilfsübertragsbit AC bleibt unbeeinflusst. Eine Division durch Null führt zu unbestimmten Werten in A und B, wobei das Überlaufsbit OV gesetzt wird, andernfalls wird es gelöscht.

 

Sofern es in der obigen Beschreibung nicht anders dargestellt ist, werden die Kennzeichnungsbits im Programmstatusregister wie folgt beeinflusst:

  • CY (Übertragsbit) wird gesetzt, wenn die Operation einen Übertrag zum oder vom höchstwertigen Bit ergibt. Andernfalls wird CY gelöscht.
     
  • AC (Hilfsübertragsbit) wird gesetzt, wenn Operationen einen Übertrag aus den vier niederwertigen Bits des Ergebnisses ergibt (bei der Addition) oder einen negativen Übertrag aus den höherwertigen Bits zu den  niederwertigen Bits (bei der Subtraktion). Andernfalls wird AC gelöscht.
     
  • OV (Überlaufbit) wird gesetzt, wenn die Operation einen Übertrag zum höchstwertigen Bit des Ergebnisses ergibt, aber nicht einen Übertrag vom höchstwertigen Bit, oder umgekehrt. Andernfalls wird OV gelöscht. OV wird in der Zweierkomplent-Arithmetik verwendet, wo es gesetzt wird, wenn sich das vorzeichenbehaftete Ergebnis nicht in 8 Bits darstellen lässt.
     
  • P wird gesetzt, wenn die Summe der 8 Bits modulo 2 im Akkumulator Eins ist (ungeradzahlige Parität). Andernfalls wird P gelöscht (gradzahlige Parität). Wird in das Programmstatusregister eine Bitfolge geschrieben, so bleibt P unverändert, da es stets die Parität des Akkumulators wiedergibt.

 

Logische Operationen


Der 8051-Mikrocontroller kann die grundlegenden logischen Operationen sowohl mit Bit- als auch mit Byte-Operanden durchführen.


Operationen mit nur einem Operanden

  • CLR setzt den Akkumulator (A) oder jedes direkt adressierbare Bit auf Null (0).
     
  • SETB setzt jedes adressierbare Bit auf Wins (1).
     
  • RL,  RR,  RLC,  RRC und SWAP sind fünf Rundschiebeoperationen, die im Akkumulator durchgeführt werden können.
    RL führt zu einer Rundverschiebung nach links.
    RR führt zu einer Rundverschiebung nach rechts.
    RLC bedeutet eine Rundverschiebung nach links unter Einbeziehung des Übertragsbits (CY).
    RRC Rundverschiebung nach rechts über Übertragsbit.
    Bei RLC und RRC erhält CY den Wert des letzten hinausgeschobenen Bits.
    SWAP ist eine Viererverschiebung nach links, welches ein Vertauschen von Bit 3..0 mit Bit 7..4 ergibt.


Operantionen mit zwei Operanden

  • ANL ermöglicht eine bitweise logische UND-Verknüpfung von zwei Quelloperanden (sowohl von Bit- als auch von Byte-Operanden) und bringt das Ergebnis zum Speicherplatz des ersten Operanden.
     
  • ORL ermöglicht eine bitweise logische ODER-Verknüpfung von zwei Quelloperanden (sowohl von Bit- als auch von Byte-Operanden) und bringt das Ergebnis zum Speicherplatz des ersten Operanden.
     
  • XRL ermöglicht eine bitweise logische Exklusiv-ODER-Verknüpfung (XOR) von zwei Quelloperanden (Byte-Operanden) und bringt das Ergebnis zum Speicherplatz des ersten Operanden.

 

Programmverzweigung zu einem nicht unmittelbar folgenden Speicherplatz


Diese Operationen gestatten zu einem nicht unmittelbar folgenden Speicherplatz (Sprung), einige davon bei Vorliegen einer bestimmten Bedingung. Sie lassen sich in drei Klassen einteilen:


Absolute Aufrufe, Rücksprünge und Sprünge

Diese Operationen führen zu einem Programmsprung vom gegenwärtigen Wert des Programmzählers zur Zieladresse. Es können sowohl direkte als auch indirekte Programmsprünge erfolgen.

  • ACALL und LCALL bringen die Adressen des nächsten Befehls in den Stack und verlassen dann die weitere Programmausführung an der Zeiladresse. ACALL ist ein 2Byte-Befehl, der verwendet wird, wenn sich die Zieladresse in der gerade benutzen 2kByte-Seite befindet. LCALL (Long-Call) ist ein 3Byte-Befehl, mit dem der gesamte 64kByte-Programmspeicher-Adressierbereich angesprochen wird. Bei ACALL werden unmittelbare Daten (d. h. ein 11bit-Adressfeld) mit den 5 höherwertigen Bits des Programmzählers verknüpft, der auf den nächsten Befehl zeigt. Befindet sich ACALL in den beiden letzten Bytes einer 2kByte-Seite, so findet der Aufruf in die nächste Seite statt, da der Programmzähler für den nächsten Befehl vor dessen Ausführung inkrementiert (erhöht) worden ist.
     
  • RET übergibt die Programmausführung an die Rücksprungadresse, die durch eine vorherige CALL-Operation in den Stack geschrieben wurde, und dekrementiert (verringert) das spezielle Funktionsregister SP (Stack pointer) um 2, um den Stack pointer nach dem Rücksprung zu berichtigen.
     
  • AJMP,  LJMP und SJMP übergeben die Programmausführung an den Zieloperanden. AJMP und LJMP sind analog zu ACALL und LCALL zu sehen. Der Befehl SJMP (kurzer Sprung) dient zu Programmsprüngen innerhalb eines Bereiches von 256 Bytes, der symmetrisch zur Anfangsadresse des nächsten Befehls liegt (-128 .. +128).
     
  • JMP   @A + DPTR    ermöglicht einen Sprung relativ zum speziellen Funktionsregister DPTR. Der Operand im Akkumulator wird als Adressdistanz (0 .. 255) zur Adresse in DPTR verwendet. Somit kann das tatsächliche Sprungziel irgendwo im 64kByte-Programmspeicher-Adressbereich liegen.


Bedingte Sprünge

Diese Befehle gestatten Sprünge, die von bestimmten Bedingungen abhängig sind. Das Sprungziel kann sich in einem Bereich von 256 Bytes befinden, der symmetrisch zur Anfangsadresse des nächsten Befehles liegt (-128 .. +128).

  • JZ erzeugt einen Sprung, wenn der Akkumulator (A) Null ist.
     
  • JNZ erzeugt einen Sprung, wenn der Akkumulator nicht Null ist.
     
  • JC erzeugt einen Sprung, wenn das Übertragsbit (CY) gesetzt ist (=1).
     
  • JNC erzeugt einen Sprung, wenn das Übertragsbit nicht gesetzt ist (=0).
     
  • JB erzeugt einen Sprung, wenn das direkt adressierte Bit gesetzt ist (=1).
     
  • JNB erzeugt einen Sprung, wenn das direkt adressierte Bit nicht gesetzt ist (=0).
     
  • JBC erzeugt einen Sprung, wenn das direkt adressierte Bit gesetzt ist (=1), und löscht es dann.
     
  • CJNE vergleicht den ersten Operanden mit dem zweiten und erzeugt einen Sprung, wenn sie nicht gleich sind. Das Übertragsbit (CY) wird gesetzt, wenn der erste Operand kleiner als der zweite ist. Andernfalls wird CY gelöscht. Vergleiche können erfolgen zwischen dem Akkumulator und direkt adressierbaren Bytes im internen Datenspeicher oder zwischen einem unmittelbaren Wert und entweder dem Akkumulator, dem Registerinhalt in einer ausgewählten Registerbank oder einem registerindirekt adressierten Byte des internen RAM.
     
  • DJNZ dekrementiert den Quelloperanden (erst) und bringt das Ergebnis an den Platz des Operanden zurück. Ein Sprung erfolgt, wenn das Ergebnis von Null verschieden ist. Der Quelloperand des Befehls DJNZ kann jedes Byte im internen Datenspeicher sein. Zur Adressierung des Quelloperanden kann entweder direkte Adressierung oder Register-Adressierung verwendet werden.


Interrupt-Rücksprünge

  • RETI übergibt die Programmführung wie RET an die Rücksprungadresse, lässt aber zusätzlich Interrups der gerade eingestellten Priorität zu.

Fehler auf dieser Seite melden



 

Seite drucken

Send a Friend

 
 zum Seitenanfang   © Autor Dipl. Ing. Sven Pohl || Impressum || Datenschutz


Tipp: rechtssichere Patientenverfügung einfach online erstellen für nur 14,90 €

  

 

Wertschätzen Sie den Aufwand und den Inhalt mit einer kleinen Spende. Danke.

Sie bestimmen die Höhe, jeder noch so kleine Betrag hilft.

 

   
HASM - Skyscrapper 1