Registrer banker og stakk minneallokering i 8051 mikrokontroller

Prøv Instrumentet Vårt For Å Eliminere Problemer





Samlingen av generelle formålsregistre (R0-R7) kalles som registerbanker, som godtar en byte med data. Bankregisteret er en del av RAM-minne i den innebygde mikrokontrollere, og den brukes til å lagre programinstruksjonene. Hver mikrokontroller består av forskjellige minnebanker, og hvert bankregister består av en unik adresse for å gjenkjenne lagringsstedet.

Registrer banker i 8051

Registrer banker i 8051

Registrer banker i 8051



8051-mikrokontrolleren består av fire registerbanker, for eksempel Bank0, Bank1, Bank2, Bank3 som er valgt av PSW (Program Status Word) -registeret. Disse registerbankene er tilstede i det interne RAM-minnet til 8051-mikrokontrolleren, og brukes til å behandle dataene når mikrokontrolleren er programmert.


Bytte av registerbanker



Som standard er 8051 mikrokontrolleren slått på med registerbank 0, og ved å bruke Program Status Word (PSW) kan vi bytte til andre banker. De to bitene av PSW brukes til å bytte mellom registerbankene. Disse to bitene er tilgjengelige med de bitadresserbare instruksjonene SETB og CLR.

Basert på de mulige kombinasjonene av RS1 og RS0 av PSW, endres registerbanken tilsvarende, dvs. hvis RS1 og RS0 er 0, så velges Bank 0. På samme måte er Bank1, 2 og 3 valgt i henhold til verdiene til RS1 og RS0.

Stack Memory Allocation i 8051 Microcontroller

Stakken er et område med random access memory (RAM) som er tildelt til å inneholde midlertidig alle parametrene til variablene. Stakken er også ansvarlig for å minne på rekkefølgen som en funksjon kalles i, slik at den kan returneres riktig. Når funksjonen kalles, legges parametrene og lokale variabler tilknyttet den til stabelen (PUSH). Når funksjonen kommer tilbake, fjernes parametrene og variablene (“POP”) fra bunken. Dette er grunnen til at et programs stabelstørrelse endres kontinuerlig mens programmet kjører.


Registeret som brukes for å få tilgang til stakken kalles stack pointer register. Stakepekeren er et lite register som brukes til å peke mot stakken. Når vi skyver noe inn i stackminnet, øker stackpekeren.

Stack Memory Allocation i 8051 Microcontroller

Stack Memory Allocation i 8051 Microcontroller

Eksempel

Når en 8051-mikrokontroller slås på, er stackpekeren som standard verdi 07, som vist i figuren ovenfor. Hvis vi utfører 'PUSH' -operasjon, vil stakkpekeradressen økes og flyttes til et annet register. For å unngå dette problemet, må vi tilordne en annen adresseplassering til stakkpekeren før du starter programmet.

PUSH-drift

'PUSH' brukes til å ta verdiene fra ethvert register og lagre i startadressen til stakkpekeren, dvs. 00h ved å bruke 'PUSH' -operasjonen. Og for neste ‘PUSH’ øker den +1, og lagrer verdien i neste adresse til stakkpekeren, dvs. 01h.

PUSH-drift av Stack

PUSH-drift av Stack

PUSH-operasjon betyr (først inn først ut)

Eksempel: WAP på monteringsspråk for PUSH-drift

0000h
MOV 08h, # 21h
MOV 09h, # 56h
TRYKK 00h
TRYKK 01h
SLUTT

POP-drift

Den brukes til å plassere verdiene fra stakkpekerens maksimale adresse til et annet registers adresse. Hvis vi bruker denne ‘POP’ igjen, så reduseres den med 1, og verdien som er lagret i et hvilket som helst register blir gitt som ‘POP’.

POP-drift i stabelen

POP-drift i stabelen

POP-operasjon betyr 'Last in First out'.

000H
MOV 00H, # 12H
MOV 01H, # 32H
POP 1FH
POP 0EH
SLUTT

Register over 8051 mikrokontroller

Hvis vi utfører noen operasjoner enten addisjon eller subtraksjon, kan ikke disse operasjonene utføres direkte i minnet, og derfor utføres ved hjelp av registerene. Det finnes forskjellige typer registrerer seg i 8051 mikrokontroller .

Disse registerene er klassifisert i to typer basert på deres virksomhet:

• Register for generelle formål

• Spesialfunksjonsregistre

Generelle formålsregistre

Som vi diskuterte tidligere i denne artikkelen, er det fire forskjellige bankregister hvor hver bank har 8 adresserbare 8-bitersregister, og bare ett bankregister kan nås om gangen. Men ved å endre bankregisterets nummer i flaggregisteret, kan vi få tilgang til andre bankregistre, som har blitt diskutert tidligere på denne artikkelen sammen med avbryte konseptet i 8051 .

Spesialfunksjonsregistre

Spesialfunksjonsregistrene, inkludert akkumulator, register B, datapeker, PCON, PSW, etc., er designet for et forutbestemt formål under produksjon med adressen 80H til FFH, og dette området kan ikke brukes til data- eller programlagringsformål. Disse registerene kan implementeres av bitadresse- og byte-adresseregister.

Typer av spesielle funksjonsregistre

8051 består av fire inngangs- / utgangsrelaterte spesialfunksjonsregistre der det er totalt 32 I / O-linjer. Spesialfunksjonsregistrene styrer verdiene som er lest fra I / O-linjene og spesialfunksjonsregistrene som styrer driften av 8051. Hjelpespesialfunksjonsregistrene er ikke direkte koblet til 8051 - men faktisk uten disse registerene - 8051 kan ikke fungere ordentlig. Registreringssettet 8051 er forklart nedenfor.

Registersett med 8051 mikrokontroller

Å sette en fast konstantverdi i registeret kalles et registersett. Verdiene settes i registerene ved hjelp av instruksjonssett. 8051 følger CISC-instruksjoner med ‘Harvard’-arkitektur. De CISC står for komplekse instruksjonsberegninger . Ulike typer instruksjoner i 8051-mikrokontrolleren inkluderer:

  1. Aritmetiske instruksjoner
  2. Betingede instruksjoner
  3. Instruksjoner for ring og hopp
  4. Loop Instruksjoner
  5. Logiske instruksjoner
  6. Bullion-instruksjoner

1. Regningsinstruksjoner

De aritmetiske instruksjonene utfører flere grunnleggende operasjoner som:

  • Addisjon
  • Subtraksjon
  • Multiplikasjon
  • Inndeling
Aritmetiske instruksjoner i 8051 Microcontroller

Aritmetiske instruksjoner i 8051 Microcontroller

Eksempler:

en. Addisjon:

Org 0000h
MOV R0, # 03H // flytt verdien 3 er register R0 //
MOV A, # 05H // flytt verdien 5 i akkumulator A //
Legg til A, 00H // akkumulatorverdi ‘5’ med 0 og lagret på akkumulator //
SLUTT

b. Subtraksjon:

Org 0000h
MOV R0, # 03H // flytt verdien 3 er register R0 //
MOV A, # 05H // flytt verdien 5 i akkumulator A //
SUBB A, 03H // A = 5-3 sluttverdien er 2 lagret i akkumulatoren A //
SLUTT

C. Multiplikasjon:

Org 0000h
MOV R0, # 03H // flytt verdien 3 er register R0 //
MOV A, # 05H // flytt verdien 5 i akkumulator A //
MUL A, 03H // A = 5 * 3 sluttverdien er 15, lagret i akkumulatoren A //
SLUTT

D. Divisjon:

Org 0000h
MOV R0, # 03H // flytt verdien 3 er register R0 //
MOV A, # 15H // flytt verdien 5 i akkumulator A //
DIV A, 03H // A = 15/3 sluttverdien er 5 lagret i akkumulatoren A //
SLUTT

2. Betingede instruksjoner

CPUen kan utføre instruksjonene basert på tilstanden ved å sjekke single-bit status eller byte status kalles betingede instruksjoner som:

For å sjekke enkeltbitsstatus i bitadresserbart register

JB- hopp hvis under

JNB- hopp hvis ikke over

For å sjekke bærebitstatus

JC- hopp hvis bær flagg

JNC-hopp hvis ingen bærer

For å sjekke akkumulatorstatusen enten 0 eller 1

JZ- hopp hvis null flagg

JNZ- hopp hvis ikke null

Dette handler om registeret som er satt i 8051 mikrokontroller og deres stackminnetildeling. Vi håper denne artikkelen kan ha gitt deg noen viktige innsikter om emnet sammen med noen veldig interessante programmer som følger med hvert emne. Du kan også skrive til oss for hjelp i koding av mikrokontrolleren og også om nyeste prosjekter på mikrokontroller .