Mikrocontroller der mcs51-Familie. Mikrocontroller MCS–51: Programmmodell, Struktur, Befehle Programmierung von MK-Ports in der Sprache c 51

ARCHITEKTUR DER MIKROCONTROLLER-FAMILIEMCS-51

Vorlesungsskripte für Lehrveranstaltungen

„Mikroprozessoren in Steuerungssystemen“, „Mikroprozessortechnik“

„Mikroprozessor-Tools und -Systeme“

für Studierende aller Fachrichtungen

072000 – Standardisierung und Zertifizierung

210200 – Automatisierung technologischer Prozesse

230104 – Computergestützte Designsysteme

Tambow 2005

EINFÜHRUNG.. 3

1. AUFBAU DES INTEL 8051 MIKROCONTROLLERS. 3

1.1. Organisation des Gedächtnisses. 5

1.2. Arithmetisch-logisches Gerät. 6

1.3. Residenter Speicher für Programme und Daten. 7

1.4. Akkumulator- und Allzweckregister. 8

1.5. Das Programmstatuswortregister und seine Flags. 9

1.6. Zeigerregister. 10

1.7. Sonderfunktionsregister. elf

1.8. Steuer- und Synchronisationsgerät. elf

1.9. Parallele Ports Eingabe/Ausgabe von Informationen. 12

1.10. Timer/Zähler. 13

1.11. Serielle Schnittstelle. 18

1.11.1. Registrieren Sie SBUF.. 18

1.11.2. Betriebsmodi der seriellen Schnittstelle. 18

1.11.3. Registrieren Sie SCON.. 19

1.11.4. Empfangs-/Übertragungsgeschwindigkeit. 21

1.12. System unterbrechen. 22

2. BEFEHLSSYSTEM DES MIKROCONTROLLERS INTEL 8051. 26

2.1. Allgemeine Informationen. 26

2.1.1. Arten von Befehlen. 27

2.1.2. Operandentypen. 28

2.1.3. Methoden zur Datenadressierung. dreißig

2.1.4. Ergebnisflags. 31

2.1.5. Symbolische Adressierung. 32

2.2. Befehle zur Datenübertragung. 33

2.2.1. Struktur der Informationslinks. 33

2.2.2. Zugriff auf die Batterie. 33

2.2.3. Zugriff auf externen Datenspeicher. 34

2.2.4. Auf den Programmspeicher zugreifen... 34


2.2.5. Zugriff auf den Stapel. 35

2.3. Rechenoperationen. 35

2.4. Logische Operationen. 39

2.5. Steuerübertragungsbefehle. 43

2.5.1. Langer Übergang. 43

2.5.2. Absoluter Übergang. 43

2.5.3. Relativer Übergang. 44

2.5.4. Indirekte Übertragung. 44

2.5.5. Bedingte Sprünge.. 44

2.5.6. Unterprogramme.. 47

2.6. Operationen mit Bits. 48

Testfragen... 49

LITERATUR.. 50

Anhang INTEL 8051 BEFEHLSSYSTEM. 51

EINFÜHRUNG

Seit den 80er Jahren des 20. Jahrhunderts hat sich in der Mikroprozessortechnik eine eigenständige Klasse herausgebildet integrierte Schaltkreise– Single-Chip-Mikrocontroller, die für die Integration in Geräte für verschiedene Zwecke konzipiert sind. Sie unterscheiden sich von der Klasse der Single-Chip-Mikroprozessoren durch das Vorhandensein eines internen Speichers und entwickelte Mittel zur Interaktion mit externen Geräten.

Weit verbreitet sind 8-Bit-Single-Chip-Mikrocontroller der MCS-51-Familie. Diese Familie wurde auf Basis des Intel 8051-Mikrocontrollers gebildet, der aufgrund seiner durchdachten Architektur bei Entwicklern von Mikroprozessor-Steuerungssystemen große Popularität erlangt hat. Die Mikrocontroller-Architektur besteht aus einer Reihe interner und externer per Software zugänglicher Hardwareressourcen und Befehlssysteme.

Anschließend veröffentlichte Intel etwa 50 Modelle, die auf dem Kern des Mikrocontrollers Intel 8051 basierten. Gleichzeitig begannen viele andere Unternehmen wie Atmel und Philips mit der Produktion eigener Mikrocontroller, die im MCS-51-Standard entwickelt wurden. Es gibt auch ein inländisches Analogon des Intel 8051-Mikrocontrollers – den K1816BE51-Chip.

2. AUFBAU DES INTEL 8051 MIKROCONTROLLERS

Der Intel 8051-Mikrocontroller basiert auf der High-Level-n-MOS-Technologie. Seine Hauptmerkmale sind wie folgt:

· 8-Bit-Zentralprozessor, optimiert für die Implementierung von Steuerfunktionen;

· eingebauter Taktgenerator (maximale Frequenz 12 MHz);

· Adressraum des Programmspeichers – 64 KB;

· Adressraum des Datenspeichers – 64 KB;

· interner Programmspeicher – 4 KB;

· interner Datenspeicher – 128 Byte;

· zusätzliche Möglichkeiten zur Durchführung boolescher Algebra-Operationen (bitweise Operationen);

· 2 multifunktionale 16-Bit-Timer/Zähler;

· asynchroner Vollduplex-Transceiver (serielle Schnittstelle);

· Vektorisiertes Interrupt-System mit zwei Prioritätsstufen und fünf Ereignisquellen.

Abbildung 1 – Blockdiagramm des Intel 8051-Mikrocontrollers

Die Grundlage des Blockdiagramms (Abb. 1) bildet ein interner bidirektionaler 8-Bit-Bus, der die Hauptknoten und Geräte des Mikrocontrollers miteinander verbindet: residenter Programmspeicher (RPM), residenter Datenspeicher (RDM), arithmetisch-logisch (ALU), Sonderfunktionen der Registereinheit, Steuereinheit (CU), parallele I/O-Ports (P0-P3) sowie programmierbare Timer und eine serielle Schnittstelle.

2.1. Gedächtnisorganisation

Dieser Mikrocontroller verfügt über einen integrierten (residenten) und externen Speicher für Programme und Daten. Der residente Programmspeicher (RPM) hat eine Kapazität von 4 KB und der residente Datenspeicher (RDM) hat eine Kapazität von 128 Bytes.


Abhängig von der Modifikation des Mikrocontrollers wird RPM in Form eines Masken-ROMs, eines einmalig programmierbaren oder umprogrammierbaren ROMs implementiert.

Bei Bedarf kann der Benutzer den Programmspeicher durch den Einbau eines externen ROM erweitern. Der Zugriff auf das interne oder externe ROM wird durch den Wert des Signals am Pin EA (External Access) bestimmt:

EA=VCC (Versorgungsspannung) – Zugriff auf internes ROM;

EA=VSS (Erdpotential) – Zugriff auf externes ROM.

Der externe Programm- und Datenspeicher kann jeweils 64 KB groß sein und über die Ports P0 und P2 angesprochen werden. Abbildung 2 zeigt die Intel 8051-Speicherkarte.

Abbildung 2 – Intel 8051-Speicherorganisation

Externes ROM-Lese-Strobe – (Program Store Enable) wird beim Zugriff auf den externen Programmspeicher generiert und ist beim Zugriff auf das ROM auf dem Chip inaktiv.

Der Bereich der unteren Programmspeicheradressen (Abb. 3) wird vom Interrupt-System genutzt. Die INTEL 8051-Chiparchitektur bietet Unterstützung für fünf Interrupt-Quellen. Die Adressen, an die die Interrupt-Steuerung übertragen wird, werden Interrupt-Vektoren genannt.

Abbildung 3 – Karte des unteren Bereichs Programmspeicher

2.2. Arithmetik-Logikeinheit

Die 8-Bit-Arithmetik-Logik-Einheit (ALU) kann die arithmetischen Operationen Addition, Subtraktion, Multiplikation und Division ausführen; logische Operationen UND, ODER, exklusives ODER sowie Operationen zum zyklischen Verschieben, Zurücksetzen, Invertieren usw. Per Software nicht zugängliche Register T1 und T2, vorgesehen für die vorübergehende Speicherung von Operanden, eine Dezimalkorrekturschaltung (DCU) und eine Merkmalsgenerierungsschaltung sind mit den Eingängen Operationsergebnis (PSW) verbunden.

Die einfache Additionsoperation wird in der ALU verwendet, um den Inhalt von Registern zu erhöhen, das Datenzeigerregister (RAR) vorzurücken und automatisch die nächste programmresidente Speicheradresse zu berechnen. Die einfachste Subtraktionsoperation wird in der ALU verwendet, um Register zu dekrementieren und Variablen zu vergleichen.

Die einfachsten Operationen bilden automatisch „Tandems“, um Operationen wie beispielsweise das Inkrementieren von 16-Bit-Registerpaaren durchzuführen. Die ALU implementiert einen Mechanismus zur kaskadierten Ausführung einfacher Operationen, um komplexe Befehle zu implementieren. So wird beispielsweise bei der Ausführung eines der bedingten Steuerübertragungsbefehle basierend auf dem Vergleichsergebnis in der ALU der Programmzähler (PC) dreimal erhöht, der RDM zweimal gelesen, ein arithmetischer Vergleich zweier Variablen durchgeführt, Es wird eine 16-Bit-Übergangsadresse gebildet und entsprechend dem Programm entschieden, ob der Übergang durchgeführt werden soll oder nicht. Alle oben genannten Vorgänge werden in nur 2 μs ausgeführt.

Ein wichtiges Merkmal der ALU ist ihre Fähigkeit, nicht nur Bytes, sondern auch Bits zu verarbeiten. Einzelne per Software zugängliche Bits können gesetzt, gelöscht, invertiert, übertragen, getestet und in logischen Operationen verwendet werden. Diese Fähigkeit ist sehr wichtig, da zur Steuerung von Objekten häufig Algorithmen verwendet werden, die Operationen an booleschen Ein- und Ausgabevariablen enthalten, deren Implementierung mit herkömmlichen Mikroprozessoren mit gewissen Schwierigkeiten verbunden ist.

Somit kann die ALU mit vier Arten von Informationsobjekten arbeiten: Boolean (1 Bit), digital (4 Bit), Byte (8 Bit) und Adresse (16 Bit). Die ALU führt 51 aus unterschiedliche BedienungÜbertragung oder Umwandlung dieser Daten. Da es 11 Adressierungsmodi gibt (7 für Daten und 4 für Adressen), wird durch die Kombination von Operation und Adressierungsmodus die Grundanzahl von 111 Befehlen auf 255 von 256 möglichen mit einem Einzelbyte-Opcode erweitert.

2.3. Residenter Programm- und Datenspeicher

Interner (on-chip) Programmspeicher (RPM) und Datenspeicher (RDM) sind physisch und logisch getrennt, verfügen über unterschiedliche Adressierungsmechanismen, werden von unterschiedlichen Signalen gesteuert und führen unterschiedliche Funktionen aus.

Der RPM-Programmspeicher hat eine Kapazität von 4 KB und ist für die Speicherung von Befehlen, Konstanten, Initialisierungssteuerwörtern, Konvertierungstabellen für Ein- und Ausgangsvariablen usw. ausgelegt. Der Speicher verfügt über einen 16-Bit-Adressbus, über den der Zugriff von dort aus erfolgt PC-Programmzähler oder aus dem Register. Datenzeiger (DPTR). DPTR fungiert als Basisregister für indirekte Programmsprünge oder wird in Tabellenoperationen verwendet.

Der RDM-Datenspeicher dient zur Speicherung von Variablen während der Ausführung eines Anwendungsprogramms, ist durch ein Byte adressierbar und verfügt über eine Kapazität
128 Byte. Darüber hinaus grenzt sein Adressraum an die Adressen der Sonderfunktionsregister, die in der Tabelle aufgeführt sind. 1.

Der Programmspeicher ist ebenso wie der Datenspeicher erweiterbar
64 KB durch Anschluss externer Chips.

Tabelle 1

Sonderfunktionsregisterblock

Name

Batterie

Akkumulator-Expander-Register

Programmstatuswort

Stapelzeigerregister

Datenzeigerregister

Interrupt-Prioritätsregister

Unterbrechen Sie das Maskenregister

Register für Timer-/Zählermodus

Timer-Steuerung/Statusregister

Timer 0 (High-Byte)

Timer 0 (Low-Byte)

Timer 1 (High-Byte)

Timer 1 (Low-Byte)

Transceiver-Steuerregister

Transceiver-Puffer

Leistungskontrollregister

Notiz. Register, deren Namen mit (*) gekennzeichnet sind, ermöglichen die Adressierung einzelner Bits.

2.4. Akkumulator und allgemeine Register

Der Akkumulator (A) ist die Quelle des Operanden und der Ort des Ergebnisses bei der Durchführung arithmetischer, logischer Operationen und einer Reihe von Datenübertragungsoperationen. Darüber hinaus können Schiebeoperationen, die Prüfung auf Null, das Erzeugen eines Paritätsflags usw. nur über den Akkumulator durchgeführt werden.

Dem Benutzer stehen vier Bänke mit jeweils 8 Universalregistern R0–R7 zur Verfügung (Abb. 9). Es ist jedoch möglich, die Register nur einer der vier Bänke zu verwenden, die über das PSW-Registerbit ausgewählt wird.

2.5. Programmstatuswortregister und seine Flags

Wenn viele Anweisungen in der ALU ausgeführt werden, werden eine Reihe von Operationsattributen (Flags) generiert, die im Programmstatuswort-Register (PSW) aufgezeichnet werden. In der Tabelle 2 enthält eine Liste der PSW-Flaggen, nennt ihre symbolischen Namen und beschreibt die Bedingungen für ihre Bildung.

Tabelle 2

PSW-Programmstatuswortformat

Name und Zweck

Flagge tragen. Setzen und Zurücksetzen durch Hardware oder Software bei der Ausführung arithmetischer und logischer Operationen

Hilfstrageflagge. Wird nur von der Hardware gesetzt und gelöscht, wenn Additions- und Subtraktionsanweisungen ausgeführt werden, und signalisiert einen Übertrag oder einen Kredit in Bit 3

Flag 0. Kann vom Programm als benutzerdefiniertes Flag gesetzt, gelöscht oder überprüft werden.

Auswahl einer Registerbank. Per Software eingestellt und zurückgesetzt, um eine funktionierende Registerbank auszuwählen (Tabelle 3)

Überlaufflag. Wird bei der Ausführung arithmetischer Operationen von der Hardware gesetzt und zurückgesetzt

Wird nicht benutzt

Paritätsflagge. Wird in jedem Zyklus von der Hardware gesetzt und zurückgesetzt und legt die ungerade/gerade Anzahl von Eins-Bits im Akkumulator fest, d. h. führt Parität durch

Tisch 3

Auswahl einer Arbeitsregisterbank

Adressgrenzen

Das „aktivste“ PSW-Flag ist das Carry-Flag, das bei vielen Operationen, einschließlich Addition, Subtraktion und Verschiebungen, beteiligt ist und geändert wird. Darüber hinaus fungiert das Carry-Flag (CY) als „boolescher Akkumulator“ in Bitmanipulationsanweisungen. Das Überlaufflag (OV) erkennt einen arithmetischen Überlauf bei vorzeichenbehafteten Ganzzahloperationen und macht dies mögliche Verwendung Arithmetik in Komplementärcodes. Die ALU steuert nicht die Registerbank-Auswahlflags (RS0, RS1), ihr Wert wird vollständig vom Anwendungsprogramm bestimmt und dient zur Auswahl einer der vier Registerbänke.

Als Byte lässt sich das PSW-Register wie folgt darstellen:

In Mikroprozessoren, deren Architektur auf einem Akkumulator basiert, werden die meisten Befehle über implizite Adressierung auf dem Akkumulator ausgeführt. Der Intel 8051 ist anders. Obwohl der Prozessor auf einer Batterie basiert, kann er viele Befehle ohne dessen Beteiligung ausführen. Beispielsweise können Daten von jeder RDM-Zelle in jedes Register übertragen werden, jedes Register kann mit einem unmittelbaren Operanden geladen werden usw. Viele logische Operationen können ohne Einbeziehung eines Akkumulators ausgeführt werden. Darüber hinaus können Variablen ohne Verwendung eines Akkumulators inkrementiert, dekrementiert und überprüft werden. Flags und Steuerbits können auf die gleiche Weise überprüft und geändert werden.

2.6. Zeigerregister

Der 8-Bit-Stapelzeiger (SP) kann jeden RDM-Bereich ansprechen. Sein Inhalt wird inkrementiert, bevor die Daten während der PUSH- und CALL-Anweisungen auf dem Stapel gespeichert werden. Der Inhalt des SP wird dekrementiert, nachdem die Befehle POP und RET ausgeführt wurden. Diese Methode zur Adressierung von Stack-Elementen wird als Pre-Inkrementierung/Post-Dekrementierung bezeichnet. Bei der Initialisierung des Mikrocontrollers wird nach dem RST-Signal automatisch der Code 07H in den SP geladen. Das bedeutet, dass sich das erste Datenelement auf dem Stapel am RDM-Speicherort 08H befindet, sofern das Anwendungsprogramm den Stapel nicht überschreibt.

Das Zwei-Byte-Datenzeigerregister DPTR wird typischerweise zum Erfassen einer 16-Bit-Adresse bei externen Speicherzugriffsvorgängen verwendet. Durch Mikrocontroller-Befehle kann das Datenzeigerregister entweder als 16-Bit-Register oder als zwei unabhängige 8-Bit-Register (DPH und DPL) verwendet werden.

2.7. Sonderfunktionsregister

Die Register mit den symbolischen Namen IP, IE, TMOD, TCON, SCON und PCON werden zum Zwischenspeichern und programmgesteuerten Ändern der Steuer- und Statusbits der Interrupt-Schaltung, des Timers/Zählers, des seriellen Transceivers und der Energieverwaltung verwendet. Ihre Organisation wird in den Abschnitten 1.8-1.12 ausführlich beschrieben, wenn die Merkmale des Mikrocontrollers betrachtet werden unterschiedlicher Modus X.

2.8. Steuer- und Synchronisationsgerät

Ein Quarzresonator, der mit den externen Pins des Mikrocontrollers verbunden ist, steuert den Betrieb des internen Oszillators, der wiederum Synchronisationssignale erzeugt. Die Steuereinheit (CU) generiert auf der Grundlage von Synchronisationssignalen einen Maschinenzyklus mit einer festen Dauer von 12 Generatorperioden. Die meisten Mikrocontroller-Anweisungen werden in einem Maschinenzyklus ausgeführt. Einige Befehle, die mit 2-Byte-Wörtern arbeiten oder auf externen Speicher zugreifen, benötigen zwei Maschinenzyklen zur Ausführung. Lediglich die Divisions- und Multiplikationsanweisungen erfordern vier Maschinenzyklen. Basierend auf diesen Betriebsmerkmalen des Steuergeräts wird die Ausführungszeit von Anwendungsprogrammen berechnet.

In der Mikrocontroller-Schaltung befindet sich neben dem Steuergerät ein Befehlsregister (IR). Seine Funktion besteht darin, den Code des ausgeführten Befehls zu speichern.

Ein- und Ausgangssignale der Steuer- und Synchronisationseinrichtung:

1. PSEN – Programmspeicherauflösung,

2. ALE – Ausgangssignal zur Aktivierung der Adressfixierung,

3. PROG – Programmiersignal,

4. EA – Blockierung der Arbeit mit dem internen Speicher,

5. VPP – Programmierspannung,

6. RST – allgemeines Reset-Signal,

7. VPD – Speicher-Backup-Stromausgang von einer externen Quelle,

8. XTAL – Eingänge zum Anschluss eines Quarzresonators.

2.9. Parallele Ein-/Ausgangsports

Alle vier Ports (P0-P3) sind für die byteweise Eingabe bzw. Ausgabe von Informationen ausgelegt. Jeder Port enthält ein gesteuertes Latch-Register, einen Eingangspuffer und einen Ausgangstreiber.

Beim Zugriff auf externen Speicher werden die Ausgangstreiber der Ports P0 und P2 sowie der Eingangspuffer von Port P0 verwendet. In diesem Fall wird über Port P0 im Zeitmultiplexmodus zunächst das Low-Byte der Adresse ausgegeben und dann das Datenbyte ausgegeben oder empfangen. Port P2 gibt das höchstwertige Byte der Adresse aus, wenn die Adressbreite 16 Bit beträgt.

Alle Pins des Ports P3 können zur Umsetzung der in der Tabelle aufgeführten alternativen Funktionen genutzt werden. 4. Diese Funktionen können aktiviert werden, indem 1 in die entsprechenden Bits des Latch-Registers (P3.0-P3.7) von Port P3 geschrieben wird.

Tabelle 4

Alternative P3-Port-Funktionen

Name und Zweck

Lektüre. Beim Zugriff auf externe Datenspeicher wird von der Hardware ein aktives Low-Level-Signal erzeugt

Aufzeichnen. Beim Zugriff auf externe Datenspeicher wird von der Hardware ein aktives Low-Level-Signal erzeugt

Timer-/Zählereingang 1 oder Testeingang

Timer-/Zählereingang 0 oder Testeingang

U1. Erkennt den niedrigen Pegel oder das Abschaltsignal

Interrupt-Anforderungseingang 0. Erkennt einen niedrigen Pegel oder ein Abschaltsignal

Serieller Senderausgang im UART-Modus. Taktausgabe im Schieberegistermodus

Eingang des seriellen Empfängers im UART-Modus. Dateneingabe/-ausgabe im Schieberegistermodus

Port 0 ist bidirektional und die Ports 1-3 sind quasi-bidirektional. Jede Portleitung kann unabhängig für die Eingabe oder Ausgabe verwendet werden.

Basierend auf dem RST-Signal werden die Einheiten automatisch in die Latch-Register aller Ports geschrieben und so für den Eingabemodus eingerichtet.

Alle Ports können zur Organisation der Informationsein-/ausgabe über bidirektionale Übertragungsleitungen genutzt werden. Allerdings können die Ports P0 und P2 für diesen Zweck nicht verwendet werden, wenn das System über einen externen Speicher verfügt, dessen Kommunikation über einen gemeinsamen gemeinsamen Adress-/Datenbus organisiert wird, der im Zeitmultiplexmodus arbeitet.

Der Zugriff auf E/A-Ports ist über Befehle möglich, die ein Byte, ein einzelnes Bit oder eine beliebige Kombination von Bits bearbeiten. Darüber hinaus implementiert das Steuergerät in Fällen, in denen der Port sowohl Operand als auch Ziel des Ergebnisses ist, automatisch einen speziellen Modus namens „Lesen-Ändern-Schreiben“. Bei diesem Zugriffsmodus werden Signale nicht von den externen Pins des Ports, sondern von seinem Latch-Register eingegeben, wodurch ein falsches Lesen zuvor ausgegebener Informationen vermieden wird. Dieser Mechanismus für den Zugriff auf Ports ist in den Befehlen implementiert:

Mikrocontroller-Architektur

Das Verständnis der Mikrocontroller-Architektur ist der Schlüssel zum Erlernen von Assembler-Programmiersprachen. Die Struktur des Assemblers, das Format seiner Anweisungen, die Adressierung von Operanden usw. werden vollständig von der Architektur bestimmt. Der Zweck des Architekturstudiums ist:

· Identifizierung des für die Programmierung verfügbaren Registersatzes, ihrer funktionaler Zweck und Strukturen;

· Verständnis der Organisation des RAM und der Reihenfolge seiner Verwendung;

· Vertrautheit mit Datentypen;

· Studium des Formats von Maschinenbefehlen;

· Klärung der Organisation der Interruptbehandlung.

Die Architektur der MCS-51-Familie wird maßgeblich durch ihren Zweck bestimmt – den Bau kompakter und günstiger digitaler Geräte. Alle MK-Funktionen werden mit einer einzigen Mikroschaltung implementiert. Die MCS-51-Familie umfasst eine Reihe von Chips der meisten einfache Mikrocontroller zu recht komplex. Mit Mikrocontrollern der MCS-51-Familie können Sie sowohl Steuerungsaufgaben für verschiedene Geräte übernehmen als auch einzelne Komponenten einer analogen Schaltung implementieren. Alle Mikroschaltungen dieser Familie arbeiten mit demselben Befehlssystem, die meisten von ihnen sind in denselben Gehäusen mit derselben Pinbelegung (Pin-Nummerierung für das Gehäuse) implementiert. Dadurch können Sie Mikroschaltungen verschiedener Hersteller (wie Intel, Dallas, Atmel, Philips usw.) ohne Modifikation für das entwickelte Gerät verwenden schematische Darstellung Geräte und Programme.

MCS-51 basiert auf der Harvard-Architektur, bei der Programm- und Datenspeicher-Adressräume getrennt sind.

Das Blockschaltbild des Controllers ist in Abb. 2.3 dargestellt und besteht aus folgenden Hauptfunktionseinheiten: Steuereinheit, arithmetisch-logische Einheit, Timer-/Zählereinheit, serielle Schnittstelle und Interrupts, Programmzähler (Programmzähler), Datenspeicher und Programm Erinnerung.

Die bidirektionale Kommunikation erfolgt über einen internen 8-Bit-Datenbus. Schauen wir uns den Zweck jedes Blocks genauer an. Fast alle Mitglieder der MCS-51-Familie sind nach diesem Schema gebaut. Verschiedene Mikroschaltungen dieser Familie unterscheiden sich nur in speziellen Registern (einschließlich der Anzahl der Ports). Das Befehlssystem aller Controller der MCS-51-Familie enthält 111 Grundbefehle mit einem Format von 1, 2 oder 3 Byte und ändert sich beim Wechsel von einem Chip zum anderen nicht. Dies gewährleistet eine hervorragende Programmportabilität von einem Chip auf einen anderen.

Steuer- und Synchronisationseinheit(Timing and Control) dient der Erzeugung von Synchronisations- und Steuersignalen, die die Koordinierung des gemeinsamen Betriebs der Hauptcomputereinheiten in allen zulässigen Betriebsmodi gewährleisten. Die Steuereinheit umfasst:


  • Vorrichtung zur Bildung von Zeitintervallen,
  • kombinatorische Eingabe-Ausgabe-Schaltung,
  • Befehlsregister
  • Befehlsdecoder.

Eingang und Ausgang Signale der Steuer- und Synchronisationseinheit:

1 PSEN– Auflösung des Programmspeichers;

2 ALE– Ausgangssignal für die Erlaubnis zur Adressfestlegung;

3 PROG– Programmiersignal;

4 E.A.– Blockieren der Arbeit mit dem internen Speicher;

5 VPP– Programmierspannung;

6 RST– General-Reset-Signal.

Das Zeitmessgerät ist notwendig, um die Abfolge der CPU-Zustände zu synchronisieren, die den Maschinenzyklus bilden, sowie für den korrekten Betrieb aller internen Latches und Ausgangspuffer der Ports. Der Maschinenzyklus besteht aus sechs aufeinanderfolgenden Zuständen (States) von S1 bis S6, die wiederum in zwei Phasen unterteilt sind:

Phase 1 (Phase 1 – P1) und Phase 2 (Phase 2 – P2). Somit kann ein Maschinenzyklus als eine Folge von Zeitintervallen S1P1, S1P2, S2P1,...,S6P2 definiert werden. Die Dauer der Phase entspricht der Periode der Taktimpulse, sodass der Maschinenzyklus 12 Taktperioden dauert.

Die Anzahl der Maschinenzyklen bestimmt die Dauer der Anweisungen. Fast alle Anweisungen werden in einem oder zwei Maschinenzyklen ausgeführt, mit Ausnahme der Multiplikations- und Divisionsanweisungen, deren Ausführung vier Maschinenzyklen erfordert. Die I/O-Logik dient zum Empfangen und Ausgeben von Signalen, die den Informationsaustausch mit externen Geräten über die Ein-/Ausgangsports P0-P3 gewährleisten.

Befehlsregister Entwickelt, um den 8-Bit-Operationscode des ausgeführten Befehls aufzuzeichnen und zu speichern. Der Operationscode wird mit Hilfe eines Befehlsdecoders und einer Computersteuerlogik in ein Mikroprogramm zur Ausführung des Befehls umgewandelt.

Abbildung 2.3. Blockdiagramm des Intel 8051 Single-Chip-Mikrocontrollers

(MCS-51-Familie)

Arithmetik-Logikeinheit(ALU) ist eine parallele Acht-Bit-Einheit, die arithmetische und logische Operationen ausführt. Die ALU besteht aus:

  • temporäre Speicherregister – TMP1 und TMP2,
  • ROM-Konstanten,
  • Addierer,
  • zusätzliches Register - Register B,
  • Batterie - ACC,
  • Programmstatuswortregister (Flagregister) – PSW.

Temporäre Speicherregister TMP1, TMP2- Acht-Bit-Register, die dazu dienen, Operanden zu empfangen und zu speichern und gleichzeitig Operationen an ihnen auszuführen. Auf diese Register kann programmgesteuert nicht zugegriffen werden.

Konstantes ROM sorgt für die Generierung eines Korrekturcodes für die binäre Dezimaldarstellung von Daten, eines Maskencodes für Bitoperationen und eines Konstantencodes.

Paralleler Acht-Bit-Addierer ist eine kombinatorische Schaltung mit sequentiellem Übertrag, die für die Durchführung arithmetischer Additions-, Subtraktions- und logischer Additions-, Multiplikations-, Disparitäts- und Identitätsoperationen ausgelegt ist.

Registrieren Sie B- ein 8-Bit-Register, das bei Multiplikations- und Divisionsoperationen verwendet wird. Für andere Befehle kann es als zusätzliches Echtzeitregister behandelt werden.

Batterie- ein Acht-Bit-Register zum Empfangen und Speichern des Ergebnisses, das bei der Durchführung arithmetisch-logischer Operationen oder Schiebeoperationen erzielt wird.

Programmstatusregister PSW (Programmstatuswort) Entwickelt, um das Statuswort ausgeführter Befehle zu speichern. Wenn viele Anweisungen in der ALU ausgeführt werden, werden eine Reihe von Operationsattributen (Flags) generiert, die im Programmstatuswort-Register (PSW) aufgezeichnet werden. In der Tabelle 1 enthält eine Liste der PSW-Flaggen, nennt ihre symbolischen Namen und beschreibt die Bedingungen für ihre Bildung.

Interrupt- und serieller Schnittstellenblock – UART (Universal Asynchronous Receiver/Transmitter) Entwickelt, um die Eingabe und Ausgabe sequentieller Informationsflüsse zu organisieren und ein Programmunterbrechungssystem zu organisieren.

Per Definition bedeutet eine Unterbrechung, dass der Hauptprozess der Datenverarbeitung vorübergehend angehalten wird, um eine geplante oder ungeplante Aktion auszuführen, die durch den Betrieb von Hardware oder Software verursacht wird.

Diese Aktionen können Servicecharakter haben, Anforderungen des Benutzerprogramms zur Durchführung von Wartungsarbeiten sein oder eine Reaktion auf Notfallsituationen sein.

VORLESUNGSPLAN

1. Einleitung

2. Arithmetische und logische Anweisungen

3. Datenübertragungsbefehle

4. Boolesche Operationen

5. Sprunganweisungen

1. Einleitung

Befehlssystem MCS-51 unterstützt einen einzelnen Befehlssatz, der für die Ausführung von 8-Bit-Aktuatorsteuerungsalgorithmen ausgelegt ist. Es ist möglich, schnelle Methoden zur Adressierung des internen RAM und zur Durchführung von Bitoperationen an kleinen Datenstrukturen zu verwenden. Es gibt ein umfangreiches System zur Adressierung von Einzelbitvariablen als eigenständigen Datentyp, das die Verwendung einzelner Bits in Logik- und Steuerbefehlen der Booleschen Algebra ermöglicht.

Adressierungsmodi : Befehlssatz MCS-51 unterstützt die folgenden Adressierungsmodi. Direkte Ansprache: Der Operand wird durch die 8-Bit-Adresse im Befehl bestimmt. Die direkte Adressierung wird nur für die untere Hälfte des internen Datenspeichers und der Register verwendet SFR. Indirekte Adressierung: Der Befehl adressiert ein Register, das die Adresse des Operanden enthält. Diese Art der Adressierung wird für externes und internes RAM verwendet. Register können zur Angabe von 8-Bit-Adressen verwendet werden R0 Und R1 ausgewählte Registerbank oder Stapelzeiger SP. Für die 16-Bit-Adressierung wird nur das Datenzeigerregister verwendet DPTR.

Anweisungen registrieren : registriert R0–R7 Die aktuelle Registerbank kann über spezifische Befehle angesprochen werden, die ein 3-Bit-Feld enthalten, das die Registernummer im Befehl selbst angibt. In diesem Fall fehlt das entsprechende Adressfeld im Befehl. Operationen mit speziellen Registern: Einige Anweisungen verwenden einzelne Register (z. B. Akkumulatoroperationen, DPTR, usw.). In diesem Fall wird die Operandenadresse im Befehl überhaupt nicht angegeben. Sie wird durch den Operationscode vorgegeben.

Unmittelbare Konstanten : Die Konstante kann direkt im Befehl nach dem Opcode stehen.

Indexadressierung : Die Indexadressierung kann nur für den Zugriff auf den Programmspeicher und nur im Lesemodus verwendet werden. In diesem Modus werden Tabellen im Programmspeicher angezeigt. 16-Bit-Register ( DPTR oder Programmzähler) gibt die Basisadresse der gewünschten Tabelle an, und der Akkumulator gibt den Einstiegspunkt in diese an.

Befehlssatzverfügt über 42 Befehlsmnemoniken, um die 33 Funktionen dieses Systems zu spezifizieren. Die Syntax der meisten Assembler-Anweisungen besteht aus einer Funktionsmnemonik, gefolgt von Operanden, die Adressierungsmethoden und Datentypen angeben. Verschiedene Arten Daten- oder Adressierungsmodi werden durch die eingestellten Operanden bestimmt, nicht durch Änderungen in der Mnemonik.

Das Befehlssystem kann in fünf Gruppen unterteilt werden: Rechenbefehle; logische Befehle; Datenübertragungsbefehle; Bitprozessorbefehle; Verzweigungs- und Kontrollübertragungsbefehle. Die im Befehlssystem verwendeten Notationen und Symbole sind unten aufgeführt.

Tisch. Im Befehlssystem verwendete Notationen und Symbole

Bezeichnung, Symbol

Zweck

Batterie

Register der aktuell ausgewählten Registerbank

Die Nummer des im Befehl angegebenen geladenen Registers

Direkte

Direkt adressierbare interne 8-Bit-Datenzellenadresse, die eine interne Daten-RAM-Zelle (0–127) oder ein SFR-Sonderfunktionsregister (128–255) sein kann.

Indirekt adressierbare interne 8-Bit-Daten-RAM-Zelle

8 Bit Direkte im Operationscode enthaltene Daten (OPC)

DatenH

Höchstwertige Bits (15–8) der unmittelbaren 16-Bit-Daten

DatenL

Niedrigstwertige Bits (7–0) der unmittelbaren 16-Bit-Daten

11-Bit-Zieladresse

AdrL

Niedrigstwertige Bits der Zieladresse

8-Bit-Offset-Byte mit Vorzeichen

Direkt adressierbares Bit, dessen Adresse den im internen Daten-RAM oder Sonderfunktionsregister SFR befindlichen COP enthält

a15, a14...a0

Zieladressbits

Inhalt von Element X

Inhalte an der in Element X gespeicherten Adresse

Bit M von Element X


+

*
UND
ODER
XOR
/X

Operationen:
Zusatz
Subtraktion
Multiplikation
Abteilungen
logische Multiplikation (UND-Verknüpfung)
logische Addition (ODER-Verknüpfung)
Addition Modulo 2 (exklusives ODER)
Inversion von Element X

Funktionsmnemoniken sind eindeutig bestimmten Kombinationen von Adressierungsmethoden und Datentypen zugeordnet. Insgesamt sind im Kommandosystem 111 solcher Kombinationen möglich.

2. Arithmetische und logische Anweisungen

Wie p Beispiel Rechenunterricht, kann die Additionsoperation mit einem der folgenden Befehle ausgeführt werden.

HINZUFÜGENA,7 F 16 – Fügen Sie die Zahl 7 zum Inhalt von Register A hinzu F 16 und das Ergebnis im Register A speichern;

HINZUFÜGENA,@ R0 – Fügen Sie zum Inhalt von Register A die Nummer hinzu, deren Adresse (@ – kommerziell bei ) wird in einem Register gespeichert R 0 (indirekte Adressierung) und speichern Sie das Ergebnis im Register A;

A, R7 HINZUFÜGEN– Fügen Sie den Inhalt von Register A zum Inhalt von Register hinzu R 7 und speichern Sie das Ergebnis in Register A;

A,#127 HINZUFÜGEN– Fügen Sie zum Inhalt von Register A eine Zahl hinzu, deren Speicherzellenadresse 127 ist ( # – Zahlensymbol) und speichern Sie das Ergebnis in der Registrierung T- zu A.

Mit Ausnahme der Anweisung werden alle arithmetischen Anweisungen in einem Maschinenzyklus ausgeführt INC DPTR(Datenzeiger-Offset DPTR zum nächsten Byte), was zwei Maschinenzyklen erfordert, sowie Multiplikations- und Divisionsoperationen, die in 4 Maschinenzyklen durchgeführt werden. Jedes Byte im internen Datenspeicher kann ohne Verwendung einer Batterie inkrementiert und dekrementiert werden.

Anweisungen MUL AB führt eine Multiplikation (Multiplikation) der Daten im Akkumulator mit den Daten in Register B durch und platziert das Produkt in den Registern A (untere Hälfte) und B (obere Hälfte).

Anweisungen DIV AB dividiert (division) den Inhalt des Akkumulators durch den Wert im Register B, wobei der Rest in B und der Quotient im Akkumulator verbleiben.

Anweisungen DA A ist für binäre Dezimalarithmetikoperationen gedacht (arithmetische Operationen mit Zahlen, die im binären Dezimalcode dargestellt werden). Es konvertiert keine Binärzahl in BCD, liefert aber nur das richtige Ergebnis, wenn zwei binäre Dezimalzahlen addiert werden.

Beispiel logischer Befehl: Eine logische UND-Verknüpfung kann mit einem der folgenden Befehle ausgeführt werden:

ANLA,7 F 16 – logische Multiplikation des Inhalts von Register A mit der Zahl 7 F 16 und das Ergebnis wird im Register A gespeichert;

ANLA,@ R1 – logische Multiplikation des Inhalts von Register A mit der Zahl, deren Adresse im Register gespeichert ist R 1 (indirekte Adressierung) und speichern Sie das Ergebnis im Register A;

ANL A,R6– logische Multiplikation des Inhalts von Register A mit dem Inhalt des Registers R 6, und speichern Sie das Ergebnis in Register A;

ANL A,#53 – logische Multiplikation des Inhalts von Register A mit einer Zahl, deren Speicherzellenadresse 53 16 ist, und das Ergebnis wird im Register A gespeichert.

Alle logischen Operationen am Inhalt des Akkumulators werden in einem Maschinenzyklus ausgeführt, der Rest in zwei. Logische Operationen können auf jedem der unteren 128 Bytes des internen Datenspeichers oder auf jedem Register ausgeführt werden SFR (Sonderfunktionsregister) im Direktadressierungsmodus ohne Verwendung einer Batterie.

Die Drehschiebeoperationen RL A, RLC A usw. verschieben den Inhalt des Akkumulators um ein Bit nach rechts oder links. Bei einer zyklischen Linksverschiebung wird das niederwertigste Bit an die höchstwertige Position verschoben. Bei einer zyklischen Verschiebung nach rechts tritt das Gegenteil ein.

Betrieb Tauschen Sie A aus tauscht die Low- und High-Tetraden in der Batterie aus.

3. Datenübertragungsbefehle

Team MOV-Ziel, Quelle ermöglicht die Datenübertragung zwischen internen RAM-Zellen oder Sonderfunktionsregisterbereichen SFR ohne eine Batterie zu verwenden. In diesem Fall ist die Arbeit mit der oberen Hälfte des internen RAM nur im indirekten Adressierungsmodus und dem Zugriff auf Register möglich SFR– nur im Direktadressierungsmodus.

In allen Mikroschaltungen MCS-51 Der Stack wird direkt im residenten Datenspeicher abgelegt und wächst nach oben. Anweisungen DRÜCKEN Erhöht zunächst den Wert im Stapelzeigerregister SP und schreibt dann ein Datenbyte auf den Stapel. Mannschaften DRÜCKEN Und POP werden nur im direkten Adressierungsmodus (Schreiben oder Wiederherstellen eines Bytes) verwendet, bei indirekter Adressierung über ein Register ist der Stapel jedoch immer zugänglich SP. Somit kann der Stack auch die obersten 128 Byte Datenspeicher nutzen. Dieselben Überlegungen schließen die Möglichkeit aus, Stapelanweisungen zum Adressieren von Registern zu verwenden SFR.

Datenübertragungsanweisungen umfassen einen 16-Bit-Übertragungsvorgang MOV DPTR,#data16, das zum Initialisieren des Datenzeigerregisters verwendet wird DPTR beim Anzeigen von Tabellen im Programmspeicher oder beim Zugriff auf externe Datenspeicher.

Betrieb XCH A,Byte dient dem Datenaustausch zwischen dem Akkumulator und dem adressierten Byte. Team XCHD A,@Riähnelt dem vorherigen, wird jedoch nur für die unteren Tetraden durchgeführt, die am Operandenaustausch beteiligt sind.

Für den Zugriff auf externe Datenspeicher wird ausschließlich die indirekte Adressierung verwendet. Bei Single-Byte-Adressen werden Register verwendet R0 oder R1 aktuelle Registerbank und für 16-Bit – Datenzeigerregister DPTR. Bei jeder Methode des Zugriffs auf externe Datenspeicher übernimmt die Batterie die Rolle einer Informationsquelle oder eines Informationsempfängers.

Um auf Tabellen im Programmspeicher zuzugreifen, verwenden Sie die folgenden Befehle:

MOVC A,@A+ DPTR ;

MOVC A,@A+ PC .

Der Inhalt des Datenzeigerregisters wird als Basisadresse der Tabelle verwendet DPTR oder PC(Programmzähler) und der Offset wird daraus übernommen A. Diese Anweisungen dienen ausschließlich dem Lesen von Daten aus dem Programmspeicher, nicht jedoch dem Schreiben in diesen.

4. Boolesche Operationen

Mikroschaltungen MCS-51 enthalten einen „booleschen“ Prozessor. Der interne RAM verfügt über 128 direkt adressierbare Bits. Registerraum für Sonderfunktionen SFR kann auch bis zu 128-Bit-Felder unterstützen. Bitanweisungen führen bedingte Verzweigungen, Übertragungen, Rücksetzungen, Invertierungen sowie UND- und ODER-Operationen durch. Alle angegebenen Bits sind im Direktadressierungsmodus verfügbar.

Tragegebiss CF im Sonderfunktionsregister „Programmstatuswort“ P.S.W." wird als Ein-Bit-Akkumulator für einen booleschen Prozessor verwendet.

5. Sprunganweisungen

Die Adressen von Sprungoperationen werden in Assembler durch eine Bezeichnung oder einen reellen Wert im Programmspeicherplatz angegeben. Bedingte Verzweigungsadressen werden zu einem relativen Offset zusammengesetzt – einem Vorzeichenbyte, das dem Programmzähler hinzugefügt wird PC wenn die Übergangsbedingung erfüllt ist. Die Grenzen solcher Übergänge liegen zwischen minus 128 und 127, bezogen auf das erste Byte nach der Anweisung. Im Sonderfunktionsregister „Programmstatuswort“ P.S.W.„Es gibt kein Null-Flag, also die Anleitung JZ Und JNZÜberprüfen Sie die Bedingung „gleich Null“, um die Daten im Akkumulator zu testen.

Es gibt drei Arten von bedingungslosen Sprungbefehlen: SJMP, LJMP Und AJMP– Zieladressen, die sich im Format unterscheiden. Anweisungen SJMP kodiert die Adresse als relativen Offset und benötigt zwei Bytes. Die Sprungweite ist auf den Bereich von minus 128 bis 127 Bytes relativ zur folgenden Anweisung begrenzt SJMP.

In der Anleitung LJMP Die Zieladresse wird als 16-Bit-Konstante verwendet. Die Befehlslänge beträgt drei Bytes. Die Zieladresse kann sich an einer beliebigen Stelle im Programmspeicher befinden.

Team AJMP verwendet eine 11-Bit-Adresskonstante. Der Befehl besteht aus zwei Bytes. Wenn dieser Befehl ausgeführt wird, werden die unteren 11 Bits des Adresszählers durch die 11-Bit-Adresse aus dem Befehl ersetzt. Die fünf höchstwertigen Bits des Programmzählers PC bleiben unverändert. Somit kann der Übergang innerhalb eines 2K-Byte-Blocks erfolgen, in dem sich die auf die Anweisung folgende Anweisung befindet AJMP.

Es gibt zwei Arten von Befehlsaufrufen für ein Unterprogramm: LCALL Und EIN ANRUF. Anweisungen LCALL verwendet die 16-Bit-Adresse des aufgerufenen Unterprogramms. In diesem Fall kann sich das Unterprogramm an einer beliebigen Stelle im Programmspeicher befinden. Anweisungen EIN ANRUF verwendet eine 11-Bit-Unterprogrammadresse. In diesem Fall muss sich die aufgerufene Routine in einem einzelnen 2-KByte-Block mit der folgenden Anweisung befinden EIN ANRUF. Beide Versionen der Anweisung verschieben die Adresse der nächsten Anweisung auf den Stapel und laden sie in den Programmzähler PC entsprechenden Neuwert.

Das Unterprogramm endet mit der Anweisung RET, wodurch Sie nach dem Befehl zu der Anweisung zurückkehren können ANRUF. Dieser Befehl entfernt die Rücksprungadresse vom Stapel und lädt sie in den Programmzähler. PC . Anweisungen RETI Wird verwendet, um von Interrupt-Routinen zurückzukehren. Der einzige Unterschied RETI aus RET ist das RETI informiert das System darüber, dass die Interrupt-Verarbeitung abgeschlossen ist. Wenn zum Zeitpunkt der Ausführung RETI Gibt es keine weiteren Interrupts, dann ist es identisch RET.

Anweisungen DJNZ Entwickelt, um Zyklen zu steuern. Um eine Schleife auszuführen N Sobald Sie ein Byte mit einem Wert in den Zähler laden müssen N und schließen Sie den Schleifenkörper mit dem Befehl DJNZ, was den Beginn des Zyklus anzeigt.

Team CJNE vergleicht seine beiden Operanden als vorzeichenlose Ganzzahlen und springt zur darin angegebenen Adresse, wenn die verglichenen Operanden ungleich sind. Wenn der erste Operand kleiner als der zweite ist, dann das Übertragsbit CF ist auf „1“ gesetzt.

Alle Anweisungen in zusammengesetzter Form belegen 1, 2 oder 3 Bytes.

Mikrocontroller der MCS-51-Familie basieren auf der Harvard-Architektur, bei der Programmspeicher und Datenspeicher getrennt sind und über eigene Adressräume und Zugriffsmöglichkeiten verfügen.

Programmspeicher


Die maximale Speicherkapazität beträgt 64 KB, davon befinden sich 4 KB, 8 KB, 16 KB oder 32 KB Speicher (Tabelle 7.3.1) auf dem Chip, der Rest befindet sich außerhalb des Chips.
Wenn die Spannung am Pin EA = V CC Es werden sowohl interner als auch externer Speicher verwendet, wobei EA = V CC = 0 – nur externer Speicher.
Tabelle 7.3.1 zeigt Zugriffsadressen für den Programmspeicher für die angegebenen Fälle.
Der untere Bereich des Programmspeichers ist für den Start des Betriebs des Mikrocontrollers (Startadresse 0000h nach Reset) und für die Verarbeitung von Interrupts (Interruptadressen liegen im Abstand von 8 Bytes: 0003h, 000Bh, 0013h usw.) vorgesehen.


Der Programmspeicher ist schreibgeschützt und beim Zugriff:

● zu Externer Speicher Bei Programmen wird das ¯PSEN-Signal erzeugt und immer eine 16-Bit-Adresse gebildet.
Das Low-Byte der Adresse wird in der ersten Hälfte des Maschinenzyklus über Port P0 übertragen und durch die Unterbrechung des ALE-Strobe im Register fixiert.
In der zweiten Hälfte des Zyklus wird Port P0 verwendet, um ein Datenbyte vom externen Speicher in die MCU einzugeben.
Das High-Byte der Adresse wird während der gesamten Speicherzugriffszeit über Port P2 übertragen (Abb. 7.1.11);

● zu interner Speicher Das Lesesignal wird nicht generiert und Austauschzyklen werden auf dem internen Bus des Mikrocontrollers verwendet.

Datenspeicher

Interner Speicher Die Daten können in drei Blöcke unterteilt werden (Tabelle 7.3.2).

Der interne Speicher wird immer byteweise angesprochen, wodurch nur 256 Speicherzellen adressiert werden können.
Wie aus Tabelle 7.3.2 ersichtlich ist, verwenden die Befehle daher die oberen 8-Bit-Zellen des internen RAM und die SFR-Sonderfunktionsregister, die denselben Adressraum belegen verschiedene Wege Ansprache: indirekt und direkt.

Merkmale der Organisation des unteren Bereichs des internen RAM sind in Tabelle 7.3.3 wiedergegeben.

Die unteren 32 Byte des internen RAM mit den Adressen 00h.
1Fh sind in vier Bänken mit je acht Registern (R0.R7) gruppiert.
Die nächsten 16 Bytes RAM mit den Adressen 20h.
2Fh stellen einen Speicherbereich mit einer Kapazität von 8x16= 128 Bit dar, der den Zugriff auf jedes einzelne Bit ermöglicht.
Um eine Bankregisteradresse auszuwählen, verwenden Sie deren Namen R0.
R7, zur Bankauswahl – Bits RS0, RS1 des PSW-Statuswortregisters.

Bitadressen

Bitadressen sind in Tabelle 7.3.3 angegeben.

Die Adressierung wird durchgeführt Direkte Weg.

Eine Liste aller SFR-Sonderfunktionsregister mit ihren Adressen finden Sie in Tabelle 7.2.2.
Der Übersichtlichkeit halber in Tabelle 7.3.

4 ist gegeben Adresskarte registrierenSFR Mikroschaltungen der betrachteten MCS-51-Familie.
Die SFR-Adresse wird durch die Kombination der Spalten- und Zeilenziffern in bestimmt Hexadezimalsystem Abrechnung.

Das CMOD-Register hat beispielsweise die Adresse D9h.

Für SFR-Register, deren Adressen auf 0h oder 8h enden (sie sind fett gedruckt), zusätzlich zu Byte erlaubt bitweise Adressierung.

In diesem Fall ist die Adresse des Bits, das das N-te Bit im Register belegt, als XXh + ​​​​0Nh definiert, wobei XXh die Adresse des SFR-Registers ist, N = 0,7.
Bitadressen in diesem Bereich haben Werte von 80H bis FFH.
Beispielsweise liegen die Bitadressen des ACC-Akkumulators im Bereich E0h-E7h.

Externer Speicher Daten (bis zu 64 KB) werden durch zusätzliche, an die MK angeschlossene Speicherchips erzeugt.
Um mit externen Datenspeichern zu arbeiten, werden spezielle Befehle verwendet, damit sich die Adressräume von externem und internem Speicher nicht überschneiden und somit beide Arten von Datenspeichern gleichzeitig verwendet werden können.

Um auf externe Datenspeicherzellen zuzugreifen, verwenden Sie (Abb. 7.1.8):
● Befehle mit indirekter Adressierung;
● Signale lesen ¯RD und schreiben ¯WR;
● Port P0 zum Übertragen des Low-Byte der Adresse und zum Empfangen/Übertragen des Datenbytes;
● Port P2 zur Übertragung des High-Byte der Adresse.
Adressierungsmethoden.
Das Befehlssystem verwendet:
● direkte, indirekte, Register-, indirekte Register-, unmittelbare und Indexadressierung (indirekte Adressierung durch die Summe der Basis- und Indexregister) Quelloperanden;
● direkte, Register- und indirekte Registeradressierung Zieloperanden.
Durch die Kombination dieser Methoden (Adressierung) stehen 21 Adressierungsmodi zur Verfügung.
In dieser und den folgenden Befehlssystemtabellen wird die folgende Notation verwendet:

Direkte Ansprache.

Bei dieser Adressierungsmethode wird die Position des Bytes oder Datenbits durch die 8-Bit-Adresse des zweiten (und dritten) Bytes des Befehls bestimmt.
Die direkte Adressierung wird nur für den Zugriff auf den internen Datenspeicher (untere 128 Byte RAM) und Sonderfunktionsregister verwendet.

Adressierung registrieren.


Diese Adressierungsmethode ermöglicht den Zugriff auf Daten, die in einem der acht R0-Register gespeichert sind.
R7 der aktuellen Arbeitsregisterbank.
Es kann auch für den Zugriff auf A, B, AB (Doppelregister), DPTR-Zeigerregister und C-Carry-Flag verwendet werden.
Die Adresse der angegebenen Register ist im Operationscode enthalten, wodurch die Anzahl der Befehlsbytes reduziert wird.

Indirekte Registeradressierung.


In diesem Fall wird die Datenadresse in einem Zeigerregister gespeichert, dessen Position durch den Operationscode bestimmt wird.
Diese Adressierungsmethode wird verwendet, um auf das externe RAM und die obere Hälfte des internen RAM zuzugreifen.
Zeigerregister für 8-Bit-Adressen können die Register R0, R1 der ausgewählten Arbeitsregisterbank oder der Stapelzeiger SP sein; für die 16-Bit-Adressierung wird nur das Datenzeigerregister DPTR verwendet.

Direkte Ansprache.


Bei dieser Adressierungsmethode werden die Daten direkt im Befehl angegeben und befinden sich im zweiten (bzw. im zweiten und dritten) Byte des Befehls, d. h.
keine Speicheradressierung erforderlich.
Beispielsweise lädt der Befehl MOV A,#50 die Zahl 50 in Batterie A.

Indexadressierung.


Bei dieser Methode handelt es sich um eine indirekte Registeradressierung, bei der die Adresse eines Datenbytes als Summe der Inhalte der Basis- (DPTR oder PC) und Indexregister (A) bestimmt wird.
Weg wird nur für den Zugriff auf den Programmspeicher und nur im Lesemodus verwendet; Dies erleichtert das Anzeigen von im Programmspeicher gespeicherten Tabellen.

Team Struktur.

Die Befehlslänge beträgt ein (49 Befehle), zwei (45 Befehle) oder drei (17 Befehle) Bytes.
Das erste Byte des Befehls enthält immer den Operationscode (OC), und das zweite und dritte Byte sind die Adressen der Operanden oder die unmittelbaren Datenwerte.

Als Operanden können Einzelbits, Tetraden, Bytes und Doppelbyte-Wörter verwendet werden.
Es gibt 13 Befehlstypen, die in Tabelle 7.3.5 aufgeführt sind:

● A, PC, SP, DPTR, Rn (n = 0, 7) – Akkumulator, Programmzähler, Stapelzeiger, Datenzeigerregister und aktuelles Bankregister;
● Rm (m = 0, 1) – Register der aktuellen Bank, das für die indirekte Adressierung verwendet wird;
● direkt – 8-Bit-Adresse des direkt adressierten Operanden;
● Bit – Adresse des direkt adressierten Bits;
● rel – relative Adresse des Übergangs;
● addr11, addr16 – absolute 11- und 16-Bit-Sprungadresse;
● #data8, #data16 – unmittelbare Daten (Operanden) mit einer Länge von 8 und 16 Bit;
● A10, A9, A0 – einzelne Bits einer 11-Bit-Adresse;
● (.) – Inhalt der Speicherzelle an der in Klammern angegebenen Adresse;
● SB, MB – High- und Low-Byte des 16-Bit-Operanden.

Allgemeine Informationen zum Befehlssystem.

Das Befehlssystem bietet größere Möglichkeiten zur Verarbeitung von Daten in Form von Bits, Tetraden, Bytes, Doppelbyte-Wörtern und Echtzeitsteuerung.
Zur Beschreibung von Befehlen wird die Makroassemblersprache ASM51 verwendet. Die Syntax der meisten Befehle besteht aus einer Mnemonik (Abkürzung) für die auszuführende Operation, gefolgt von Operanden.
Zur Angabe werden Operanden verwendet verschiedene Wege Adressierung und Datentypen.

Insbesondere umfasst die Abkürzung MOV 18 verschiedene Befehle zur Verarbeitung von drei Datentypen (Bits, Bytes, Adressen) in unterschiedlichen Adressräumen.
Der Befehlssatz verfügt über 42 Mnemoniken von 111 Befehlstypen zur Angabe von 33 MK-Funktionen.

Von den 111 Anweisungen werden 64 in einem Maschinenzyklus, 45 in zwei Zyklen und nur zwei Anweisungen (MUL – Multiplikation und DIV – Division) in 4 Zyklen ausgeführt. Bei einer Taktgeneratorfrequenz von 12 MHz beträgt die Dauer des Maschinenzyklus (12 Taktzyklen) 1 μs. Von Funktionszeichen Die Teams können in fünf Gruppen eingeteilt werden. Nachfolgend finden Sie eine Beschreibung der Befehle jeder Gruppe, dargestellt in Tabellenform. Um die Tabellen kompakter zu gestalten, heben wir eine Gruppe von Befehlen hervor (Tabelle 7.3.6), deren Ausführung Einflüsse(gekennzeichnet mit einem +-Zeichen) über den Zustand der Flaggen PSW-Statuswortregister.

Datenübertragungsbefehle

Weiterleitungsbefehle können in separate Untergruppen unterteilt werden.
Befehle zum Übertragen und Austauschen von Daten zwischen internen Speicherzellen(Tabelle 7.3.7).

Die Befehle 1-16 mit der Mnemonik MOV dest, src sind für vorgesehen Weiterleitung ein Byte oder zwei Bytes (Befehl 16) Daten von der Quellquelle zum Zielziel, während:
● angeben Quelle(src) Es werden vier Adressierungsmethoden verwendet: registriert (Befehle 2–4, 6, 8), direkt (Befehle 1, 7, 9, 11), indirekt (Befehle 5, 10) und unmittelbar (Befehle 12–16);
● angeben Empfänger(Ziel) Es werden drei Methoden verwendet: Register (Befehle 1, 3...5, 9, 12, 14, 16), direkt (Befehle 2, 7, 8, 10, 13), indirekt (Befehle 6, 11, 15).

Die Teams 17-20 stellen zur Verfügung Austausch Informationen zwischen zwei Zellen des internen Datenspeichers (oder bidirektionale Übertragung).
Bei der Ausführung von HSN-Befehlen werden Bytes ausgetauscht, und XCHD-Befehle tauschen niederwertige Tetraden von Byte-Operanden aus.

Eine der Zellen ist immer der Akkumulator A. Als weitere Zelle beim Austausch von Bytes wird eines der Rn-Register der aktuellen Bank verwendet, A ist auch eine direkt oder indirekt adressierte interne Speicherzelle; beim Austausch von Notebooks - nur eine indirekt adressierbare interne Speicherzelle.

Da sich bei allen MKs der Stack im internen RAM befindet, umfasst diese Untergruppe Mannschaften(20, 21) Stack-Zugriffe PUSH-Quelle, POP-Ziel.
Diese Befehle verwenden nur die direkte Adressierung, indem sie ein Byte auf den Stapel schreiben oder es vom Stapel wiederherstellen.
Es ist zu beachten, dass bei MKs, die nicht über die oberen 128 Bytes im RAM verfügen, eine Erhöhung des Stapels über 128 Bytes hinaus zu Datenverlust führt.

Befehle zum Übertragen von Daten zwischen internem und externem Datenspeicher(Tabelle 7.3.8).

Diese Befehle verwenden nur indirekte Adressierung, während sich eine Einzelbyte-Adresse in P0 oder R1 der aktuellen Registerbank und eine Doppelbyte-Adresse im Datenzeigerregister DPTR befinden kann.
Bei jedem Zugriff auf den externen Speicher übernimmt der Akkumulator A die Rolle des Empfängers oder der Quelle von Operanden im internen Speicher.

Befehle zum Übertragen von Daten aus dem Programmspeicher(Tabelle 7.3.9).

Diese Befehle dienen zum Lesen von Tabellen aus dem Programmspeicher.

Mit dem Befehl MOVC A,@A + DPTR wird auf eine Tabelle mit einer Anzahl von Einträgen von 0 bis 255 zugegriffen.

Die Nummer des benötigten Tabelleneintrags wird in den Akkumulator geladen und das DPTR-Register auf den Startpunkt der Tabelle gesetzt. Eine Besonderheit des anderen Befehls besteht darin, dass der Programmzähler PC als Basiszeiger verwendet wird und der Zugriff auf die Tabelle von einem Unterprogramm aus erfolgt. Zuerst wird die Nummer des gewünschten Einsprungpunkts in den Akkumulator geladen, dann wird das Unterprogramm mit dem Befehl MOVC A,@A + PC aufgerufen. Die Tabelle kann 255 Eingänge mit Nummern von 1 bis 255 haben, da 0 für die Adresse des RET-Befehls zum Verlassen des Unterprogramms verwendet wird.

Befehle zur arithmetischen Datenverarbeitung. Alle arithmetischen Befehle werden für vorzeichenlose Ganzzahlen ausgeführt. Operationen an zwei Operanden(Tabelle 7.3.10). Im Betrieb Zusatz HINZUFÜGEN. Ergänzung mit Carry ADDC und Abzüge unter Berücksichtigung des Darlehens SUBB:

● Der Akkumulator dient als Quelle eines 8-Bit-Operanden und als Ziel des Ergebnisses.
● Die Quelle eines anderen Operanden ist entweder eines der Arbeitsregister Rn (n = 0-7) der aktuellen Bank oder direkt Direkte oder indirekt @Rm (m = 0, 1) die adressierte RAM-Speicherzelle, oder direkte Daten #data.

Operationen Multiplikation MUL und Abteilungen DIVs werden auf den Inhalten der Register A und B ausgeführt. Bei der Multiplikation werden die höchstwertigen 8 Bits des Ergebnisses in Register B und die niedrigstwertigen 8 Bits in Register A geschrieben.
Wenn das Produkt größer als 255 ist, wird das OV-Überlaufflag gesetzt; Das Carry-Flag C wird immer gelöscht. Der DIV-Befehl dividiert den 8-Bit-Operanden von Akkumulator A durch den 8-Bit-Operanden von Register B.
Beim Dividieren wird der Quotient (hochwertige Bits) in das Register in A geschrieben, der Rest (niederwertige Bits) wird in B geschrieben. Die Übertragsflags C und Überlauf OV werden zurückgesetzt.
Beim Versuch, durch 0 zu dividieren, wird das OV-Überlaufflag gesetzt. Die Divisionsoperation wird am häufigsten für Verschiebungen und Konvertierungen von Zahlenbasen verwendet.

Wenn eine Binärzahl durch 2 N geteilt wird, wird sie um N Bits nach links verschoben.
Die zusätzlichen Bits werden in Register B übertragen.

Operationen an Einzelbyte-Operanden(Tabelle 7.3.11).

Der DA-Befehl wird zum Ausführen von BCD-Operationen verwendet. Mit den Befehlen INC und DEC können Sie den Inhalt einer Speicherzelle jeweils um eins erhöhen bzw. verringern.
Sie gelten für den Inhalt des Akkumulators A, eines der Arbeitsregister Rn oder einer direkt oder indirekt adressierten Speicherzelle.
Die Erhöhung um eine Operation gilt auch für den Inhalt des 16-Bit-Zeigerregisters DPTR.

Befehle für logische Operationen.

Doppelte Operationen

(Tabelle 7.3.12).

Mit den Befehlen AML, ORL, XRL können Sie drei doppelte logische Operationen an 8-Bit-Operanden ausführen: ANL – logische Multiplikation (AND), ORL – logische Addition (OR), XRL – exklusives ODER (XOR).
Operationen werden an einzelnen Bits der Operanden ausgeführt. Quelle eines der Operanden und zugleich Empfänger des Ergebnisses ist entweder ein Akkumulator (A) oder eine direkt adressierbare Speicherzelle (direkt).
Für die Quelle des anderen Operanden wird die Register-, direkte, indirekte oder unmittelbare Adressierungsmethode verwendet.

Einzeloperationen

(Tabelle 7.3.13).
Die Gruppe umfasst auch eine Reihe von einstelligen Operationen auf den Inhalt von Akkumulator A: Löschoperationen (CLR), logische Addition oder Inversion (CPL), zyklische und erweiterte zyklische Verschiebungen um 1 Bit nach rechts (RL, RLC) und links (RR, RRC), Austausch von Tetraden oder zyklische Byteverschiebung um 4 Bit (SWAP) sowie eine Leeroperation (NOP), wodurch der Zustand aller MK-Register (außer dem Programmzähler) unverändert bleibt.

Steuerübertragungsbefehle

Unbedingte Sprungbefehle

(Tabelle 7.3.14).

Die Befehle 1-3 unterscheiden sich nur im Format der Zieladresse.

Der Befehl LJMP (L – Long) führt einen „langen“ bedingungslosen Sprung entlang aus angegebene Adresse addr16, Laden des PC-Zählers mit dem zweiten und dritten Byte des Befehls.
Der Befehl ermöglicht einen Übergang zu einem beliebigen Punkt im 64-KByte-Adressraum.

Der AJMP-Befehl (A – Absolute) ermöglicht einen „absoluten“ Sprung zu einer Adresse innerhalb einer 2-KByte-Seite, deren Startadresse durch die fünf höchstwertigen Bits des PC-Programmzählers angegeben wird (zunächst sind es die Inhalte des PC). um 2 erhöht).

Mit dem Befehl SJMP (S – Short) können Sie einen „kurzen“ unbedingten Sprung zur Adresse durchführen, der durch Addition des vorzeichenbehafteten Offsets rel im zweiten Byte des Befehls mit dem zuvor um 2 erhöhten Inhalt des PC-Zählers berechnet wird .

Die Sprungadresse liegt innerhalb von -128+127 Byte relativ zur Befehlsadresse.
Um zu einem beliebigen anderen Punkt im 64-Kilobyte-Adressraum zu gelangen, kann Befehl 4 auch mit indirekter @A+DPTR-Adressierung verwendet werden.
In diesem Fall wird der Inhalt von A als vorzeichenlose Ganzzahl interpretiert.

Eine Nulloperation (NOP), wodurch der Zustand aller Mikroprozessorregister (außer dem Programmzähler) unverändert bleibt.

Bedingte Sprungbefehle

(Tabelle 7.3.15).

Die Anweisungen JZ und JNZ springen, wenn der Inhalt des Akkumulators jeweils gleich oder ungleich Null ist.
Die Verzweigungsadresse wird berechnet, indem der relative Vorzeichenversatz rel mit dem Inhalt des PC-Programmzählers nach Addition von 2 (der Länge des Befehls in Bytes) addiert wird.

Der Inhalt der Batterie bleibt unverändert.
Befehle haben keinen Einfluss auf Flags.

Die CJNE-Befehle (3-6) werden verwendet, um einen bedingten Sprung basierend auf dem Ergebnis des Vergleichs zweier 8-Bit-Operanden zu implementieren, deren Position in den Befehlen angegeben ist.
Wenn ihre Werte nicht gleich sind, wird ein Übergang durchgeführt.

Die Sprungadresse wird durch Addition des Offsets rel mit dem zuvor um 3 erhöhten Inhalt des PC-Zählers berechnet.
Andernfalls wird der folgende Befehl ausgeführt.

Die Spalte Algorithmus zeigt den Einfluss der Werte der verglichenen 8-Bit-Operanden auf das Carry-Flag C.
DJNZ-Befehle (7, entworfen, um Programmzyklen zu organisieren.

Das Rn-Register oder die direkt adressierte Zelle stellt den Zykluswiederholungszähler dar, und der relative Offset (im zweiten und dritten Befehlsbyte) ist die relative Adresse des Übergangs zum Beginn des Zyklus.
Bei der Ausführung von Befehlen wird der Inhalt des Zählers um eins dekrementiert und auf Null überprüft.
Ist der Inhalt des Zählers ungleich Null, erfolgt der Übergang zum Schleifenanfang.
Andernfalls wird der folgende Befehl ausgeführt.

Die Sprungadresse wird berechnet, indem der Offset zum Inhalt des Zählers addiert wird, der zuvor um die Länge des Befehls (um 2 oder 3) erhöht wurde.
Befehlsflags sind nicht betroffen.

Befehle zum Aufrufen von Unterprogrammen und zum Zurückkehren aus Programmen

(Tabelle 7.3.16).
Die Anweisungen LCALL „langer Aufruf“ und ACALL „absoluter Aufruf“ führen einen unbedingten Aufruf eines Unterprogramms aus, das sich an der angegebenen Adresse befindet.

Der Unterschied zwischen diesen Befehlen und den oben besprochenen unbedingten Sprungbefehlen besteht darin, dass sie die Rücksprungadresse (den Inhalt des Zählers) im Hauptprogramm auf dem Stapel speichern.
Der Return-Befehl des RET-Unterprogramms stellt den Wert des Inhalts des Programmzählers vom Stapel wieder her, und der RETI-Befehl ermöglicht auch Unterbrechungen des Service-Levels.

Steuerübertragungsbefehle nutzen in großem Umfang die relative Adressierung, die verschiebbare Programmmodule unterstützt.
Die relative Adresse ist ein vorzeichenbehafteter 8-Bit-Offset rel, der eine Verzweigung von der aktuellen Position des PC-Zählers in beide Richtungen um ±127 Bytes ermöglicht.

Um zu einem anderen Punkt im 64-KByte-Adressraum zu gelangen, kann entweder die direkte Adresse addr16 oder die indirekte @A+DPTR-Adresse verwendet werden.
Im letzteren Fall wird der Inhalt von A als vorzeichenlose Ganzzahl interpretiert.

Aus Kompatibilitätsgründen mit der MK48-Architektur wurde die kurze Direktadressierungsoption addr11 innerhalb der 2K-Byte großen aktuellen Seite eingeführt.

Alle diese Adressierungstypen können nur auf die Sprungoperation angewendet werden, und für die Aufrufoperation sind nur die direkten Adressierungsmethoden addr16 und interne addr11 zulässig.
Alle bedingten Operationen können nur die relative Adressierung verwenden.

Wenn der MK51 eine Interrupt-Anfrage erkennt, gibt er einen der LCALL addr16-Befehle aus, der die Rücksprungadresse automatisch auf dem Stack speichert.
Im Gegensatz zum MK48 verfügt das MK51 jedoch nicht über automatisch gespeicherte Statusinformationen.

In diesem Fall reagiert die Interrupt-Logik nicht mehr auf Anfragen der Ebene, die für den Dienst akzeptiert wurde.
Um die Interrupt-Ebene zu senken, verwenden Sie den RETI-Interrupt-Return-Befehl, der neben der zu RET äquivalenten Operation auch die Operation zum Aktivieren des Interrupts dieser Ebene umfasst.
Zu den typischen bedingten Operationen MK51 gehören auch die Operationen JZ, JNZ.
Es gibt jedoch eine neue Operation „Compare and Go“ CJNE.

Bei diesem Befehl wird zunächst der Operand nach den Regeln zum Subtrahieren von ganzen Zahlen mit einer Konstanten verglichen und entsprechend dem Ergebnis des Vergleichs das CY-Flag gesetzt. Bei einer Abweichung von der Konstante erfolgt dann eine Verzweigung . Durch den Vergleich eines Akkumulators, Registers oder einer Speicherzelle mit einer Folge von Konstanten erhalten wir eine bequeme Möglichkeit, auf Übereinstimmungen zu prüfen, um beispielsweise Sonderfälle zu identifizieren.

Im Wesentlichen ist der CJNE-Befehl ein Element eines Hochsprachenoperators wie CASE.

Das DJNZ-Team wurde weiterentwickelt.
Nun kann der Programmierer nicht nur eines der Arbeitsregister Rn als Zähler verwenden, sondern auch jede beliebige DSEG-Speicherzelle.

Anweisungen für Bitoperationen.

Die Gruppe besteht aus 12 Befehlen, mit denen Sie Operationen an einem oder zwei Bits ausführen können (Zurücksetzen, Setzen, Bitinvertierung, A und logisches UND und ODER), und 5 Befehlen zur Implementierung bedingter Übergänge (Tabelle 7.3.17).

Die Befehle ermöglichen die direkte Adressierung von 128 Bits in sechzehn internen RAM-Zellen mit den Adressen 20h.
2Fh (Tabelle 7.3.3) und 128 Bits in Spezialregistern, deren Adressen Vielfache von acht sind (in Tabelle 7.3.4 fett dargestellt).

Bei der Ausführung von Operationen an zwei Einzelbit-Operanden wird der PSW-Registertrigger als logischer Akkumulator verwendet, der das Übertragsflag C speichert (Tabelle 7.1.2).

Die MOV (1,2)-Befehle implementieren Weiterleitung Bit von einer direkt adressierbaren Bitzelle des internen RAM zum Flip-Flop C oder in die entgegengesetzte Richtung.
Befehle CRL (3, 4), SETB (5, 6). zurücksetzen auf Null bzw Installieren Das Übertragsflag C oder das angegebene Bit wird auf Eins gesetzt.
Mit den Befehlen CPL, ANL, ORL (7-12) werden logische Operationen der Invertierung, Addition und Multiplikation durchgeführt.

Die Gruppe umfasst auch Befehle (13-17) zur Implementierung bedingter Sprungoperationen mit einem relativen 8-Bit-Offset rel.
Übergänge können sowohl beim Setzen des Bit- bzw. Carry-Flags (Befehle 13, 16) als auch beim Zurücksetzen (Befehle 14, 17) durchgeführt werden.

Der JBC-Befehl setzt dieses Bit nicht nur zur berechneten Adresse zurück, wenn die Bedingung (Bit) = 1 erfüllt ist, sondern auch auf den Nullzustand.
Bei der Ausführung von bedingten Sprungbefehlen wird die Sprungadresse berechnet, nachdem die Zahlen 3 oder 2 (die die Anzahl der Bytes im Befehl widerspiegeln) zum Inhalt des Zählers addiert werden.

An den Ursprüngen der Produktion von Mikrocontrollern steht Intel mit den Familien der Acht-Bit-Mikrocontroller 8048 und 8051. Die MCS-51-Architektur hat ihren Namen vom ersten Vertreter dieser Familie – dem 1980 auf Basis der HMOS-Technologie veröffentlichten Mikrocontroller 8051. Ein gelungener Satz an Peripheriegeräten, die Möglichkeit zur flexiblen Auswahl von externem oder internem Programmspeicher und ein erschwinglicher Preis sicherten den Markterfolg dieses Mikrocontrollers. Aus technologischer Sicht war der 8051-Mikrocontroller für seine Zeit ein sehr komplexes Produkt – im Kristall wurden 128.000 Transistoren verwendet, was dem Vierfachen der Anzahl der Transistoren im 16-Bit-8086-Mikroprozessor entspricht.

Die Hauptelemente der Grundarchitektur sind:
- 8-Bit-ALU basierend auf Batteriearchitektur;
- 4 Registerbänke, jeweils 8;
- eingebauter Programmspeicher 4 KB;
- interner RAM 128 Byte;
- Boolescher Prozessor
-2 Sechzehn-Bit-Timer;
- serieller Kanalcontroller (UART);
- Interrupt-Verarbeitungscontroller mit zwei Prioritätsstufen;
- vier 8-Bit-I/O-Ports, von denen zwei als Adress-/Datenbus für den Zugriff auf externe Programm- und Datenspeicher verwendet werden;
- eingebauter Taktgenerator.

Dieser Mikrocontroller ist den Entwicklern am bekanntesten und ein beliebtes Steuerungstool in einer Vielzahl von Geräten. Es stehen viele Emulatoren, Debugger und 8051-Chip-Programmierer zur Verfügung, sodass die Softwareentwicklung ein Kinderspiel ist.

Der nächste grundlegende Schritt in der Entwicklung des MCS-51 war die Übertragung der Fertigungstechnologie auf CHMOS. Dies ermöglichte die Implementierung der Idle- und Power-Down-Modi, was den Stromverbrauch des Kristalls drastisch reduzierte und den Weg für den Einsatz des Mikrocontrollers in energieabhängigen Anwendungen ebnete, beispielsweise in eigenständigen batteriebetriebenen Geräten.

Und der letzte grundlegende Schritt in der Entwicklung dieser Richtung durch Intel im Rahmen der 8-Bit-Architektur war die Veröffentlichung der Mikrocontroller 8xC51FA/FB/FC, die der Kürze halber oft als 8xC51FX bezeichnet werden. Das Hauptunterscheidungsmerkmal dieser Kristallgruppe ist das Vorhandensein eines programmierbaren Zählerarrays (PCA). Das PCA-Blockdiagramm ist in Abb. 2 dargestellt.

Das PCA umfasst:

Der Timer-Zähler bedient alle fünf Abtast- und Vergleichsmodule, die so programmiert werden können, dass sie eine der folgenden Funktionen ausführen:

16-Bit-Abtastung des Timerwerts an der positiven Flanke eines externen Signals;
16-Bit-Abtastung des Timerwerts an der negativen Flanke eines externen Signals;
16-Bit-Abtastung des Timerwerts bei jeder Flanke eines externen Signals;
16-Bit-Software-Timer;
16-Bit-Hochgeschwindigkeitsausgabe (HSO);
8-Bit-PWM

Alle oben genannten Funktionen werden im PCA auf Hardwareebene ausgeführt und belasten den Zentralprozessor nicht, was eine Gesamtsteigerung ermöglicht Durchsatz Systeme, erhöhen die Genauigkeit von Messungen und Signalverarbeitung und verkürzen die Reaktionszeit des Mikrocontrollers auf externe Ereignisse, was besonders wichtig für Echtzeitsysteme ist. Die im 8xC51FX implementierte PCA erwies sich als so erfolgreich, dass die FX-Mikrocontroller-Architektur de facto zum Industriestandard wurde und die PCA selbst viele Male in verschiedenen Modifikationen von Mikrocontrollern verschiedener Unternehmen reproduziert wurde.

Die größten Engpässe der MCS-51-Architektur waren zunächst die batteriebasierte 8-Bit-ALU und die relativ langsame Befehlsausführung (die schnellsten Befehle erfordern 12 Taktzyklen zur Ausführung). Dies schränkte den Einsatz von Mikrocontrollern der Familie in Anwendungen ein, die eine höhere Geschwindigkeit und komplexe Berechnungen erfordern (16- und 32-Bit). Das Thema einer grundlegenden Modernisierung der alten Architektur wurde dringlich. Das Problem der Modernisierung wurde dadurch erschwert, dass zu Beginn der 90er Jahre bereits viele Entwicklungen im Bereich Software und Software entstanden waren Hardware, und eine der Hauptaufgaben bei der Entwicklung der neuen Architektur bestand darin, Hardware- und Softwarekompatibilität mit älteren Entwicklungen auf Basis von MCS-51 zu implementieren. Um dieses Problem zu lösen, wurde eine gemeinsame Gruppe von Spezialisten von Intel und Philips gegründet. Infolgedessen erschienen 1995 zwei deutlich unterschiedliche Familien: MCS-251/151 von Intel und 51XA von Philips (letzteres werden wir weiter unten besprechen).

Hauptmerkmale der MSC-251-Architektur:

Linearer 24-Bit-Adressraum zur Adressierung von bis zu 16 MB Speicher(hergestellte Mikrocontroller der MCS-251-Familie haben einen Speicheradressraum von 256 KB);
Das Befehlssystem der Mikrocontroller-Familie MCS-251 enthält alle 111 Befehle des Befehlssystems der Mikrocontroller-Familie MCS-51 („alte“ Befehle) und zusätzlich 157 „neue“ Befehle. Einige neue Befehlscodes liegen im 4-Byte-Format vor.
Vor der Verwendung des Mikrocontrollers muss dieser konfiguriert werden, d.h. Mit dem Programmierer „brennen“ Sie die Konfigurationsbytes, die bestimmen, welche Befehlssätze nach dem Einschalten der Stromversorgung aktiv werden. Wenn Sie den MCS-51-Befehlssatz installieren, ist der MSC-251 auf Binärcodeebene mit dem MCS-51 kompatibel. Dieser Modus wird Binärmodus genannt. Erweiterte Anweisungen in diesem Modus sind jedoch auch über ein „Fenster“ verfügbar – den reservierten Befehlscode 0A5h. Natürlich erhöht sich in diesem Fall die Länge jeder erweiterten Anweisung um 1 Byte. Wenn Sie zunächst einen Satz erweiterter Anweisungen installieren, müssen in diesem Fall für MCS-51 geschriebene Programme mit Cross-Tools für MCS-51 neu kompiliert werden, weil Jetzt sind Standardanweisungen über dasselbe „Fenster“ 0A5h verfügbar und ihre Länge erhöht sich ebenfalls um 1 Byte. Dieser Modus wird als Quellmodus bezeichnet. Es ermöglicht Ihnen, erweiterte Anweisungen mit maximaler Effizienz zu nutzen und die höchste Leistung zu erzielen, erfordert jedoch eine Überarbeitung der Software.
Registerarchitektur, die den Zugriff auf Register als Bytes, Wörter und Doppelwörter ermöglicht;
Seitenadressierungsmodus zur Beschleunigung des Abrufens von Anweisungen aus dem externen Programmspeicher;
Befehlswarteschlange;
erweiterter Befehlssatz, einschließlich arithmetischer und logischer 16-Bit-Anweisungen;
erweiterter Stack-Adressraum auf bis zu 64 KB;
Ausführung des schnellsten Befehls in 2 Taktzyklen;
Binärkompatibilität mit Programmen für MCS-51.

Für Benutzer, die MCS-251-Mikrocontroller als mechanischen Ersatz für MCS-51 verwenden möchten, stellt Intel MCS-251-Mikrocontroller mit bereits programmierten Konfigurationsbits im Binärmoduszustand her. Solche Mikrocontroller erhielten den MCS-151-Index.

Neben Intel selbst produziert Temic Semiconductors unter seiner Lizenz MCS-251-Mikrocontroller.

Der Universal Serial Bus (USB) erweitert die Plug-and-Play-Technologie auf externe Eingabe-/Ausgabegeräte, die auf modernen Hochleistungs-PCs verwendet werden.

Um den Anschluss verschiedener Peripheriegeräte zu ermöglichen, definiert der USB-Standard vier Übertragungsmodi: Steuerung, isochrone Übertragung, Impulsübertragung und Array-Übertragung. Jedes Peripheriegerät muss einen Steuermodus zur Übertragung von Konfigurationsparametern, Befehlen und Gerätestatusinformationen unterstützen. Die isochrone Übertragung bietet garantierten Buszugriff, konstanten Durchsatz und Fehlertoleranz und kann in Audioausgabegeräten und Computertelefonieanwendungen verwendet werden. Die Impulsübertragung ist für Eingabegeräte wie Maus, Joystick oder Tastatur gedacht, die Informationen selten und in kleinen Portionen, aber mit begrenzter Nutzungsdauer übertragen. Mit der Massenübertragung können Geräte wie Scanner, Faxgeräte oder Digitalkameras große Datenmengen an einen PC übertragen, sobald ein Buskanal verfügbar wird.

Hauptmerkmale des Produkts

Vollständig kompatibel mit der „Universal Serial Bus Specification 1.0“
Integrierter USB-Transceiver Serial Bus Interface Engine (SIE)
Vier FIFO-Warteschlangen für die Übertragung
Drei 16-Byte-FIFO-Warteschlangen
Vier FIFO-Empfangswarteschlangen
Drei 16-Byte-FIFO-Warteschlangen
Eine konfigurierbare FIFO-Warteschlange (bis zu 1024 Byte)
Automatische Sende-/Empfangssteuerung in FIFO-Warteschlangen
Stoppen/Fortsetzen des Betriebs
Drei USB-Bus-Interrupt-Vektoren
Phasenverriegelungszyklus
Datenübertragungsraten: 12 Mbit/s und 1,5 Mbit/s
Langsamer Zyklusmodus
256 KB externer Adressraum
Energiesparmodi: Standby und Ausschalten
Benutzerdefinierte Parameter
Warten in Echtzeit
1 KB On-Chip-RAM
Vier I/O-Ports
Programmierbares Zählerarray (PCA)
Standard-UART-Mikrocontroller (MCS 51).
Hardware-Watchdog-Timer
Drei 16-Bit-Timer/Zähler mit flexiblen Funktionen
Kompatibel mit dem Mikrocontroller-Befehlssatz der Architekturen MCS 51 und MCS 251
MCS 251-Mikrocontroller-Architektur basierend auf Registern
Betriebsfrequenz 6 oder 12 MHz

Der 8x930Hx-Controller verfügt über zusätzliche Funktionen:

USB-Hub
Steuerungsoptionen für den USB-Hub
Verbindungsmanagement
Verbindungs-/Unterbrechungserkennung mit Ausgabegerät
Energieverwaltung einschließlich Stopp/Wiederaufnahme
Erkennung und Behebung von Busfehlern
Unterstützt Ausgabegeräte mit voller und niedriger Geschwindigkeit
Ausgangskontakt zum Schalten der Portleistung
Eingangskontakt zur Überlasterkennung

Die vier verschiedenen Modi der USB-Datenübertragung werden durch die Zusammenarbeit von drei Elementen bereitgestellt: Host, Hub, Funktionsgerät. Der Host steuert die Übertragung von Inhalten und Steuerinformationen über den Bus. Funktionale Geräte erweitern Hostsysteme. Dazu gehören typische Arbeiten mit einem PC: Eingabe über Tastatur oder Joystick, Ausgabe auf einem Monitor; sowie komplexere Tätigkeiten wie digitale Telefonie und Bildübertragung. Zur Steuerung funktionsfähiger Geräte wurde ein Intel 8x930Ax-Mikrocontroller entwickelt. Schließlich bieten Hubs einen USB-Erweiterungspunkt, der den Zugriff auf andere Funktionsgeräte ermöglicht. Der Intel 8x930Hx-Mikrocontroller, der funktionelle Geräte- und USB-Hub-Steuerungsfunktionen vereint, ist der erste kommerziell erhältliche USB-Hub, der für moderne PC-Peripheriegeräte entwickelt wurde.

USB-Hubs spielen eine wichtige Rolle bei der Erweiterung der Welt der PC-Benutzer. Mit dem Aufkommen von Peripheriegeräten – Tastaturen, Monitoren, Druckern und anderen –, die mit integrierten Hubs ausgestattet sind, ist das Anschließen oder Trennen eines neuen Geräts so einfach wie das Anschließen an eine Steckdose. Neue Leistungsniveaus und erweiterte USB-Konnektivität könnten zu einer neuen Generation von Geräten für Arbeits- und Unterhaltungsanwendungen führen. Die Tage eingebetteter Karten, IRQ-Konflikte und Kabelgewirr sind gezählt.

Das USB-Buskabel besteht nur aus vier Adern: Vbus, D+, D- und GND – was den Anschluss einfacher und einheitlicher macht. Dem gleichen Zweck dient ein einziger Standardanschluss zum Anschluss von Peripheriegeräten an den USB-Bus. Die Daten werden auf D+- und D--Kabeln unterschiedlich übertragen: entweder mit voller Geschwindigkeit von 12 Mbit/s oder mit niedriger Geschwindigkeit von 1,5 Mbit/s. Der Transceiver ist im Chip integriert, sodass keine externen elektronischen Schaltkreise erforderlich sind. Die Ausnahme bildet der Endlastwiderstand sowohl auf der D+- als auch auf der D--Leitung, der erforderlich ist, um zu bestimmen, ob es sich um ein Hochgeschwindigkeits- oder ein Niedriggeschwindigkeitsgerät handelt.

Familienübersicht
Die Intel 8x930-Familie besteht aus zwei Single-Chip-Controllern.

Der Intel 8x930Ax-Controller ist ein 8-Bit-Gerät, das auf der Mikrocontroller-Architektur MCS 251 basiert und für den Betrieb mit Peripheriegeräten konzipiert ist, die an den USB-Bus angeschlossen sind. Andererseits nutzt der 8x930Hx denselben MCS 251-Mikrocontroller-Kern sowie die erweiterten Funktionen des integrierten USB-Bus-Hubs. Der Einsatz der MCS 251-Architektur in beiden USB-Bus-Controllern bietet folgende Vorteile:

Hochleistung
Anwendung gemischter Speicher- und Adressierungsarten
Energieeffizient
Niedriger Geräuschpegel
Effektive Unterstützung für Hochsprachen
Erweiterter Befehlssatz
Integrierte Funktionen

Der 8x930Ax kann Anweisungen sowohl des MCS 51-Mikrocontroller-Sets als auch des MCS 251-Mikrocontroller-Sets als Anweisungen verwenden. Dieser Ansatz schont die Investitionen der Benutzer in Software und holt die maximale Leistung aus Anwendungen heraus.

Die 8x930-Mikrocontroller sind so reich an verschiedenen integrierten Funktionen, dass sie leistungsfähiger aussehen als nur Mikrocontroller. Das Programmable Counter Array (PCA) bietet Flexibilität für Anwendungen, die Echtzeit-Datenvergleich oder -erfassung, Hoder Pulsweitenmodulation erfordern. Darüber hinaus verfügt der Controller über einen erweiterten seriellen Port, drei 16-Bit-Timer/Zähler, einen Hardware-Watchdog, vier 8-Bit-I/O-Ports und zwei Energiesparmodi: Standby und Ausschalten.

Die Controller der 8x930Ax-Familie sind mit 1 KB Speicher ausgestattet und können in Versionen ohne persistenten Speicher oder mit 8 oder 16 KB persistentem Speicher verwendet werden. Sie können bis zu 256 KB externen Speicher für Anweisungen und Daten sowie 40 Byte Allzweckregister adressieren, die als Registerdatei im Zentralprozessor liegen. Abhängig von der verwendeten Kombination kann die Registerdatei 16 Byte-Register, 16 Zwei-Byte-Register und 10 Vier-Byte-Register enthalten.

Die Controller bieten eine flexible Schnittstelle mit externem Speicher. Um auf Geräte mit langsamem Speicher zuzugreifen, ist es möglich, drei Wartezyklen hinzuzufügen, und um weitere Zyklen zu generieren, ist ein Aufruf der Echtzeitfunktion möglich. Das Abrufen externer Anweisungen kann die Leistung verbessern, indem der Paging-Modus verwendet wird, bei dem die Daten im High-Byte der Adresse gemischt werden.

Beide 8x930-Controller verfügen über acht FIFO-Warteschlangen zur Unterstützung interner Ausgabegeräte: vier Sendewarteschlangen und vier Empfangswarteschlangen. Vier Sende-/Empfangs-FIFO-Warteschlangen unterstützen vier Endfunktionseinheiten (0 bis 3). Queue 0 besteht aus 16 Bytes und ist für die Übertragung von Steuerinformationen vorgesehen. Warteschlange 1 ist vom Benutzer konfigurierbar und hat eine Kapazität von bis zu 1024 Bytes. Die Warteschlangen 2 und 3 bestehen aus jeweils 16 Bytes und können zur Übertragung von Informationen im Burst-, isochronen und Array-Modus verwendet werden. Bei Verwendung eines 8x930Hx-Controllers werden diese Warteschlangen durch ein Paar FIFO-Warteschlangen für Eingabegeräte verstärkt. Diese Warteschlangen im 8x930Hx-Controller werden durch einen zusätzlichen Repeater unterstützt, der für die Weiterleitung der von den Ausgabegeräten erzeugten Datenströme verantwortlich ist.

Architekturübersicht
Strukturell lässt sich die Implementierung von USB in den Mikrocontrollern 8x930Ax und 8x930Hx in vier Blöcke unterteilen: FIFO-Warteschlangen, einen Schnittstellenblock mit Funktionsgeräten, einen seriellen Bus-Schnittstellenblock und einen Transceiver. Der 8x930Hx-Controller verfügt über zusätzliche Blöcke zur Steuerung der Funktionen des Hubs: einen Hub-Schnittstellenblock und einen Repeater.

Die Empfangs- und Sende-FIFO-Warteschlangen auf beiden Controllern sind kreisförmig. Warteschlangen unterstützen bis zu zwei separate Datensätze variabler Größe und enthalten Bytezählerregister, die die Anzahl der Bytes in den Datensätzen angeben. Warteschlangen verfügen über Flags, die anzeigen, ob die Warteschlange voll oder leer ist, und können auch den Empfang oder die Übertragung des aktuellen Datensatzes wiederholen. Die Functional Unit Interface Unit (FUI) verteilt gesendete oder empfangene Daten USB-Daten entsprechend der Art der Übertragung und dem Status der Warteschlangen. Darüber hinaus überwacht der FFU-Block den Transaktionsstatus, verwaltet FIFO-Warteschlangen und meldet über eine Interrupt-Anfrage das Auftreten von Steuerereignissen an den 8x930-Zentralprozessor.

Der serielle Busschnittstellenblock implementiert das USB-Übertragungsprotokoll: ordnet Pakete sequentiell an, generiert und erkennt ein Signal, generiert und überprüft Prüfsummen, kodiert/dekodiert Daten mithilfe der NRZI-Methode, Bit-Stuffing, generiert und erkennt eine Paketkennung (PID).

Der integrierte Transceiver auf USB-Mikrocontrollern ist mit einer einfachen Vierdrahtschnittstelle kompatibel, die in der USB 1.0-Spezifikation definiert ist. Die 8x930-Controllerfamilie verfügt über drei USB-bezogene Interrupts. Sie treten bei jedem Beginn eines Rahmens, am Ende des Empfangs/der Übertragung von Daten an Endgerätefunktionsgeräte, im Falle einer globalen Unterbrechung oder Wiederaufnahme der Arbeit auf. Im 8x930Hx-Hub dient die Hub-Schnittstelleneinheit zur Steuerung und Überwachung des Verbindungsstatus der Ausgangsports. Der Repeater ist für die Verteilung der Up- und Down-Signale der USB-Ports zuständig.

gastroguru 2017