Introduktion til 8051 programmering på forsamlingssprog

Introduktion til 8051 programmering på forsamlingssprog

Samlingssprog er et programmeringssprog på lavt niveau, der bruges til at skrive programkode med hensyn til minde. Selvom der er mange højtstående sprog, der i øjeblikket er efterspurgt, bruges programmeringssprog til montering populært i mange applikationer. Det kan bruges til direkte hardwaremanipulation. Det bruges også til at skrive 8051 programmeringskode effektivt med færre antal urcyklusser ved at forbruge mindre hukommelse sammenlignet med de andre sprog på højt niveau.



8051 Programmering på monteringssprog

8051 Programmering

8051 Programmering på monteringssprog

Samlingssprog er et fuldt hardware-relateret programmeringssprog. De integrerede designere skal have tilstrækkelig viden om hardware fra en bestemt processor eller controllere, før de skriver programmet. Samlingssprog er udviklet af mnemonics, derfor kan brugerne ikke forstå det let for at ændre programmet.






8051 Programmering på monteringssprog

8051 Programmering på monteringssprog

Samlingsprogrammeringssprog er udviklet af forskellige kompilatorer og det 'bowling bane' er bedst egnet til mikrokontrollerprogrammering udvikling. Mmikrocontrollereeller processorer kan kun forstå binært sprog i form af '0s eller 1s' En samler konverterer forsamlingssproget til binært sprog og gemmer det derefter imikrokontrollerhukommelse til at udføre den specifikke opgave.



8051 Microcontroller Architecuture

8051mikrokontrollerer CISC-baseret Harvard-arkitektur , og den har perifert udstyr som 32 I / O, timere / tællere, seriel kommunikation og minder. Detmikrokontrollerkræver et program til at udføre de handlinger, der kræver en hukommelse til lagring og til at læse funktionerne. 8051mikrokontrollerbestår af RAM- og ROM-hukommelser til lagring af instruktioner.

8051 Microcontroller Arctitecuture

8051 Microcontroller Architecuture

Et register er hoveddelen i processorer ogmikrokontroller som er indeholdt i hukommelsen, der giver en hurtigere måde at indsamle og lagre data på. Programmeringen af ​​8051-samlingssprog er baseret på hukommelsesregistrene. Hvis vi vil manipulere data til en processor eller controller ved at udføre subtraktion, tilføjelse osv., Kan vi ikke gøre det direkte i hukommelsen, men det har brug for registre for at behandle og lagre dataene.Mikrocontrollereindeholder flere typer registre, der kan klassificeres i henhold til deres instruktioner eller indhold, der fungerer i dem.

8051 Microcontroller-programmer på monteringssprog

Samlingssproget består af elementer, som alle bruges til at skrive programmet isekventiel måde. Følg de givne regler for at skrive programmering på forsamlingssprog.


Regler for forsamlingssprog

  • Samlingskoden skal skrives med store bogstaver
  • Etiketterne skal følges af et kolon (etiket :)
  • Alle symboler og etiketter skal begynde med et bogstav
  • Alle kommentarer er skrevet med små bogstaver
  • Den sidste linje i programmet skal være END-direktivet

Samlingssprogs-mindesmærker er i form af op-kode, såsom MOV, ADD, JMP osv., Som bruges til at udføre operationerne.

Op kode: Op-koden er en enkelt instruktion, der kan udføres af CPU'en. Her er op-koden en MOV-instruktion.

Operander: Operanderne er et enkelt stykke data, der kan betjenes af op-koden. Eksempel: multiplikationsoperation udføres af de operander, der ganges med operanden.

Syntaks: MUL a,b

Elementerne i en samling af sprogprogrammering:

  • Saml retningslinjer
  • Instruktions sæt
  • Adressering af tilstande

Monter instruktioner:

Monteringsdirektiverne giver anvisningerne til CPU'en. 8051mikrokontrollerbestår af forskellige former for monteringsdirektiver for at give retningen til styreenheden. De mest nyttige direktiver er programmering af 8051, såsom:

  • ORG
  • DB
  • EQU
  • ENDE

ORG(oprindelse): Dette direktiv angiver starten på programmet. Dette bruges til at indstille registeradressen under samlingen. For eksempel fortæller ORG 0000h kompileren al efterfølgende kode startende ved adresse 0000h.

Syntaks: ORG 0000h

DB(definer byte): Definere byte bruges til at tillade en række bytes. Udskriv f.eks. “EDGEFX”, hvor hvert tegn tages af adressen, og til sidst udskriver “strengen” af DB direkte med dobbelt anførselstegn.

Syntaks:

ORG 0000h

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

EQU (ækvivalent): Det ækvivalente direktiv bruges til at sidestille variablenes adresse.

Syntaks:

reg ækv,09h
—————–
—————–
MOVreg,# 2h

ENDE: END-direktivet bruges til at angive programmets afslutning.

Syntaks:

reg ækv,09h

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

Adresseringstilstande:

Måden at få adgang til data kaldes adresseringstilstand. CPU'en kan få adgang til dataene på forskellige måder ved hjælp af adresseringstilstande. 8051mikrokontrollerbestår af fem adresseringstilstande som:

  • Umiddelbar adresseringstilstand
  • Registrer adresseringstilstand
  • Direkte adresseringstilstand
  • Indirekte adresseringstilstand
  • Basisindeks adresseringstilstand

Umiddelbar adresseringstilstand:

I denne adresseringstilstand skal kilden være en værdi, der kan efterfølges af '#', og destinationen skal være SFR-registre, generelle registre og adresse. Det bruges til straks at gemme værdien i hukommelsesregistrene.

Syntaks:

MOV A, # 20h // A erenakkumulatorregister, 20 er gemt i A //
MOV R0,# 15 // R0 er et generelt formål register 15 er gemt i R0 registeret //
MOV P0, # 07h // P0 er et SFR-register07 er lagret i P0 //
MOV 20 t,# 05h // 20h er adressen på registret 05, der er gemt i 20h //

Tidligere:

MOV R0, # 1
MOV R0, # 20 // R0<—R0[15] +20, den endelige værdi er gemt i R0 //

Registrer adresseringstilstand:

I denne adresseringstilstand skal kilden og destinationen være et register, men ikke register til generelle formål. Så dataene flyttes ikke inden for generelle bankregistre .

Syntaks:

MOV A, B // A er et SFR-register, B er et register til generelt formål //
MOV R0, R1 // Ugyldig instruktion, GPR til GPR ikke mulig //

TIDLIGERE:

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

Direkte adresseringstilstand

I denne adresseringstilstand skal kilden eller destinationen (eller både kilde og destination) være en adresse, men ikke værdi.

Syntaks:

MOV A,20h // 20h er en adresse A er et register //
MOV 00h, 07h // begge adresseres af GPS-registre //

Tidligere:

MOV 07h,# 01h
MOV A, # 08h
TILFØJ EN,07h // A<—A+07h the final value is stored in A//

Indirekte adresseringstilstand:

I denne adresseringstilstand skal kilden eller destinationen (eller destinationen eller kilden) væretilindirekte adresse, men ikke en værdi. Denne adresseringstilstand understøtter pointerkonceptet. Markøren er en variabel, der bruges til at gemme adressen på den anden variabel. Dette pointerkoncept bruges kun til R0- og R1-registre.

Syntaks:

MOVR0, # 01h // 01-værdien er gemt i R0-registret, R0-adressen er 08h //
MOV R1, # 08h // R1 er den markørvariabel, derbutikkeradresse (08h) af R0 //
MOV 20 t,@ R1 // 01-værdien er gemt i den 20-timers adresse i GP-registret //

Indirekte adresseringstilstand

Indirekte adresseringstilstand

Basisindeks adresseringstilstand:

Denne adresseringstilstand bruges til at læse dataene fra ekstern hukommelse eller ROM-hukommelse . Alle adresseringstilstande kan ikke læse dataene fra kodehukommelsen. Koden skal læses gennem DPTR-registret. DPTR bruges til at pege dataene i koden eller den eksterne hukommelse.

Syntaks:

MOVC A, @ A + DPTR // C angiver kodehukommelse //
MOCX A, @ A + DPTR // X angiver ekstern hukommelse //
EX: MOV A, # 00H // 00H er gemt i A-registeret //
MOV DPTR, # 0500H // DPTR point 0500h adresse i hukommelsen //
MOVC A, @ A + DPTR // send værdientilA-registret //
MOV P0, A // dato A sendt til PO-registrator //

Instruktions sæt:

Instruktionssættet er strukturen på controlleren eller processoren, der giver kommandoer til controlleren til at guide controlleren til behandling af data. Instruktionssættet består af instruktioner, native datatyper, adresseringstilstande, afbrydelsesregistre, ekstraordinær håndtering og hukommelsesarkitektur. Det 8051mikrokontroller kan følge CISC instruktioner med Harvard-arkitektur. I tilfælde af 8051-programmering inkluderer forskellige typer CISC-instruktioner:

  • Instruktions sæt til dataoverførsel
  • Sekventielt instruktions sæt
  • Aritmetisk instruktions sæt
  • Forgrening Iinstruktionsæt
  • Loop Instrcution Sæt
  • Betinget instruktions sæt
  • Ubetinget instruktions sæt
  • Logisk instruktionssæt
  • Boolsk instruktionssæt

Aritmetisk instruktions sæt:

De aritmetiske instruktioner udfører de grundlæggende operationer såsom:

  • Tilføjelse
  • Multiplikation
  • Subtraktion
  • Division

Tilføjelse:

ORG 0000h
MOV R0, # 03H // flyt værdien 3 til registeret R0 //
MOV A, # 05H // flyt værdien 5 til akkumulator A //
Tilføj A, 00H //Tilføj enværdi med R0-værdi og gemmer resultateti en//
ENDE

Multiplikation:

ORG 0000h
MOV R0, # 03H // flyt værdien 3 til registeret R0 //
MOV A, # 05H // flyt værdien 5 til akkumulator A //
MUL A, 03H //Multipliseretresultatet gemmes i akkumulatoren A //
ENDE

Subtraktion:

ORG 0000h
MOV R0, # 03H // flyt værdien 3 for at registrere R0 //
MOV A, # 05H // flyt værdien 5 til akkumulator A //
SUBB A, 03H // Resultatværdi er gemt i akkumulator A //
ENDE

Division:

ORG 0000h
MOV R0, # 03H // flyt værdien 3 for at registrere R0 //
MOV A, # 15H // flyt værdien 5 til akkumulator A //
DIV A, 03H // endelig værdi gemmes i akkumulator A //
ENDE

Betingede instruktioner

CPU'en udfører instruktionerne baseret på tilstanden ved at kontrollere singlebit-status eller byte-status. 8051mikrokontrollerbestår af forskellige betingede instruktioner såsom:

  • JB -> Spring nedenunder
  • JNB -> Hop, hvis ikke under
  • JC -> Hop, hvis du bærer
  • JNC -> Hop hvisikkeBære
  • JZ -> Hop, hvis nul
  • JNZ -> Hop hvisikkeNul
Betingede instruktioner

Betingede instruktioner

1. Syntaks:

JB P1.0, etiket
- - - - - - - -
- - - - - - - -
Etiket: - - - - - - - -
- - - - - - - -
ENDE

2. Syntaks:

JNB P1.0, etiket
- - - - - - - -
- - - - - - - -
Etiket: - - - - - - - -
- - - - - - - -
ENDE

3. Syntaks:

JC, etiket
- - - - - - - -
- - - - - - - -
Etiket: - - - - - - - -
- - - - - - - -
ENDE

4. Syntaks:

JNC, etiket
- - - - - - - -
- - - - - - - -
Etiket: - - - - - - - -
- - - - - - - -
ENDE
5. Syntaks:

JZ, etiket
- - - - - - - -
- - - - - - - -
Etiket: - - - - - - - -
- - - - - - - -
ENDE

6. Syntaks:

JNZ, etiket
- - - - - - - -
- - - - - - - -
Etiket: - - - - - - - -
- - - - - - - -
ENDE

Opkald og spring instruktioner:

Opkalds- og springinstruktionerne bruges til at undgå kodekopiering af programmet. Når en bestemt kode bruges mere end én gang forskellige steder i programmet, hvis vi nævnerspecifikt navntilkode dereftervi kunne bruge dette navn hvor som helst i programmet uden at indtaste en kode for hver gang. Dette reducerer programmets kompleksitet. 8051 programmeringen består af opkalds- og springinstruktioner såsom LCALL, SJMP.

  • LCALL
  • ET OPKALD
  • SJMP
  • LJMP

1. Syntaks:

ORG 0000h
- - - - - - - -
- - - - - - - -
ACALL, etiket
- - - - - - - -
- - - - - - - -
SJMP STOP
Etiket: - - - - - - - -
- - - - - - - -
- - - - - - - -
ret
HOLD OP:INTET P

2. Syntaks:

ORG 0000h
- - - - - - - -
- - - - - - - -
LCALL, etiket
- - - - - - - -
- - - - - - - -
SJMP STOP
Etiket: - - - - - - - -
- - - - - - - -
- - - - - - - -
ret
HOLD OP:INTET P

Opkald og spring instruktioner

Opkald og spring instruktioner

Loop instruktioner:

Sløjfeinstruktionerne bruges til at gentage blokken hver gang, mens du udfører forøgelses- og nedbrydningsoperationerne. 8051mikrokontrollerbestår af to typer løkkeinstruktioner:

  • CJNE -> sammenlign og spring, hvis ikke lige
  • DJNZ -> mindske og spring, hvis ikke nul

1. Syntaks:

afCJNE
MOV A, # 00H
MOV B, # 10H
Etiket: INC A
- - - - - -
- - - - - -
CJNE A, etiket

2. Syntaks:

afDJNE

MOV R0, # 10H
Etiket: - - - - - -
- - - - - -
DJNE R0, label
- - - - - -
- - - - - -
ENDE

Logisk instruktionssæt:

Instruktionsættet 8051 til mikrokontroller giver AND, ELLER, XOR, TEST, IKKE og boolsk logikinstruktioner til sæt og rydder bitene baseret på behovet i programmet.

Logisk instruktionssæt

Logisk instruktionssæt

1. Syntaks:

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

2. Syntaks:

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

3. Syntaks:

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

Skiftende operatører

Skiftoperatørerne bruges til at sende og modtage data effektivt. 8051mikrokontrollerbestår af fire skiftoperatører:

  • RR -> Drej til højre
  • RRC -> Drej til højre gennem bær
  • RL -> Drej til venstre
  • RLC -> Drej til venstre gennem bær

Drej til højre (RR):

I denne skiftende operation bliver MSB LSB, og alle bits skifter mod højre bit-for-bit, serielt.

Syntaks:

MOV A, # 25h
RR A

Drej til venstre (RL):

I denne skiftende operation bliver MSB LSB, og alle bits skifter mod venstre side bit for bit, serielt.

Syntaks:

MOV A, # 25h
RL A

RRC Rotate Right Through Carry:

I denne forskydningsoperation bevæger LSB sig for at bære, og bæringen bliver MSB, og alle bits skiftes mod højre side bit for bitposition.

Syntaks:

MOV A, # 27h
RRC A

RLC drej til venstre gennem Carry:

I denne skiftende operation bevæger MSB sig for at bære, og bæringen bliver LSB, og alle bitene skifter mod venstre side i en bit-for-bit position.

Syntaks:

MOV A, # 27h
RLC A

Grundlæggende Embedded C-programmer:

Detmikrokontrollerprogrammering er forskellig for hver type operativsystem. Der er mange operativsystemer såsom Linux, Windows, RTOS og så videre. RTOS har dog flere fordele for indbygget systemudvikling. Nogle af eksemplerne på programmering på forsamlingsniveau er angivet nedenfor.

LED blinker ved hjælp af med 8051mikrokontroller:

  • Nummer vises på 7-segment display med 8051 mikrocontroller
  • Timer / Counter beregninger og program ved hjælp af 8051mikrokontroller
  • Seriekommunikationsberegninger og program ved hjælp af 8051mikrokontroller

LED-programmer med 8051 Microcontrller

1. WAP for at skifte PORT1-lysdioder

ORG 0000H
TOGLE: MOV P1, # 01 //bevæge sig00000001 til p1-registeret //
CALL DELAY // udfør forsinkelsen //
MOV A, P1 // flytp1-værditil akkumulatoren //
CPL A // komplement A-værdi //
MOV P1, A // flyt 11111110 til port1-registeret //
CALL DELAY // udfør forsinkelsen //
SJMP TOGLE
FORSINKELSE: MOV R5, # 10H // belastningsregister R5 med 10 //
TO: MOV R6, # 200 // belastningsregister R6 med 200 //
ONE: MOV R7, # 200 // belastningsregister R7 med 200 //
DJNZ R7, $ // mindske R7 indtil det er nul //
DJNZ R6, ONE // mindske R7 indtil den er nul //
DJNZ R5, TWO // mindskes R7 indtil den er nul //
RET // gå tilbage til hovedprogrammet //
ENDE

Timer / tællerberegninger og program ved hjælp af 8051 Mmikrocontroller:

Forsinkelsen er en af ​​de vigtige faktorer i udviklingen af ​​applikationssoftwaren. Det timere og tællere er hardwarekomponenter imikrokontroller, der bruges i mange applikationer til at give den nøjagtige tidsforsinkelse med tælleimpulser. Both opgaverne implementeres ved hjælp af softwareteknikken.

1. WAP for at beregne 500us tidsforsinkelse.

MOV TMOD, # 10H // vælg timermodus ved hjælp af registre //
MOV TH1, # 0FEH // gem forsinkelsestiden i højere bit //
MOV TL1, # 32H // gem forsinkelsestiden i lav bit //
JNB TF1, $ // mindske timerværdien, indtil den er nul //
CLR TF1 // rydder timerflaggetbit//
CLR TR1 // OFF timeren //

2. WAP for at skifte lysdiodermed5sektidsforsinkelse

ORG 0000H
TILBAGE: MOV PO, # 00H
ACALL FORSINKELSE
MOV P0, # 0FFH
ACALL FORSINKELSE
SJUMP TILBAGE
FORSINKELSE: MOV R5, # 50H // belastningsregister R5 med 50 //
FORSINKELSE1: MOV R6, # 200 // belastningsregister R6 med 200 //
DELAY2: MOV R7, # 229 // belastningsregister R7 med 200 //
DJNZ R7, $ // mindske R7 indtil det er nul //
DJNZ R6, DELAY2 // mindske R6 indtil den er nul //
DJNZ R5, DELAY1 // mindsker R5 indtil den er nul //
RET // gå tilbage til hovedprogrammet //
ENDE

3. WAP for at tælle de 250 impulser ved hjælp af mode0 count0

Syntaks:

ORG 0000H
MOV TMOD, # 50H // vælg tælleren //
MOV TH0, # 15 // flyt tælleimpulser højere bit //
MOV TH1, # 9FH //bevæge sigtælleimpulser, lavere bit //
SET TR0 // TIL timeren //
JNB $ // mindsker tællingsværdien til nul //
CLR TF0 // ryd tælleren, flagbit//
CLR TR0 // stop timeren //
ENDE

Programmering af seriel kommunikation ved hjælp af 8051 Mmikrocontroller:

Seriel kommunikation bruges almindeligvis til transmission og modtagelse af dataene. 8051mikrokontrollerbestår af UART / USART seriel kommunikation, og signalerne transmitteres og modtages afTxog Rx-ben. UART-kommunikationen overfører dataene bit-for-bit serielt. UART er en halv-duplex-protokol, der overfører og modtager dataene, men ikke på samme tid.

1. WAP for at overføre tegnene til Hyper Terminal

MOV SCON, # 50H // indstil seriel kommunikation //
MOV TMOD, # 20H // vælg timertilstand //
MOV TH1, # -3 // indstil baudrate //
SET TR1 // TIL timeren //
MOV SBUF, # ’S’ // transmitterer S til det serielle vindue //
JNB TI, $ // nedtællingsværdi af timeren, indtil den er nul //
CLR RI // ryd modtag afbryd //
CLR TR1 // klar timer //

2. WAP for at transmittere modtag tegnet af Hyper Terminal

MOV SCON, # 50H // indstil seriel kommunikation //
MOV TMOD, # 20H // vælg timertilstand //
MOV TH1, # -6 // indstil baudrate //
SET TR1 // på timeren //
MOV SBUF, # ’S’ // transmitterer S til det serielle vindue //
JNB RI, $ // nedtællingsværdi af timeren, indtil den er nul //
CLR RI // ryd modtag afbryd //
MOV P0, SBUF // send SBUF-registerværdien til porten0 //
CLR TR1 // klar timer //

Dette handler om 8051 programmering på forsamlingssprog i korte træk med eksempelbaserede programmer. Vi håber, at denne tilstrækkelige information om samlingssprog helt sikkert vil være nyttig for læserne, og vi ser frem til deres værdifulde kommentarer i kommentarfeltet nedenfor.