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 >
Text File  |  1993-01-03  |  39KB  |  1,179 lines

  1.     Befehlssatz der 8051 Mikrocontroller:
  2.     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  3.     Dieser Text  enthält eine Aufstellung  aller  Maschinenbefehle des
  4.     8051. Alle Weiterentwicklungen besitzen denselben Befehlssatz. Sie
  5.     unterscheiden sich nur in erweiterten Funktionen,  die werden aber
  6.     über zusätzliche Spezial-Funktion-Register (SFR) gesteuert.
  7.  
  8.  
  9.     Opcodes:
  10.     ~~~~~~~~
  11.     Die Maschinenbefehle werden im Programmspeicher als Zahlenwerte ab-
  12.     gelegt.
  13.             ┌──────────┬───────────┬───────────┐
  14.             │  OpCode  │ 1.Operant │ 2.Operant │
  15.             └──────────┴───────────┴───────────┘
  16.     
  17.     Für den Operations-Code sind Werte von  0 bis 255  zulässig. Damit
  18.     können bis zu 256 Befehle unterschieden werden. Die Operanten sind
  19.     optional. Somit belegt ein Befehl 1 bis 3 Byte im Speicher.
  20.     
  21.  
  22.     Cyclen:
  23.     ~~~~~~~
  24.     Die CPU's der 8051-Reihe können mit  1,2...12 MHz (neue Typen auch
  25.     bis 20 MHz) getacktet werden. 
  26.  
  27.     Quarz-Takt:  ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌─┐ ┌
  28.             ─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘ └─┘
  29.     System-Takt: |  S1   |  S2   |  S3   |  S4   |  S5   |  S6   |  S1
  30.              |<------------------ 1. Cyclus ---------------->|<---
  31.              |     ^Code-Fetch             ^Code-Fetch
  32.  
  33.     Der Code-Fetch (für OpCode) eines abzuarbeitenden Befehls  erfolgt
  34.     in S1. In S4 wird der 1.Operant gelesen. Bei Befehlen ohne Operan-
  35.     ten wird der Wert wieder verworfen.  In S5/S6 wird der Befehl aus-
  36.     geführt, der Cyclus ist beendet. Nun gibt es auch Befehle mit zwei
  37.     Operanten  oder die mehr Zeit zur Ausführung benötigen.  Sie benö-
  38.     tigen dann 2 oder 4 Cycluse.
  39.     Je Cyclus  erfolgen immer zwei Code-Fechtes (außer bei MOVX).  Zu-
  40.     viel gelesener Code wird wieder  verworfen, indem der PC (Programm
  41.     Counter) nicht erhöht wird.
  42.  
  43.  
  44.     Mnemonics:
  45.     ~~~~~~~~~~
  46.     Die Zahlencodes für die Befehle werden üblich mit  einem Assembler
  47.     generiert. Der Programmierer hat so nicht nicht mit Zahlen zu jon-
  48.     glieren, sondern kann die Befehle in Worten (Mnemonics) hinschrei-
  49.     ben, die dann vom Assembler übersetzt werden.
  50.  
  51.  
  52.  
  53.  
  54.     Im folgenden werden die 8051-Befehle beschrieben, es werden Opcode
  55.     und Mnemonics, die benötigte Cycluse  und die sich ändernden Flags
  56.     angegeben. Weitere Ausführungen  zur 8051-Hardware und zu den ver-
  57.     wendeten Abkürzungen finden sich am Ende dises Textes.
  58.  
  59.  
  60.     ──────────────────────────────────────────────────────────────────
  61.     ACALL                        Flags: -
  62.  
  63.     Absolute CALL (innerhalb 2 KByte Page):
  64.  
  65.     Der PC (Programm-Counter) wird um  2 incrementiert und die Return-
  66.     Adresse auf den Stack gelegt (low Byte zuerst).  Für den Einsprung
  67.     ins Unterprogramm. wird die Adresse folgendermaßen gebildet:
  68.  
  69.        A11 bis A15 im PC (Programm-Counter) bleiben unverändert,
  70.        die unteren 11 Bit werden aus dem Opcode geladen.
  71.  
  72.                ┌────────────────┬───────────────────────┐
  73.     ACALL codeAdr  │A10 A9 A8 1 0001│A7 A6 A5 A4 A3 A2 A1 A0│   2 Cyc
  74.                └────────────────┴───────────────────────┘
  75.  
  76.  
  77.  
  78.     ──────────────────────────────────────────────────────────────────
  79.     ADD                        Flags: CY AC P OV
  80.  
  81.     Addiere zu ACC
  82.  
  83.     Addiere  Wert,  Register-Inhalt  oder  intern RAM-Inhalt  zum ACC.
  84.     Nach der Ausführung hält der  ACC das Ergebnis,  CY hält den Über-
  85.     trag aus Bit 7 und AC hält den Übertrag aus Bit 3. Das OV-Flag ist
  86.     gesetzt, wenn ein Vorzeichenfehler auftrat.
  87.  
  88.                ┌─────────┬─────────┐
  89.     ADD A, #wert   │   24h   │   wert  │   1 Cyc
  90.                ├─────────┼─────────┘
  91.     ADD A, @Ri     │0010 011i│             1 Cyc
  92.                ├─────────┤
  93.     ADD A, Rn      │0010 1nnn│             1 Cyc
  94.                ├─────────┼─────────┐
  95.     ADD A, data    │   25h   │   data  │   1 Cyc
  96.                └─────────┴─────────┘
  97.  
  98.  
  99.  
  100.     ──────────────────────────────────────────────────────────────────
  101.     ADDC                        Flags: CY AC P OV
  102.  
  103.     Addiere mit Übertrag zu ACC
  104.  
  105.     Addiere Wert, Register-Inhalt, oder intern RAM-Inhalt und  CY  zum
  106.     ACC.  Nach der Ausführung hält der  ACC das Ergebnis,  CY hält den
  107.     Übertrag aus Bit 7 und AC hält den Übertrag aus    Bit 3. Das OV-Flag
  108.     ist gesetzt, wenn ein Vorzeichenfehler auftrat.
  109.  
  110.                ┌─────────┬─────────┐
  111.     ADDC A, #wert  │   34h   │   wert  │   1 Cyc
  112.                ├─────────┼─────────┘
  113.     ADDC A, @Ri    │0011 011i│             1 Cyc
  114.                ├─────────┤
  115.     ADDC A, Rn     │0011 1nnn│             1 Cyc
  116.                ├─────────┼─────────┐
  117.     ADDC A, data   │   35h   │   data  │   1 Cyc
  118.                └─────────┴─────────┘
  119.  
  120.     ──────────────────────────────────────────────────────────────────
  121.     AJMP                        Flags: -
  122.  
  123.     Absoluter Sprung (innerhalb 2 KByte Page):
  124.  
  125.     Der PC wird um  2 incrementiert, die Zieladresse wird dann folgen-
  126.     dermaße gebildet:
  127.  
  128.        A11 bis A15 im PC (Programm-Counter) bleiben unverändert,
  129.        die unteren 11 Bit werden aus dem Opcode geladen.
  130.  
  131.                ┌────────────────┬───────────────────────┐
  132.     AJMP codeAdr   │A10 A9 A8 0 0001│A7 A6 A5 A4 A3 A2 A1 A0│   2 Cyc
  133.                └────────────────┴───────────────────────┘
  134.  
  135.  
  136.  
  137.  
  138.     ──────────────────────────────────────────────────────────────────
  139.     ANL                        Flags: -
  140.  
  141.     Logisch AND zu ACC, intern RAM oder SFR
  142.  
  143.     Der Inhalt der angegebenen Register wird bitweise logisch AND ver-
  144.     knüpft und im ersten Register gespeichert.
  145.  
  146.              ┌─────────┬─────────┐
  147.     ANL A, #wert     │   54h   │  wert   │             1 Cyc   P-Flag
  148.              ├─────────┼─────────┘
  149.     ANL A, @Ri       │0101 011i│                       1 Cyc   P-Flag
  150.              ├─────────┤
  151.     ANL A, Rn        │0101 1nnn│                       1 Cyc   P-Flag
  152.              ├─────────┼─────────┐
  153.     ANL A, data      │   55h   │  data   │             1 Cyc   P-Flag
  154.              ├─────────┼─────────┤
  155.     ANL data, A      │   52h   │  data   │             1 Cyc
  156.              ├─────────┼─────────┼─────────┐
  157.     ANL data, #wert  │   53h   │  data   │  wert   │   2 Cyc
  158.              └─────────┴─────────┴─────────┘
  159.  
  160.  
  161.  
  162.     (Anmerkung: X AND Y = 1 nur dann, wenn beide X=1 und Y=1)
  163.  
  164.     ──────────────────────────────────────────────────────────────────
  165.     ANL                        Flags: CY
  166.  
  167.     Logisch AND zum CY-Flag
  168.  
  169.     Der Inhalt der angegebenen Bit-Adresse wird logisch AND mit dem CY-
  170.     Flag verknüpft. /bit bedeutet, das der negierte Bit-Inhalt verwen-
  171.     det wird. 
  172.  
  173.                ┌─────────┬─────────┐
  174.     ANL C, bit     │   82h   │ bitAdr  │   2 Cyc
  175.                ├─────────┼─────────┤
  176.     ANL C, /bit    │   B0h   │ bitAdr  │   2 Cyc
  177.                └─────────┴─────────┘
  178.  
  179.  
  180.     ──────────────────────────────────────────────────────────────────
  181.     CJNE                        Flags: CY
  182.  
  183.     Vergleiche und springe, wenn nicht gleich
  184.  
  185.     Ist der linke Operand  kleiner als der Rechte, so ist anschließend
  186.     das Carry Flag gesetzt (CY = 1).
  187.  
  188.                  ┌─────────┬─────────┬─────────┐
  189.     CJNE A, data, codeAdr    │   B5h   │   data  │ Offset  │   2 Cyc
  190.                  ├─────────┼─────────┼─────────┤
  191.     CJNE A, #wert, codeAdr   │   B4h   │   wert  │ Offset  │   2 Cyc
  192.                  ├─────────┼─────────┼─────────┤
  193.     CJNE Rn, #wert, codeAdr  │1011 1nnn│   wert  │ Offset  │   2 Cyc
  194.                  ├─────────┼─────────┼─────────┤
  195.     CJNE @Ri, #wert, codeAdr │1011 011i│   wert  │ Offset  │   2 Cyc
  196.                  └─────────┴─────────┴─────────┘
  197.  
  198.  
  199.  
  200.  
  201.  
  202.     ──────────────────────────────────────────────────────────────────
  203.     CLR                        Flags: P
  204.  
  205.     Lösche ACC
  206.                ┌─────────┐
  207.     CLR A          │   E4h   │   1 Cyc
  208.                └─────────┘
  209.  
  210.  
  211.  
  212.  
  213.     ──────────────────────────────────────────────────────────────────
  214.     CLR                        Flags: CY
  215.  
  216.     Lösche Bit
  217.                ┌─────────┐
  218.     CLR C          │   C3h   │             1 Cyc
  219.                ├─────────┼─────────┐
  220.     CLR bit        │   C2h   │ bitAdr  │   1 Cyc     no Flags
  221.                └─────────┴─────────┘
  222.  
  223.  
  224.  
  225.  
  226.  
  227.     ──────────────────────────────────────────────────────────────────
  228.     CPL                        Flags: P
  229.  
  230.     Einerkomplement zu ACC (= ACC bitweise invertieren)
  231.  
  232.     Der Befehlssatz des 8051 kennt kein  Zweierkomlement. Es kann aber
  233.     gebildet werden durch CPL A mit anschließenden INC A.
  234.  
  235.                ┌─────────┐
  236.     CPL A          │   F4h   │   1 Cyc
  237.                └─────────┘
  238.  
  239.  
  240.     ──────────────────────────────────────────────────────────────────
  241.     CPL                        Flags: CY
  242.  
  243.     Invertiere Bit
  244.                ┌─────────┐
  245.     CPL C          │   B3h   │             1 Cyc
  246.                ├─────────┼─────────┐
  247.     CPL bit        │   B2h   │ bitAdr  │   1 Cyc    no Flags
  248.                └─────────