Introduksjon til 8051 programmering på forsamlingsspråk

Prøv Instrumentet Vårt For Å Eliminere Problemer





Samlingsspråket er et programmeringsspråk på lavt nivå som brukes til å skrive programkode når det gjelder minne. Selv om det for tiden er mange høyverdinspråk som er etterspurt, brukes programmeringsspråk for montering populært i mange applikasjoner, og kan brukes til direkte maskinvaremanipulering. Den brukes også til å skrive 8051 programmeringskode effektivt med mindre antall klokkesykluser ved å forbruke mindre minne sammenlignet med de andre språkene på høyt nivå.

8051 Programmering på monteringsspråk

8051 Programmering



8051 Programmering på monteringsspråk

Monteringsspråket er et fullt maskinvarerelatert programmeringsspråk. De innebygde designerne må ha tilstrekkelig kunnskap om maskinvaren til en bestemt prosessor eller kontrollere før de skriver programmet. Monteringsspråket er utviklet av mnemonics, derfor kan brukerne ikke forstå det enkelt for å modifisere programmet.


8051 Programmering på monteringsspråk

8051 Programmering på monteringsspråk



Assembly programmeringsspråk er utviklet av forskjellige kompilatorer og den “bowlinghall' er best egnet for mikrokontrollerprogrammering utvikling. Mmikrokontrollereeller prosessorer kan bare forstå binært språk i form av '0s eller 1s'. En samler konverterer forsamlingsspråket til binært språk, og lagrer det deretter imikrokontrollerminne for å utføre den spesifikke oppgaven.

8051 Microcontroller Architecuture

8051mikrokontrollerer den CISC-basert Harvard-arkitektur , og den har eksterne enheter som 32 I / O, tidtakere / tellere, seriell kommunikasjon og minner. Demikrokontrollerkrever et program for å utføre operasjonene som krever et minne for lagring og for å lese funksjonene. 8051mikrokontrollerbestår av RAM og ROM-minner for å lagre instruksjoner.

8051 Microcontroller Arctitecuture

8051 Microcontroller Architecuture

Et register er hoveddelen i prosessorene ogmikrokontrollere som er inneholdt i minnet som gir en raskere måte å samle inn og lagre dataene på. Programmeringsspråkprogrammet for 8051 er basert på minneregistrene. Hvis vi vil manipulere data til en prosessor eller kontroller ved å utføre subtraksjon, tillegg osv., Kan vi ikke gjøre det direkte i minnet, men det trenger registre for å behandle og lagre dataene.Mikrokontrollereinneholder flere typer registre som kan klassifiseres i henhold til instruksjonene eller innholdet som fungerer i dem.

8051 Microcontroller-programmer på monteringsspråk

Monteringsspråket består av elementer som alle brukes til å skrive programmet isekvensiell måte. Følg de gitte reglene for å skrive programmering på forsamlingsspråk.


Regler for monteringsspråk

  • Samlingskoden må skrives med store bokstaver
  • Etikettene må følges av et kolon (etikett :)
  • Alle symboler og etiketter må begynne med en bokstav
  • Alle kommentarer er skrevet med små bokstaver
  • Den siste linjen i programmet må være END-direktivet

Sammensetningsspråk-minnesmerker er i form av op-kode, som MOV, ADD, JMP, og så videre, som brukes til å utføre operasjonene.

Op-kode: Op-koden er en enkelt instruksjon som kan utføres av CPUen. Her er op-koden en MOV-instruksjon.

Operander: Operandene er et enkelt stykke data som kan betjenes av op-koden. Eksempel: multiplikasjonsoperasjon utføres av operandene som multipliseres med operanden.

Syntaks: MUL a,b

Elementene til en språkprogrammering av en samling:

  • Monter retningslinjer
  • Instruksjonssett
  • Adresseringsmodi

Monter instruksjoner:

Monteringsdirektivene gir instruksjonene til CPU. 8051mikrokontrollerbestår av forskjellige typer monteringsdirektiver for å gi retningen til kontrollenheten. De mest nyttige direktivene er programmering av 8051, for eksempel:

  • ORG
  • DB
  • EQU
  • SLUTT

ORG(opprinnelse): Dette direktivet indikerer starten på programmet. Denne brukes til å stille inn registeradressen under montering. For eksempel forteller ORG 0000h kompilatoren alle påfølgende koder fra adresse 0000h.

Syntaks: ORG 0000h

DB(definere byte): Definere byte brukes til å tillate en streng med byte. For eksempel, skriv ut 'EDGEFX' der hvert tegn blir tatt av adressen og til slutt skriver 'strengen' av DB direkte med doble anførselstegn.

Syntaks:

ORG 0000h

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

EQU (ekvivalent): Tilsvarende direktiv brukes til å likestille adressen til variabelen.

Syntaks:

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

SLUTT: END-direktivet brukes til å indikere avslutningen på programmet.

Syntaks:

reg lik,09h

—————–
—————–
MOVreg,# 2h
SLUTT

Adresseringsmåter:

Måten å få tilgang til data kalles adresseringsmodus. CPUen kan få tilgang til dataene på forskjellige måter ved å bruke adresseringsmodi. 8051mikrokontrollerbestår av fem adresseringsmodi som:

  • Umiddelbar adresseringsmodus
  • Registrer adresseringsmodus
  • Direkte adresseringsmodus
  • Indirekte adresseringsmodus
  • Base Index Addressing Mode

Umiddelbar adresseringsmodus:

I denne adressemodusen må kilden være en verdi som kan følges av '#' og destinasjonen må være SFR-registre, generelle formålsregistre og adresse. Den brukes til å lagre verdien i minnesregistrene umiddelbart.

Syntaks:

MOV A, # 20h // A erenakkumulatorregister, er 20 lagret i A //
MOV R0,# 15 // R0 er et generelt formål 15 som er lagret i R0-registeret //
MOV P0, # 07h // P0 er et SFR-register07 er lagret i P0 //
MOV 20t,# 05h // 20h er adressen til registeret 05 lagret i 20h //

Tidligere:

MOV R0, # 1
MOV R0, # 20 // R0<—R0[15] +20, den endelige verdien er lagret i R0 //

Registrer adresseringsmodus:

I denne adresseringsmodusen må kilden og destinasjonen være et register, men ikke register for generelle formål. Så dataene flyttes ikke innenfor generelle bankregistre .

Syntaks:

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

TIDLIGERE:

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

Direkte adresseringsmodus

I denne adressemodusen må kilden eller destinasjonen (eller både kilde og destinasjon) være en adresse, men ikke verdi.

Syntaks:

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

Tidligere:

MOV 07h,# 01h
MOV A, # 08h
LEGG TIL EN,07h // A.<—A+07h the final value is stored in A//

Indirekte adresseringsmodus:

I denne adressemodusen må kilden eller destinasjonen (eller destinasjonen eller kilden) væretilindirekte adresse, men ikke en verdi. Denne adresseringsmodusen støtter pekerkonseptet. Pekeren er en variabel som brukes til å lagre adressen til den andre variabelen. Dette pekerkonseptet brukes bare for R0- og R1-registre.

Syntaks:

MOVR0, # 01h // 01-verdien er lagret i R0-registeret, R0-adressen er 08h //
MOV R1, # 08h // R1 er pekervariabelen sombutikkeradresse (08h) av R0 //
MOV 20t,@ R1 // 01-verdien lagres i 20-timersadressen til fastlegeregisteret //

Indirekte adresseringsmodus

Indirekte adresseringsmodus

Base Index Addressing Mode:

Denne adresseringsmodusen brukes til å lese dataene fra eksternt minne eller ROM-minne . Alle adresseringsmodi kan ikke lese dataene fra kodeminnet. Koden må lese gjennom DPTR-registeret. DPTR brukes til å peke dataene i koden eller det eksterne minnet.

Syntaks:

MOVC A, @ A + DPTR // C indikerer kodeminne //
MOCX A, @ A + DPTR // X indikerer eksternt minne //
EX: MOV A, # 00H // 00H er lagret i A-registeret //
MOV DPTR, # 0500H // DPTR poeng 0500h adresse i minnet //
MOVC A, @ A + DPTR // send verdientilA-registeret //
MOV P0, A // dato A sendt til PO-registraren //

Instruksjonssett:

Instruksjonssettet er strukturen til kontrolleren eller prosessoren som gir kommandoer til kontrolleren for å veilede kontrolleren for behandling av data. Instruksjonssettet består av instruksjoner, innfødte datatyper, adresseringsmodi, avbruddsregistre, eksepsjonell håndtering og minnearkitektur. De 8051mikrokontroller kan følge CISC-instruksjoner med Harvard-arkitektur. I tilfelle 8051-programmering inkluderer forskjellige typer CISC-instruksjoner:

  • Instruksjonssett for dataoverføring
  • Sekvensielt instruksjonssett
  • Aritmetisk instruksjonssett
  • Forgrening jeginstruksjonsett
  • Loop Instrcution Set
  • Betinget instruksjonssett
  • Ubetinget instruksjonssett
  • Logisk instruksjons sett
  • Boolsk instruksjonssett

Aritmetisk instruksjonssett:

De aritmetiske instruksjonene utfører de grunnleggende operasjonene som:

  • Addisjon
  • Multiplikasjon
  • Subtraksjon
  • Inndeling

Addisjon:

ORG 0000h
MOV R0, # 03H // flytt verdien 3 til registeret R0 //
MOV A, # 05H // flytt verdien 5 til akkumulator A //
Legg til A, 00H //Legg til enverdi med R0-verdi og lagrer resultateti en//
SLUTT

Multiplikasjon:

ORG 0000h
MOV R0, # 03H // flytt verdien 3 til registeret R0 //
MOV A, # 05H // flytt verdien 5 til akkumulator A //
MUL A, 03H //Multiplisertresultatet lagres i Akkumulator A //
SLUTT

Subtraksjon:

ORG 0000h
MOV R0, # 03H // flytt verdien 3 for å registrere R0 //
MOV A, # 05H // flytt verdien 5 til akkumulator A //
SUBB A, 03H // Resultatverdien er lagret i Akkumulator A //
SLUTT

Inndeling:

ORG 0000h
MOV R0, # 03H // flytt verdien 3 for å registrere R0 //
MOV A, # 15H // flytt verdien 5 til akkumulator A //
DIV A, 03H // sluttverdien er lagret i akkumulatoren A //
SLUTT

Betingede instruksjoner

CPU utfører instruksjonene basert på tilstanden ved å sjekke enkeltbit-status eller byte-status. 8051mikrokontrollerbestår av forskjellige betingede instruksjoner som:

  • JB -> Gå under
  • JNB -> Hopp hvis ikke under
  • JC -> Hopp hvis du bærer
  • JNC -> Hopp hvisikkeBære
  • JZ -> Hopp hvis null
  • JNZ -> Hopp hvisikkeNull
Betingede instruksjoner

Betingede instruksjoner

1. Syntaks:

JB P1.0, etikett
- - - - - - - -
- - - - - - - -
Merkelapp: - - - - - - - -
- - - - - - - -
SLUTT

2. Syntaks:

JNB P1.0, etikett
- - - - - - - -
- - - - - - - -
Merkelapp: - - - - - - - -
- - - - - - - -
SLUTT

3. Syntaks:

JC, merkelapp
- - - - - - - -
- - - - - - - -
Merkelapp: - - - - - - - -
- - - - - - - -
SLUTT

4. Syntaks:

JNC, merkelapp
- - - - - - - -
- - - - - - - -
Merkelapp: - - - - - - - -
- - - - - - - -
SLUTT
5. Syntaks:

JZ, merkelapp
- - - - - - - -
- - - - - - - -
Merkelapp: - - - - - - - -
- - - - - - - -
SLUTT

6. Syntaks:

JNZ, merkelapp
- - - - - - - -
- - - - - - - -
Merkelapp: - - - - - - - -
- - - - - - - -
SLUTT

Instruksjoner for ring og hopp:

Instruksjonene for å ringe og hoppe brukes til å unngå kodeglikering av programmet. Når noen spesifikke koder brukes mer enn en gang på forskjellige steder i programmet, hvis vi nevnerspesifikt navntilkode davi kunne bruke det navnet hvor som helst i programmet uten å skrive inn en kode for hver gang. Dette reduserer programmets kompleksitet. Programmeringen 8051 består av ringe- og hoppinstruksjoner som LCALL, SJMP.

  • LCALL
  • ACALL
  • SJMP
  • LJMP

1. Syntaks:

ORG 0000h
- - - - - - - -
- - - - - - - -
ACALL, merkelapp
- - - - - - - -
- - - - - - - -
SJMP STOPP
Merkelapp: - - - - - - - -
- - - - - - - -
- - - - - - - -
Ikke sant
STOPPE:NOP

2. Syntaks:

ORG 0000h
- - - - - - - -
- - - - - - - -
LCALL, merkelapp
- - - - - - - -
- - - - - - - -
SJMP STOPP
Merkelapp: - - - - - - - -
- - - - - - - -
- - - - - - - -
Ikke sant
STOPPE:NOP

Instruksjoner for ring og hopp

Instruksjoner for ring og hopp

Loop Instruksjoner:

Sløyfeinstruksjonene brukes til å gjenta blokken hver gang mens du utfører trinnene for trinn og reduksjon. 8051mikrokontrollerbestår av to typer løkkeinstruksjoner:

  • CJNE -> sammenlign og hopp hvis ikke like
  • DJNZ -> dekrement og hopp hvis ikke null

1. Syntaks:

avCJNE
MOV A, # 00H
MOV B, # 10H
Merkelapp: INC A
- - - - - -
- - - - - -
CJNE A, merkelapp

2. Syntaks:

avDJNE

MOV R0, # 10H
Merkelapp: - - - - - -
- - - - - -
DJNE R0, etikett
- - - - - -
- - - - - -
SLUTT

Logisk instruksjonssett:

Instruksjonssettet 8051 for mikrokontroller gir AND, OR, XOR, TEST, NOT og boolske logiske instruksjoner for sett og tømmer bitene basert på behovet i programmet.

Logisk instruksjonssett

Logisk instruksjonssett

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ørene brukes til å sende og motta data effektivt. 8051mikrokontrollerbestår av fire skiftoperatører:

  • RR -> Roter til høyre
  • RRC -> Roter rett gjennom bære
  • RL -> Roter til venstre
  • RLC -> Roter venstre gjennom bære

Roter til høyre (RR):

I denne forskyvningsoperasjonen blir MSB LSB, og alle bits skifter mot høyre bit-for-bit, serielt.

Syntaks:

MOV A, # 25h
RR A

Roter til venstre (RL):

I denne forskyvningsoperasjonen blir MSB LSB, og alle bits skifter mot venstre side bit for bit, seriell.

Syntaks:

MOV A, # 25h
RL A

RRC Rotate Right Through Carry:

I denne forskyvningsoperasjonen beveger LSB seg for å bære og bære blir MSB, og alle bitene forskyves mot høyre bit for bit-posisjon.

Syntaks:

MOV A, # 27h
RRC A

RLC Roter til venstre gjennom Carry:

I denne forskyvningsoperasjonen beveger MSB seg for å bære og bære blir LSB og alle bitene skifter mot venstre side i bit-for-bit posisjon.

Syntaks:

MOV A, # 27h
RLC A

Grunnleggende Embedded C-programmer:

Demikrokontrollerprogrammering er forskjellig for hver type operativsystem. Det er mange operativsystemer som Linux, Windows, RTOS og så videre. RTOS har imidlertid flere fordeler for innebygd systemutvikling. Noen av eksemplene på programmeringseksempler på monteringsnivå er gitt nedenfor.

LED blinker med med 8051mikrokontroller:

  • Nummer vises på 7-segment skjerm med 8051 mikrokontroller
  • Timer / Counter beregninger og program ved bruk av 8051mikrokontroller
  • Seriekommunikasjonsberegninger og program ved bruk av 8051mikrokontroller

LED-programmer med 8051 Microcontrller

1. WAP for å slå på PORT1-lysdiodene

ORG 0000H
VEKSEL: MOV P1, # 01 //bevege seg00000001 til p1-registeret //
RING FORSINKELSE // kjør forsinkelsen //
MOV A, P1 // trekkp1-verditil akkumulatoren //
CPL A // komplement A-verdi //
MOV P1, A // flytt 11111110 til port1-registeret //
RING FORSINKELSE // kjør forsinkelsen //
SJMP TOGLE
FORSINKELSE: MOV R5, # 10H // lasteregister R5 med 10 //
TO: MOV R6, # 200 // lasteregister R6 med 200 //
EN: MOV R7, # 200 // lasteregister R7 med 200 //
DJNZ R7, $ // reduksjon R7 til den er null //
DJNZ R6, ONE // reduserer R7 til den er null //
DJNZ R5, TWO // dekker R7 til den er null //
RET // gå tilbake til hovedprogrammet //
SLUTT

Timer / tellerberegninger og program ved bruk av 8051 Mmikrokontroller:

Forsinkelsen er en av de viktigste faktorene i programvareutviklingen. De tidtakere og tellere er maskinvarekomponenter imikrokontroller, som brukes i mange applikasjoner for å gi nøyaktig tidsforsinkelse med tellepulser. BAndre oppgaver er implementert av programvareteknikken.

1. WAP for å beregne 500us tidsforsinkelse.

MOV TMOD, # 10H // velg timermodus etter registerene //
MOV TH1, # 0FEH // lagre forsinkelsestiden i høyere bit //
MOV TL1, # 32H // lagre forsinkelsestiden i lav bit //
JNB TF1, $ // reduserer verdien på tidtakeren til den er null //
CLR TF1 // tøm tidsurflaggetbit//
CLR TR1 // AV tidtakeren //

2. WAP for å bytte lysdiodermed5sekTidsforsinkelse

ORG 0000H
RETUR: MOV PO, # 00H
ACALL FORSINKELSE
MOV P0, # 0FFH
ACALL FORSINKELSE
HOPP RETUR
FORSINKELSE: MOV R5, # 50H // lasteregister R5 med 50 //
FORSINKELSE1: MOV R6, # 200 // lasteregister R6 med 200 //
FORSINKELSE2: MOV R7, # 229 // lasteregister R7 med 200 //
DJNZ R7, $ // reduksjon R7 til den er null //
DJNZ R6, DELAY2 // reduksjon R6 til den er null //
DJNZ R5, DELAY1 // reduksjon R5 til den er null //
RET // gå tilbake til hovedprogrammet //
SLUTT

3. WAP for å telle 250 pulser ved hjelp av mode0 count0

Syntaks:

ORG 0000H
MOV TMOD, # 50H // velg telleren //
MOV TH0, # 15 // flytt tellepulsene høyere bit //
MOV TH1, # 9FH //bevege segtellepulsene, nedre bit //
SETT TR0 // PÅ tidtakeren //
JNB $ // reduserer telleverdien til null //
CLR TF0 // tøm disken, flaggbit//
CLR TR0 // stopp tidtakeren //
SLUTT

Programmering av seriell kommunikasjon ved bruk av 8051 Mmikrokontroller:

Seriell kommunikasjon brukes ofte til overføring og mottak av dataene. 8051mikrokontrollerbestår av UART / USART seriell kommunikasjon og signalene overføres og mottas avTxog Rx-pinner. UART-kommunikasjonen overfører dataene bit-for-bit serielt. UART er en halv dupleksprotokoll som overfører og mottar dataene, men ikke samtidig.

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

MOV SCON, # 50H // still inn seriell kommunikasjon //
MOV TMOD, # 20H // velg timermodus //
MOV TH1, # -3 // angi overføringshastighet //
SETT TR1 // PÅ tidtakeren //
MOV SBUF, # ’S’ // overfører S til serievinduet //
JNB TI, $ // nedverdi av timeren til den er null //
CLR RI // klart motta avbrudd //
CLR TR1 // klar tidtaker //

2. WAP for å overføre motta tegnet av Hyper Terminal

MOV SCON, # 50H // still inn seriell kommunikasjon //
MOV TMOD, # 20H // velg timermodus //
MOV TH1, # -6 // angi overføringshastighet //
SETT TR1 // på tidtakeren //
MOV SBUF, # ’S’ // overfører S til serievinduet //
JNB RI, $ // nedverdi av tidtakeren til den er null //
CLR RI // klart motta avbrudd //
MOV P0, SBUF // send SBUF-registerverdien til porten0 //
CLR TR1 // klar tidtaker //

Dette handler om 8051 programmering på forsamlingsspråk i korte trekk med eksempelbaserte programmer. Vi håper at denne tilstrekkelige informasjonen om monteringsspråk absolutt vil være nyttig for leserne, og vi ser frem til deres verdifulle kommentarer i kommentarseksjonen nedenfor.