Introduktion till 8051-programmering på monteringsspråk

Prova Vårt Instrument För Att Eliminera Problem





Monteringsspråket är ett programmeringsspråk på låg nivå som används för att skriva programkod i termer av minne. Även om det finns många högnivåspråk som för närvarande är efterfrågade, används programmeringsspråk för montering populärt i många applikationer. Det kan användas för direkt hårdvaruhantering. Den används också för att skriva 8051 programmeringskod effektivt med mindre antal klockcykler genom att konsumera mindre minne jämfört med andra språk på hög nivå.

8051 Programmering på monteringsspråk

8051 Programmering



8051 Programmering på monteringsspråk

Monteringsspråket är ett helt maskinvarurelaterat programmeringsspråk. De inbäddade formgivarna måste ha tillräcklig kunskap om hårdvara för en viss processor eller styrenheter innan de skriver programmet. Monteringsspråket är utvecklat av mnemonics, därför kan användarna inte förstå det lätt för att modifiera programmet.


8051 Programmering på monteringsspråk

8051 Programmering på monteringsspråk



Monteringsprogrammeringsspråk är utvecklat av olika kompilatorer och den “bowlinghall' är bäst lämpad för mikrokontrollerprogrammering utveckling. Mmikrokontrollereller processorer kan bara förstå binärt språk i form av '0s eller 1s' En samlare konverterar monteringsspråket till binärt språk och lagrar det sedan imikrokontrollerminne för att utföra den specifika uppgiften.

8051 Microcontroller Architecuture

8051mikrokontrollerär CISC-baserad Harvard-arkitektur , och den har kringutrustning som 32 I / O, timers / räknare, seriell kommunikation och minnen. Demikrokontrollerkräver ett program för att utföra de åtgärder som kräver ett minne för att spara och läsa funktionerna. 8051mikrokontrollerbestår av RAM- och ROM-minnen för att lagra instruktioner.

8051 Arctitecuture Microcontroller

8051 Microcontroller Architecuture

Ett register är huvuddelen i processorerna ochmikrokontroller som finns i minnet som ger ett snabbare sätt att samla in och lagra data. Programmeringsspråket för 8051-montering är baserat på minnesregistren. Om vi ​​vill manipulera data till en processor eller styrenhet genom att utföra subtraktion, addition etc. kan vi inte göra det direkt i minnet, men det behöver register för att bearbeta och lagra data.Mikrokontrollerinnehåller flera typer av register som kan klassificeras enligt deras instruktioner eller innehåll som fungerar i dem.

8051 Microcontroller-program på monteringsspråk

Monteringsspråket består av element som alla används för att skriva in programmetsekventiellt sätt. Följ de givna reglerna för att skriva programmering på monteringsspråk.


Regler för monteringsspråk

  • Samlingskoden måste skrivas med versaler
  • Etiketterna måste följas av ett kolon (etikett :)
  • Alla symboler och etiketter måste börja med en bokstav
  • Alla kommentarer skrivs med gemener
  • Den sista raden i programmet måste vara END-direktivet

Monteringsspråkens minnesmärken är i form av op-kod, som MOV, ADD, JMP och så vidare, som används för att utföra operationerna.

Op-kod: Op-koden är en enda instruktion som kan köras av CPU: n. Här är op-koden en MOV-instruktion.

Operander: Operanderna är en enda bit data som kan manövreras med op-koden. Exempel, multiplikationsoperation utförs av operanderna som multipliceras med operanden.

Syntax: MUL a,b

Elementen i en församlingsspråkprogrammering:

  • Montera riktlinjer
  • Instruktionsuppsättning
  • Adresseringslägen

Montera instruktioner:

Monteringsdirektiven ger anvisningarna till CPU: n. 8051mikrokontrollerbestår av olika typer av monteringsdirektiv för att ge styrningen riktning. De mest användbara direktiven är 8051-programmering, till exempel:

  • ORG
  • DB
  • EQU
  • SLUTET

ORG(ursprung): Detta direktiv anger programstart. Detta används för att ställa in registeradressen under montering. Till exempel berättar ORG 0000h kompilatorn all efterföljande kod som börjar vid adressen 0000h.

Syntax: ORG 0000h

DB(definiera byte): Definiera byte används för att tillåta en rad byte. Skriv till exempel ut 'EDGEFX' där varje tecken tas av adressen och slutligen skriver 'strängen' av DB direkt med dubbla citat.

Syntax:

ORG 0000h

MOV a, # 00h
————-
————-
DB “EDGEFX”

EQU (motsvarande): Motsvarande direktiv används för att jämföra variabelns adress.

Syntax:

reg ekv,09h
—————–
—————–
MOVreg,# 2h

SLUTET: END-direktivet används för att ange programmets slut.

Syntax:

reg ekv,09h

—————–
—————–
MOVreg,# 2h
SLUTET

Adresseringslägen:

Sättet att komma åt data kallas adresseringsläge. Processorn kan komma åt data på olika sätt genom att använda adresseringslägen. 8051mikrokontrollerbestår av fem adresseringslägen som:

  • Omedelbart adresseringsläge
  • Registrera adresseringsläge
  • Direkt adresseringsläge
  • Indirekt adresseringsläge
  • Basindexadresseringsläge

Omedelbart adresseringsläge:

I detta adresseringsläge måste källan vara ett värde som kan följas av '#' och destinationen måste vara SFR-register, allmänna ändamålsregister och adress. Den används för att omedelbart lagra värdet i minnesregistren.

Syntax:

MOV A, # 20h // A ärettackumulatorregister, 20 lagras i A //
MOV R0,# 15 // R0 är ett allmänt register 15 lagras i R0-registret //
MOV P0, # 07h // P0 är ett SFR-register07 lagras i P0 //
MOV 20h,# 05h // 20h är adressen till registret 05 som lagras i 20h //

Före detta:

MOV R0, # 1
MOV R0, # 20 // R0<—R0[15] +20, slutvärdet lagras i R0 //

Registrera adresseringsläge:

I detta adresseringsläge måste källan och destinationen vara ett register, men inte register för allmänna ändamål. Så data flyttas inte inom allmänna bankregister .

Syntax:

MOV A, B // A är ett SFR-register, B är ett allmänt register //
MOV R0, R1 // Ogiltig instruktion, GPR till GPR inte möjligt //

FÖRE DETTA:

MOV R0, # 02h
MOV A, # 30h
LÄGG TILL R0, A // R0<—R0+A, the final value is stored in the R0 register//

Direkt adresseringsläge

I detta adresseringsläge måste källan eller destinationen (eller både källan och destinationen) vara en adress men inte värde.

Syntax:

MOV A,20h // 20h är en adress A är ett register //
MOV 00h, 07h // båda adresseras av GPS-register //

Före detta:

MOV 07h,# 01h
MOV A, # 08h
LÄGG TILL EN,07h // A<—A+07h the final value is stored in A//

Indirekt adresseringsläge:

I detta adresseringsläge måste källan eller destinationen (eller destinationen eller källan) varatillindirekt adress, men inte ett värde. Detta adresseringsläge stöder pekarkonceptet. Pekaren är en variabel som används för att lagra adressen till den andra variabeln. Detta pekarkoncept används endast för R0- och R1-register.

Syntax:

MOVR0, # 01h // 01-värdet lagras i R0-registret, R0-adressen är 08h //
MOV R1, # 08h // R1 är pekervariabeln sombutikeradress (08h) av R0 //
MOV 20h,@ R1 // 01-värdet lagras i 20-timmarsadressen i GP-registret //

Indirekt adresseringsläge

Indirekt adresseringsläge

Basindexadresseringsläge:

Detta adresseringsläge används för att läsa data från externt minne eller ROM-minne . Alla adresseringslägen kan inte läsa data från kodminnet. Koden måste läsas genom DPTR-registret. DPTR används för att peka data i koden eller externt minne.

Syntax:

MOVC A, @ A + DPTR // C indikerar kodminne //
MOCX A, @ A + DPTR // X anger externt minne //
EX: MOV A, # 00H // 00H lagras i A-registret //
MOV DPTR, # 0500H // DPTR-punkter 0500h-adress i minnet //
MOVC A, @ A + DPTR // skicka värdettillA-registret //
MOV P0, A // datum för A skickat till PO-registraren //

Instruktionsuppsättning:

Instruktionsuppsättningen är strukturen för styrenheten eller processorn som ger kommandon till styrenheten för att styra styrenheten för bearbetning av data. Instruktionsuppsättningen består av instruktioner, inbyggda datatyper, adresseringslägen, avbrottsregister, exceptionell hantering och minnesarkitektur. De 8051mikrokontroller kan följa CISC-instruktioner med Harvard-arkitektur. Vid programmering av 8051 innehåller olika typer av CISC-instruktioner:

  • Instruktioner för dataöverföring
  • Sekventiell instruktionsuppsättning
  • Aritmetisk instruktionsuppsättning
  • Förgrening Iinstruktionuppsättning
  • Loop Instrcution Set
  • Villkorlig instruktionsuppsättning
  • Ovillkorlig instruktionsuppsättning
  • Logisk instruktionsuppsättning
  • Boolesk instruktionsuppsättning

Aritmetisk instruktionsuppsättning:

De aritmetiska instruktionerna utför de grundläggande operationerna såsom:

  • Tillägg
  • Multiplikation
  • Subtraktion
  • Division

Tillägg:

ORG 0000h
MOV R0, # 03H // flytta värdet 3 till registret R0 //
MOV A, # 05H // flytta värdet 5 till ackumulator A //
Lägg till A, 00H //Lägg till envärde med R0-värde och lagrar resultateti en//
SLUTET

Multiplikation:

ORG 0000h
MOV R0, # 03H // flytta värdet 3 till registret R0 //
MOV A, # 05H // flytta värdet 5 till ackumulator A //
MUL A, 03H //Multipliceratresultatet lagras i ackumulator A //
SLUTET

Subtraktion:

ORG 0000h
MOV R0, # 03H // flytta värdet 3 för att registrera R0 //
MOV A, # 05H // flytta värdet 5 till ackumulator A //
SUBB A, 03H // Resultatvärde lagras i ackumulator A //
SLUTET

Division:

ORG 0000h
MOV R0, # 03H // flytta värdet 3 för att registrera R0 //
MOV A, # 15H // flytta värdet 5 till ackumulator A //
DIV A, 03H // slutvärde lagras i ackumulator A //
SLUTET

Villkorliga instruktioner

CPU: n kör instruktionerna baserat på villkoret genom att kontrollera status för enbitsbit eller byte. 8051mikrokontrollerbestår av olika villkorliga instruktioner såsom:

  • JB -> Hoppa nedanför
  • JNB -> Hoppa om inte nedan
  • JC -> Hoppa om du bär
  • JNC -> Hoppa ominteBära
  • JZ -> Hoppa om noll
  • JNZ -> Hoppa ominteNoll
Villkorliga instruktioner

Villkorliga instruktioner

1. Syntax:

JB P1.0, etikett
- - - - - - - -
- - - - - - - -
Etikett: - - - - - - - -
- - - - - - - -
SLUTET

2. Syntax:

JNB P1.0, etikett
- - - - - - - -
- - - - - - - -
Etikett: - - - - - - - -
- - - - - - - -
SLUTET

3. Syntax:

JC, etikett
- - - - - - - -
- - - - - - - -
Etikett: - - - - - - - -
- - - - - - - -
SLUTET

4. Syntax:

JNC, etikett
- - - - - - - -
- - - - - - - -
Etikett: - - - - - - - -
- - - - - - - -
SLUTET
5. Syntax:

JZ, etikett
- - - - - - - -
- - - - - - - -
Etikett: - - - - - - - -
- - - - - - - -
SLUTET

6. Syntax:

JNZ, etikett
- - - - - - - -
- - - - - - - -
Etikett: - - - - - - - -
- - - - - - - -
SLUTET

Instruktioner för samtal och hopp:

Anrops- och hoppinstruktionerna används för att undvika kodreplikering av programmet. När någon specifik kod används mer än en gång på olika platser i programmet, om vi nämnerspecifikt namntillkod dåvi kunde använda det namnet var som helst i programmet utan att ange en kod för varje gång. Detta minskar programmets komplexitet. Programmeringen 8051 består av anrops- och hoppinstruktioner som LCALL, SJMP.

  • LCALL
  • ETT SAMTAL
  • SJMP
  • LJMP

1. Syntax:

ORG 0000h
- - - - - - - -
- - - - - - - -
ACALL, etikett
- - - - - - - -
- - - - - - - -
SJMP STOPP
Etikett: - - - - - - - -
- - - - - - - -
- - - - - - - -
rätt
SLUTA:NOP

2. Syntax:

ORG 0000h
- - - - - - - -
- - - - - - - -
LCALL, etikett
- - - - - - - -
- - - - - - - -
SJMP STOPP
Etikett: - - - - - - - -
- - - - - - - -
- - - - - - - -
rätt
SLUTA:NOP

Instruktioner för samtal och hopp

Instruktioner för samtal och hopp

Loop Instruktioner:

Slinginstruktionerna används för att upprepa blocket varje gång du utför steg för steg och minskning. 8051mikrokontrollerbestår av två typer av loopinstruktioner:

  • CJNE -> jämför och hoppa om inte lika
  • DJNZ -> minskning och hoppa om inte noll

1. Syntax:

avCJNE
MOV A, # 00H
MOV B, # 10H
Märka: INC A
- - - - - -
- - - - - -
CJNE A, etikett

2. Syntax:

avDJNE

MOV R0, # 10H
Märka: - - - - - -
- - - - - -
DJNE R0, etikett
- - - - - -
- - - - - -
SLUTET

Logisk instruktionsuppsättning:

Instruktionsuppsättningen 8051 för mikrokontroller tillhandahåller AND, ELLER, XOR, TEST, INTE och booleska instruktioner för inställning och rensar bitarna baserat på behovet i programmet.

Logisk instruktionsuppsättning

Logisk instruktionsuppsättning

1. Syntax:

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

2. Syntax:

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

3. Syntax:

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

Skiftande operatörer

Skiftoperatörerna används för att skicka och ta emot data effektivt. 8051mikrokontrollerbestår av fyra skiftoperatörer:

  • RR -> Rotera höger
  • RRC -> Rotera höger genom bär
  • RL -> Rotera vänster
  • RLC -> Rotera vänster genom bär

Rotera höger (RR):

I denna förskjutningsoperation blir MSB LSB och alla bitar växlar mot höger sida bit för bit, seriellt.

Syntax:

MOV A, # 25h
RR A

Rotera vänster (RL):

I denna förskjutningsoperation blir MSB LSB och alla bitar förskjuts mot vänster sida bit för bit, seriellt.

Syntax:

MOV A, # 25h
RL A

RRC Rotera höger genom Carry:

I denna förskjutningsoperation rör sig LSB för att bära och bäringen blir MSB, och alla bitar förskjuts mot höger sida bit för bitposition.

Syntax:

MOV A, # 27h
RRC A

RLC Rotera vänster genom Carry:

I denna förskjutningsoperation rör sig MSB för att bära och bäringen blir LSB och alla bitarna förskjuts mot vänster sida i bit-för-bit-läge.

Syntax:

MOV A, # 27h
RLC A

Grundläggande inbäddade C-program:

Demikrokontrollerprogrammering skiljer sig åt för varje typ av operativsystem. Det finns många operativsystem som Linux, Windows, RTOS och så vidare. RTOS har dock flera fördelar för inbyggd systemutveckling. Några av exemplen på monteringsnivåprogrammering ges nedan.

LED blinkar med med 8051mikrokontroller:

  • Nummer visas på 7-segmentsdisplay med 8051 mikrokontroller
  • Timer / Counter-beräkningar och program med 8051mikrokontroller
  • Seriekommunikationsberäkningar och program med 8051mikrokontroller

LED-program med 8051 Microcontrller

1. WAP för att växla mellan PORT1-lysdioderna

ORG 0000H
TAGLE: MOV P1, # 01 //flytta00000001 till p1-registret //
SAMTALFÖRDRÖJNING // kör förseningen //
MOV A, P1 // flyttap1-värdetill ackumulatorn //
CPL A // komplement A-värde //
MOV P1, A // flytta 11111110 till port1-registret //
SAMTALFÖRDRÖJNING // kör förseningen //
SJMP TOGLE
FÖRDRÖJNING: MOV R5, # 10H // lastregister R5 med 10 //
TVÅ: MOV R6, # 200 // lastregister R6 med 200 //
EN: MOV R7, # 200 // lastregister R7 med 200 //
DJNZ R7, $ // minskning R7 tills det är noll //
DJNZ R6, ONE // minskning R7 tills den är noll //
DJNZ R5, TVÅ // minskar R7 tills den är noll //
RET // gå tillbaka till huvudprogrammet //
SLUTET

Timer / Counter-beräkningar och program med 8051 Mmikrokontroller:

Fördröjningen är en av de viktigaste faktorerna i programvaruutvecklingen. De timers och räknare är hårdvarukomponenter imikrokontroller, som används i många applikationer för att ge den exakta tidsfördröjningen med räknepulser. Bövriga uppgifter genomförs med programvarutekniken.

1. WAP för att beräkna 500us tidsfördröjning.

MOV TMOD, # 10H // välj timerläget i registren //
MOV TH1, # 0FEH // lagra fördröjningstiden i högre bit //
MOV TL1, # 32H // lagra fördröjningstiden i låg bit //
JNB TF1, $ // minskar värdet på timern tills den är noll //
CLR TF1 // rensa timerflagganbit//
CLR TR1 // AV timern //

2. WAP för att växla lysdiodernamed5sekTidsfördröjning

ORG 0000H
RETUR: MOV PO, # 00H
ACALL DELAY
MOV P0, # 0FFH
ACALL DELAY
HOPPA RETUR
FÖRDRÖJNING: MOV R5, # 50H // lastregister R5 med 50 //
FÖRDRÖJNING1: MOV R6, # 200 // lastregister R6 med 200 //
DELAY2: MOV R7, # 229 // lastregister R7 med 200 //
DJNZ R7, $ // minskning R7 tills det är noll //
DJNZ R6, DELAY2 // minskning R6 tills den är noll //
DJNZ R5, DELAY1 // minskning R5 tills den är noll //
RET // gå tillbaka till huvudprogrammet //
SLUTET

3. WAP för att räkna de 250 pulserna med mode0 count0

Syntax:

ORG 0000H
MOV TMOD, # 50H // välj räknaren //
MOV TH0, # 15 // flytta räknepulserna högre bit //
MOV TH1, # 9FH //flyttaräknepulserna, lägre bit //
SET TR0 // PÅ timern //
JNB $ // minskar räknevärdet till noll //
CLR TF0 // rensa räknaren, flaggabit//
CLR TR0 // stoppa timern //
SLUTET

Programmering av seriell kommunikation med 8051 Mmikrokontroller:

Seriekommunikation används ofta för överföring och mottagning av data. 8051mikrokontrollerbestår av UART / USART seriell kommunikation och signalerna sänds och tas emot avTxoch Rx-stift. UART-kommunikationen överför data bit för bit seriellt. UART är ett halv-duplexprotokoll som överför och tar emot data, men inte samtidigt.

1. WAP för att överföra tecknen till Hyper Terminal

MOV SCON, # 50H // ställ in seriekommunikationen //
MOV TMOD, # 20H // välj timerläge //
MOV TH1, # -3 // ställ in baudhastigheten //
SET TR1 // PÅ timern //
MOV SBUF, # ’S’ // överför S till seriefönstret //
JNB TI, $ // minskning av timern tills den är noll //
CLR RI // rensa mottagningsavbrott //
CLR TR1 // tydlig timer //

2. WAP för att överföra mottagningsteckenet genom Hyper Terminal

MOV SCON, # 50H // ställ in seriekommunikationen //
MOV TMOD, # 20H // välj timerläge //
MOV TH1, # -6 // ställ in överföringshastigheten //
SET TR1 // på timern //
MOV SBUF, # ’S’ // överför S till seriefönstret //
JNB RI, $ // minskningsvärde för timer tills den är noll //
CLR RI // rensa mottagningsavbrott //
MOV P0, SBUF // skicka SBUF-registervärdet till port0 //
CLR TR1 // tydlig timer //

Det här handlar om 8051-programmering i monteringsspråk i korthet med exempelbaserade program. Vi hoppas att denna adekvata information om monteringsspråk verkligen kommer att vara till hjälp för läsarna och vi ser fram emot deras värdefulla kommentarer i kommentarsektionen nedan.