Einführung in die 8051-Programmierung in Assemblersprache

Versuchen Sie Unser Instrument, Um Probleme Zu Beseitigen





Die Assemblersprache ist eine einfache Programmiersprache, die zum Schreiben von Programmcode in Bezug auf Mnemonik verwendet wird. Obwohl derzeit viele Hochsprachen gefragt sind, wird die Assembler-Programmiersprache in vielen Anwendungen häufig verwendet. Sie kann für direkte Hardwaremanipulationen verwendet werden. Es wird auch verwendet, um die zu schreiben 8051 Programmiercode Effizient mit weniger Taktzyklen, da im Vergleich zu den anderen Hochsprachen weniger Speicher benötigt wird.

8051 Programmieren in Assemblersprache

8051 Programmierung



8051 Programmieren in Assemblersprache

Die Assemblersprache ist eine vollständig hardwarebezogene Programmiersprache. Die eingebetteten Designer müssen über ausreichende Kenntnisse der Hardware bestimmter Prozessoren oder Controller verfügen, bevor sie das Programm schreiben. Die Assemblersprache wird von mnemonics entwickelt, daher können Benutzer das Programm nicht leicht ändern.


8051 Programmieren in Assemblersprache

8051 Programmieren in Assemblersprache



Die Assembler-Programmiersprache wird von verschiedenen Compilern und entwickelt das 'Kegelbahn'' ist am besten geeignet für MikrocontrollerProgrammierung Entwicklung. M.Mikrocontrolleroder Prozessoren können nur Binärsprache in Form von '0s oder 1s' verstehen. Ein Assembler konvertiert die Assemblersprache in eine Binärsprache und speichert sie dann in derMikrocontrollerSpeicher, um die spezifische Aufgabe auszuführen.

8051 Microcontroller Architecuture

Der 8051Mikrocontrollerist der CISC-basierte Harvard-Architektur und es hat Peripheriegeräte wie 32 E / A, Timer / Zähler, serielle Kommunikation und Speicher. DasMikrocontrollererfordert ein Programm, um die Operationen auszuführen, die einen Speicher zum Speichern und Lesen der Funktionen erfordern. Der 8051Mikrocontrollerbesteht aus RAM- und ROM-Speichern zum Speichern von Anweisungen.

8051 Mikrocontroller Arctitecuture

8051 Microcontroller Architecuture

Ein Register ist der Hauptteil in die Prozessoren undMikrocontroller Dies ist im Speicher enthalten, der eine schnellere Möglichkeit zum Sammeln und Speichern der Daten bietet. Die Assembler-Programmierung 8051 basiert auf den Speicherregistern. Wenn wir Daten für einen Prozessor oder Controller durch Subtraktion, Addition usw. manipulieren möchten, können wir dies nicht direkt im Speicher tun, aber es werden Register benötigt, um die Daten zu verarbeiten und zu speichern.Mikrocontrollerenthalten verschiedene Arten von Registern, die gemäß ihren Anweisungen oder Inhalten, die in ihnen arbeiten, klassifiziert werden können.

8051 Mikrocontroller-Programme in Assemblersprache

Die Assemblersprache besteht aus Elementen, in die das Programm geschrieben wirdsequentielle Weise. Befolgen Sie die angegebenen Regeln, um die Programmierung in Assemblersprache zu schreiben.


Regeln der Assemblersprache

  • Der Assembler-Code muss in Großbuchstaben geschrieben werden
  • Auf die Beschriftungen muss ein Doppelpunkt folgen (Beschriftung :)
  • Alle Symbole und Beschriftungen müssen mit einem Buchstaben beginnen
  • Alle Kommentare werden in Kleinbuchstaben eingegeben
  • Die letzte Zeile des Programms muss die END-Direktive sein

Die Assemblersprachen-Mnemonik besteht aus Op-Code wie MOV, ADD, JMP usw., mit dem die Vorgänge ausgeführt werden.

Op-Code: Der Op-Code ist eine einzelne Anweisung, die von der CPU ausgeführt werden kann. Hier ist der Op-Code eine MOV-Anweisung.

Operanden: Die Operanden sind einzelne Daten, die vom Op-Code bedient werden können. Beispielsweise wird eine Multiplikationsoperation von den Operanden ausgeführt, die mit dem Operanden multipliziert werden.

Syntax: MUL a,b

Die Elemente einer Assembler-Programmierung:

  • Richtlinien zusammenstellen
  • Befehlssatz
  • Adressierungsmodi

Montageanleitung:

Die Assembler-Anweisungen geben der CPU die Anweisungen. Der 8051Mikrocontrollerbesteht aus verschiedenen Arten von Montageanweisungen, um der Steuereinheit die Richtung zu geben. Die nützlichsten Anweisungen sind die 8051-Programmierung, wie z.

  • ORG
  • DB
  • EQU
  • ENDE

ORG((Ursprung): Diese Anweisung gibt den Start des Programms an. Dies wird verwendet, um die Registeradresse während der Montage einzustellen. Zum Beispiel teilt ORG 0000h dem Compiler den gesamten nachfolgenden Code ab Adresse 0000h mit.

Syntax: ORG 0000h

DB((Byte definieren): Das definierte Byte wird verwendet, um eine Zeichenfolge von Bytes zuzulassen. Drucken Sie beispielsweise 'EDGEFX', wobei jedes Zeichen von der Adresse übernommen wird, und drucken Sie schließlich die 'Zeichenfolge' von der DB direkt in doppelte Anführungszeichen.

Syntax:

ORG 0000h

MOV a, # 00h
————-
————-
DB 'EDGEFX'

EQU (Äquivalent): Die äquivalente Direktive wird verwendet, um die Adresse der Variablen gleichzusetzen.

Syntax:

reg äqu,09h
—————–
—————–
MOVreg,# 2h

ENDE:: Die END-Direktive wird verwendet, um das Ende des Programms anzuzeigen.

Syntax:

reg äqu,09h

—————–
—————–
MOVreg,# 2h
ENDE

Adressierungsmodi:

Der Zugriff auf Daten wird als Adressierungsmodus bezeichnet. Die CPU kann mithilfe von Adressierungsmodi auf unterschiedliche Weise auf die Daten zugreifen. Der 8051Mikrocontrollerbesteht aus fünf Adressierungsmodi wie:

  • Sofortiger Adressierungsmodus
  • Adressierungsmodus registrieren
  • Direkter Adressierungsmodus
  • Indirekter Adressierungsmodus
  • Basisindex-Adressierungsmodus

Sofortiger Adressierungsmodus:

In diesem Adressierungsmodus muss die Quelle ein Wert sein, dem das '#' folgen kann, und das Ziel muss sein SFR-Register, Allzweckregister und Adresse. Es wird verwendet, um den Wert sofort in den Speicherregistern zu speichern.

Syntax:

MOV A, # 20h // A isteinDas Akkumulatorregister 20 ist im A // gespeichert
MOV R0,# 15 // R0 ist ein Allzweckregister 15 ist im R0-Register gespeichert //
MOV P0, # 07h // P0 ist ein SFR-Register07, das im P0 // gespeichert ist
MOV 20h,# 05h // 20h ist die Adresse des Registers 05, das im 20h // gespeichert ist

Ehemalige:

MOV R0, # 1
MOV R0, # 20 // R0<—R0[15] +20 wird der Endwert in R0 // gespeichert

Adressierungsmodus registrieren:

In diesem Adressierungsmodus müssen Quelle und Ziel ein Register sein, jedoch keine Allzweckregister. Die Daten werden also nicht innerhalb der verschoben Allzweck-Bankregister .

Syntax:

MOV A, B // A ist ein SFR-Register, B ist ein Allzweckregister //
MOV R0, R1 // Ungültiger Befehl, GPR zu GPR nicht möglich //

EHEMALIGE:

MOV R0, # 02h
MOV A, # 30h
ADD R0, A // R0<—R0+A, the final value is stored in the R0 register//

Direkter Adressierungsmodus

In diesem Adressierungsmodus muss die Quelle oder das Ziel (oder sowohl die Quelle als auch das Ziel) eine Adresse sein, jedoch kein Wert.

Syntax:

MOV A.,20h // 20h ist eine Adresse A ist ein Register //
MOV 00h, 07h // beide werden von den GPS-Registern adressiert //

Ehemalige:

MOV 07h,# 01h
MOV A, # 08h
FÜGE HINZU EIN,07h // A.<—A+07h the final value is stored in A//

Indirekter Adressierungsmodus:

In diesem Adressierungsmodus muss die Quelle oder das Ziel (oder das Ziel oder die Quelle) seinzuindirekte Adresse, aber kein Wert. Dieser Adressierungsmodus unterstützt das Zeigerkonzept. Der Zeiger ist eine Variable, mit der die Adresse der anderen Variablen gespeichert wird. Dieses Zeigerkonzept wird nur für die Register R0 und R1 verwendet.

Syntax:

MOVR0, # 01h // 01 Wert wird im R0-Register gespeichert, R0-Adresse ist 08h //
MOV R1, # 08h // R1 ist die Zeigervariable, dieShopsAdresse (08h) von R0 //
MOV 20h,Der Wert @ R1 // 01 wird in der 20h-Adresse des GP-Registers // gespeichert

Indirekter Adressierungsmodus

Indirekter Adressierungsmodus

Adressierungsmodus des Basisindex:

Dieser Adressierungsmodus wird verwendet, um die Daten aus dem zu lesen externer Speicher oder ROM-Speicher . Alle Adressierungsmodi können die Daten nicht aus dem Codespeicher lesen. Der Code muss das DPTR-Register lesen. Der DPTR wird verwendet, um die Daten im Code oder im externen Speicher anzuzeigen.

Syntax:

MOVC A, @ A + DPTR // C zeigt den Codespeicher an //
MOCX A, @ A + DPTR // X geben externen Speicher an //
EX: MOV A, # 00H // 00H wird im A-Register // gespeichert
MOV DPTR, # 0500H // DPTR zeigt 0500h Adresse im Speicher //
MOVC A, @ A + DPTR // Sende den Wertzudas A-Register //
MOV P0, A // Datum von A an den PO-Registrar senden //

Befehlssatz:

Der Befehlssatz ist die Struktur der Steuerung oder des Prozessors, die der Steuerung Befehle zur Führung der Steuerung für die Datenverarbeitung bereitstellt. Der Befehlssatz besteht aus Befehlen, nativen Datentypen, Adressierungsmodi, Interrupt-Registern, außergewöhnlicher Handhabung und Speicherarchitektur. Das 8051Mikrocontroller kann CISC-Anweisungen mit Harvard-Architektur folgen. Im Fall der 8051-Programmierung umfassen verschiedene Arten von CISC-Anweisungen:

  • Datenübertragungs-Befehlssatz
  • Sequentieller Befehlssatz
  • Arithmetischer Befehlssatz
  • Verzweigung I.Anleitungeinstellen
  • Loop Instrcution Set
  • Bedingter Befehlssatz
  • Bedingungsloser Befehlssatz
  • Logischer Befehlssatz
  • Boolescher Befehlssatz

Arithmetischer Befehlssatz:

Die arithmetischen Anweisungen führen die grundlegenden Operationen aus, wie zum Beispiel:

  • Zusatz
  • Multiplikation
  • Subtraktion
  • Teilung

Zusatz:

ORG 0000h
MOV R0, # 03H // verschiebe den Wert 3 in das Register R0 //
MOV A, # 05H // Verschiebe den Wert 5 zum Akkumulator A //
Addiere A, 00H //füge hinzu einWert mit R0-Wert und speichert das Ergebnisin einem// //
ENDE

Multiplikation:

ORG 0000h
MOV R0, # 03H // verschiebe den Wert 3 in das Register R0 //
MOV A, # 05H // Verschiebe den Wert 5 zum Akkumulator A //
MUL A, 03H //MultipliziertErgebnis wird im Akkumulator A // gespeichert
ENDE

Subtraktion:

ORG 0000h
MOV R0, # 03H // Verschiebe den Wert 3 in das Register R0 //
MOV A, # 05H // Verschiebe den Wert 5 zum Akkumulator A //
SUBB A, 03H // Der Ergebniswert wird im Akkumulator A // gespeichert
ENDE

Teilung:

ORG 0000h
MOV R0, # 03H // Verschiebe den Wert 3 in das Register R0 //
MOV A, # 15H // Verschiebe den Wert 5 zum Akkumulator A //
DIV A, 03H // Endwert wird im Akkumulator A // gespeichert
ENDE

Bedingte Anweisungen

Die CPU führt die Anweisungen basierend auf der Bedingung aus, indem sie den Einzelbitstatus oder den Bytestatus überprüft. Der 8051Mikrocontrollerbesteht aus verschiedenen bedingten Anweisungen wie:

  • JB -> Nach unten springen
  • JNB -> Springen, wenn nicht unten
  • JC -> Springe, wenn du trägst
  • JNC -> Springe wennnichtTragen
  • JZ -> Springe wenn Null
  • JNZ -> Springe wennnichtNull
Bedingte Anweisungen

Bedingte Anweisungen

1. Syntax:

JB P1.0, Etikett
- - - - - - - -
- - - - - - - -
Etikette: - - - - - - - -
- - - - - - - -
ENDE

2. Syntax:

JNB P1.0, Etikett
- - - - - - - -
- - - - - - - -
Etikette: - - - - - - - -
- - - - - - - -
ENDE

3. Syntax:

JC, Etikett
- - - - - - - -
- - - - - - - -
Etikette: - - - - - - - -
- - - - - - - -
ENDE

4. Syntax:

JNC, Etikett
- - - - - - - -
- - - - - - - -
Etikette: - - - - - - - -
- - - - - - - -
ENDE
5. Syntax:

JZ, Etikett
- - - - - - - -
- - - - - - - -
Etikette: - - - - - - - -
- - - - - - - -
ENDE

6. Syntax:

JNZ, Etikett
- - - - - - - -
- - - - - - - -
Etikette: - - - - - - - -
- - - - - - - -
ENDE

Call and Jump Anweisungen:

Die Aufruf- und Sprunganweisungen werden verwendet, um die Codereplikation des Programms zu vermeiden. Wenn ein bestimmter Code mehr als einmal an verschiedenen Stellen im Programm verwendet wird, wenn wir dies erwähnenspezifischer NamezuCode dannWir könnten diesen Namen überall im Programm verwenden, ohne jedes Mal einen Code einzugeben. Dies reduziert die Komplexität des Programms. Die 8051-Programmierung besteht aus Aufruf- und Sprunganweisungen wie LCALL, SJMP.

  • LCALL
  • EIN ANRUF
  • SJMP
  • LJMP

1. Syntax:

ORG 0000h
- - - - - - - -
- - - - - - - -
ACALL, Etikett
- - - - - - - -
- - - - - - - -
SJMP STOP
Etikette: - - - - - - - -
- - - - - - - -
- - - - - - - -
richtig
STOP::NOP

2. Syntax:

ORG 0000h
- - - - - - - -
- - - - - - - -
LCALL, Etikett
- - - - - - - -
- - - - - - - -
SJMP STOP
Etikette: - - - - - - - -
- - - - - - - -
- - - - - - - -
richtig
STOP::NOP

Anweisungen zum Aufrufen und Springen

Anweisungen zum Aufrufen und Springen

Schleifenanweisungen:

Die Schleifenanweisungen werden verwendet, um den Block jedes Mal zu wiederholen, während die Inkrementierungs- und Dekrementierungsoperationen ausgeführt werden. Der 8051Mikrocontrollerbestehen aus zwei Arten von Schleifenanweisungen:

  • CJNE -> vergleichen und springen, wenn nicht gleich
  • DJNZ -> dekrementieren und springen, wenn nicht Null

1. Syntax:

vonCJNE
MOV A, # 00H
MOV B, # 10H
Etikette:: INC A.
- - - - - -
- - - - - -
CJNE A, Etikett

2. Syntax:

vonDJNE

MOV R0, # 10H
Etikette: - - - - - -
- - - - - -
DJNE R0, Label
- - - - - -
- - - - - -
ENDE

Logischer Befehlssatz:

Der 8051-Mikrocontroller-Befehlssatz enthält die Logikbefehle AND, OR, XOR, TEST, NOT und Boolean für den Satz und löscht die Bits basierend auf den Anforderungen im Programm.

Logischer Befehlssatz

Logischer Befehlssatz

1. Syntax:

MOV A, Nr. 20H / 00100000 /
MOV R0, # 03H / 00000101 /
ORL A, R0 // 00100000/00000101 = 00000000 //

2. Syntax:

MOV A, Nr. 20H / 00100000 /
MOV R0, # 03H / 00000101 /
ANL A, R0

3. Syntax:

MOV A, Nr. 20H / 00100000 /
MOV R0, # 03H / 00000101 /
XRL A, R0

Schaltoperatoren

Die Schichtoperatoren dienen zum effizienten Senden und Empfangen der Daten. Der 8051Mikrocontrollerbestehen aus vier Schichtarbeitern:

  • RR -> Nach rechts drehen
  • RRC -> Durch Carry nach rechts drehen
  • RL -> Nach links drehen
  • RLC -> Durch Carry nach links drehen

Nach rechts drehen (RR):

Bei dieser Verschiebungsoperation wird das MSB zu LSB und alle Bits verschieben sich bitweise seriell nach rechts.

Syntax:

MOV A, # 25h
RR A.

Nach links drehen (RL):

Bei dieser Verschiebungsoperation wird das MSB zu LSB und alle Bits verschieben sich bitweise seriell nach links.

Syntax:

MOV A, # 25h
RL A.

RRC Durch Carry nach rechts drehen:

Bei dieser Verschiebungsoperation bewegt sich das LSB zum Übertragen und der Übertragen wird zu MSB, und alle Bits werden bitweise nach rechts verschoben.

Syntax:

MOV A, # 27h
RRC A.

RLC Links durch Carry drehen:

Bei dieser Verschiebungsoperation bewegt sich das MSB zum Übertragen und der Übertragen wird zum LSB, und alle Bits verschieben sich bitweise nach links.

Syntax:

MOV A, # 27h
RLC A.

Grundlegende eingebettete C-Programme:

DasMikrocontrollerDie Programmierung ist für jeden Betriebssystemtyp unterschiedlich. Es gibt viele Betriebssysteme wie Linux, Windows, RTOS und so weiter. RTOS bietet jedoch mehrere Vorteile für die Entwicklung eingebetteter Systeme. Einige Programmierbeispiele auf Assembly-Ebene sind unten aufgeführt.

LED blinkt mit 8051Mikrocontroller::

  • Nummernanzeige auf 7-Segment-Anzeige mit 8051-Mikrocontroller
  • Timer / Zähler Berechnungen und Programmierung mit 8051Mikrocontroller
  • Berechnungen und Programm für die serielle Kommunikation mit 8051Mikrocontroller

LED-Programme mit 8051 M.icrocontrller

1. WAP, um die PORT1-LEDs umzuschalten

ORG 0000H
TOGLE: MOV P1, # 01 //Bewegung00000001 zum p1-Register //
CALL DELAY // Verzögerung ausführen //
MOV A, P1 // bewegenp1 Wertzum Akku //
CPL A // A-Wert ergänzen //
MOV P1, A // 11111110 in das Register port1 verschieben //
CALL DELAY // Verzögerung ausführen //
SJMP TOGLE
VERZÖGERUNG: MOV R5, # 10H // Register R5 mit 10 // laden
ZWEI: MOV R6, # 200 // Laderegister R6 mit 200 //
EINS: MOV R7, # 200 // Laderegister R7 mit 200 //
DJNZ R7, $ // dekrementiere R7 bis es Null ist //
DJNZ R6, ONE // R7 dekrementieren, bis es Null ist //
DJNZ R5, TWO // R7 dekrementieren, bis es Null ist //
RET // zurück zum Hauptprogramm //
ENDE

Timer- / Zählerberechnungen und Programmierung mit 8051 M.icrocontroller::

Die Verzögerung ist einer der wichtigsten Faktoren bei der Entwicklung von Anwendungssoftware. Das Timer und Zähler sind Hardwarekomponenten derMikrocontroller, die in vielen Anwendungen verwendet werden, um die genaue Zeitverzögerung mit Zählimpulsen bereitzustellen. B.Andere Aufgaben werden von der Softwaretechnik ausgeführt.

1. WAP zur Berechnung der 500us-Zeitverzögerung.

MOV TMOD, # 10H // wähle den Timer-Modus durch die Register //
MOV TH1, # 0FEH // speichere die Verzögerungszeit im höheren Bit //
MOV TL1, # 32H // speichere die Verzögerungszeit im niedrigen Bit //
JNB TF1, $ // Dekrementiere den Wert des Timers, bis er Null ist //
CLR TF1 // Timer-Flag löschenbisschen// //
CLR TR1 // Timer ausschalten //

2. WAP zum Umschalten der LEDsmit dem5sekZeitverzögerung

ORG 0000H
RÜCKGABE: MOV PO, # 00H
ACALL VERZÖGERUNG
MOV P0, # 0FFH
ACALL VERZÖGERUNG
SJUMP RETURN
VERZÖGERUNG: MOV R5, # 50H // Register R5 mit 50 // laden
DELAY1: MOV R6, # 200 // Laderegister R6 mit 200 //
DELAY2: MOV R7, # 229 // Laderegister R7 mit 200 //
DJNZ R7, $ // dekrementiere R7 bis es Null ist //
DJNZ R6, DELAY2 // R6 dekrementieren, bis es Null ist //
DJNZ R5, DELAY1 // R5 dekrementieren, bis es Null ist //
RET // zurück zum Hauptprogramm //
ENDE

3. WAP, um die 250 Impulse mit mode0 count0 zu zählen

Syntax:

ORG 0000H
MOV TMOD, # 50H // Zähler auswählen //
MOV TH0, # 15 // Zählimpulse höher bewegen Bit //
MOV TH1, # 9FH //Bewegungdie Zählimpulse, unteres Bit //
SET TR0 // ON the Timer //
JNB $ // Dekrementiere den Zählwert bis Null //
CLR TF0 // Zähler löschen, Flagbisschen// //
CLR TR0 // Timer stoppen //
ENDE

Programmierung der seriellen Kommunikation mit 8051 M.icrocontroller::

Serielle Kommunikation wird üblicherweise zum Senden und Empfangen der Daten verwendet. Der 8051Mikrocontrollerbestehen aus serieller UART / USART-Kommunikation und die Signale werden von gesendet und empfangen vonTxund Rx-Pins. Die UART-Kommunikation überträgt die Daten Bit für Bit seriell. Der UART ist ein Halbduplex-Protokoll, das die Daten überträgt und empfängt, jedoch nicht gleichzeitig.

1. WAP, um die Zeichen an das Hyper Terminal zu übertragen

MOV SCON, # 50H // Serielle Kommunikation einstellen //
MOV TMOD, # 20H // Timer-Modus auswählen //
MOV TH1, # -3 // Baudrate einstellen //
SET TR1 // ON the Timer //
MOV SBUF, # ’S’ // S an das serielle Fenster senden //
JNB TI, $ // Wert des Timers verringern, bis er Null ist //
CLR RI // Empfangsinterrupt löschen //
CLR TR1 // Timer löschen //

2. WAP zum Übertragen des Empfangs des Zeichens durch das Hyper-Terminal

MOV SCON, # 50H // Serielle Kommunikation einstellen //
MOV TMOD, # 20H // Timer-Modus auswählen //
MOV TH1, # -6 // Baudrate einstellen //
SET TR1 // am Timer //
MOV SBUF, # ’S’ // S an das serielle Fenster senden //
JNB RI, $ // Wert des Timers verringern, bis er Null ist //
CLR RI // Empfangsinterrupt löschen //
MOV P0, SBUF // Sende den SBUF-Registerwert an Port0 //
CLR TR1 // Timer löschen //

Hier geht es kurz um die 8051-Programmierung in Assemblersprache mit beispielbasierten Programmen. Wir hoffen, dass diese angemessenen Informationen zur Assemblersprache für die Leser sicherlich hilfreich sind, und freuen uns auf ihre wertvollen Kommentare im Kommentarbereich unten.