Intel 8051

Intel 8051 eller 8051 er en mikrokontroller (MC) utviklet av Intel i 1980 for bruk i innebygde produkter. Det er fortsatt populær arkitektur ; mange nyere mikrokontrollere har en 8051-kjerne, supplert med et antall perifere kretser integrert på samme brikke, og med større kapasitetsminner.

Strukturen til et mikroprosessor (MP) system er vist i figuren nedenfor.

En mikrokontroller (MC) kombinerer disse forskjellige elektroniske funksjonene på en enkelt brikke. I de følgende avsnittene vil vi beskrive hoveddelene av 8051-mikrokontrolleren. 8051 er en 8-biters MC fordi den behandler 8-bits data; databussen har derfor 8 linjer; Som de fleste 8-biters MC-er, håndterer 8051 16-biters adresser, noe som gir en adresserbar plass på 2 16  byte, eller 64 kiB.

Sentralenhetens struktur

Den sentrale enheten er hjertet til MC. Det er ansvarlig for å utføre instruksjonene i programmet. Vi kan skille mellom tre deler: databehandling, adresseadministrasjon, instruksjonsbehandling.

Databehandling

Denne delen har 3 registre og en aritmetisk og logisk enhet (ALU). 8051-instruksjonene lar deg handle på 1 eller 2 8-bits data om gangen, ikke mer. Operasjonen er som følger: 8-bitersregistrene TMP1 og TMP2 presenterer dataene eller dataene som skal behandles for UAL. Etter behandling plasseres resultatet i akkumulatoren (Acc). Den kan brukes til en ny beregning, sendes til et minne (RAM eller arbeidsregister) eller til en utgangsport.

ALU består av følgende kretser:

En serie flip-flops, kalt tilstandsindikatorer , plasseres automatisk under aritmetiske operasjoner. Tilstanden til disse flaggene kan testes ved betingede greninstruksjoner.

8051 har 32 arbeidsregister, organisert i 4 grupper på 8 registre. Disse registerene utgjør midlertidige minner, der det midlertidig plasseres informasjon som er kjent for å være nødvendig kort tid etter. Fordelen med arbeidsregister er at tilgangstiden er kortere enn for å lese eller skrive i RAM, og instruksjonene som kreves for å få tilgang til dem kortere.

Adresseadministrasjon

Minneområdet til en 8051 er delt inn i 3 veldig forskjellige områder:

8051 har derfor naturlig nok tre registre dedikert til adresseadministrasjon.

Behandlingsinstruksjoner

Instruksjonene er 1 til 3 byte lange. Den første byten, kalt opcode , spesifiserer hvilken instruksjon det er. Noen instruksjoner krever data (8 bits) eller en begrenset adresse (8 bits), eller til og med en absolutt adresse (16 bits).

Operasjonskoden er plassert i instruksjonsregisteret som er gitt for dette formålet. Den blir presentert for en dekoder som bestemmer instruksjonstypen og vil om nødvendig lese 1 eller 2 ekstra byte som vil bli plassert i ad hoc- registre (data eller adresse).

Instruksjonsbehandlingsblokken styres av en klokke; 8051 inneholder alle elementene i klokken bortsett fra komponentene som bestemmer svingningsfrekvensen: vanligvis et kvarts, men en RC-krets kan også brukes hvis presis kunnskap om frekvensen ikke er nødvendig. Blokken genererer styresignaler (les, skriv) både for de andre blokkene i MC og for eventuelle eksterne kretser (eksterne minner osv.).

Briefs

Merk: Bytes som ikke brukes som arbeidsregister eller for boolske variabler, kan brukes som vanlig RAM.

Tendensen i systemer som bruker MC er å velge en komponent som har tilstrekkelig ROM og RAM til å lagre hele programmet og alle dataene. Imidlertid, hvis nødvendig, kan eksterne minner legges til MC. MC oppfører seg da som en mikroprosessor. Linjer som normalt brukes som inngangs- / utgangsporter konverteres til adresse- og databusser. I denne typen applikasjoner vil vi generelt velge MC-er uten intern ROM, for eksempel 8031.

Adresseringsmodi

8051 innrømmer 6 adresseringsmodi:

Sett med instruksjoner

I denne delen gir vi en oversikt over 8051 instruksjonssettet ved hjelp av konstruktorsyntaks, Intel:

Overføringsinstruksjoner

Kilden og destinasjonsadressene kan være Acc, et arbeidsregister, et internt eller eksternt RAM-spor, en I / O-port; ROM kan bare brukes som kilde.

Instruksjonene til instruksjonene er: MOV-destinasjon, kilde kopierer byten fra kildeadressen til destinasjonsadressen

Instruksjonene til instruksjonene er: MOVX-destinasjon, kilde

Aritmetiske instruksjoner

Generelt bruker de Acc for å lagre en av de to startdataene, samt resultatet av operasjonen etter gjennomføring av instruksjonen. Statusindikatorer plasseres automatisk avhengig av resultatet av operasjonen:

Eksempler

Logiske instruksjoner

Logiske operasjoner utføres mellom biter av samme vekt, det er ingen interaksjon mellom biter med forskjellig vekt, og statusindikatorene blir ikke endret. AND-, OR- og XOU-operasjoner er tilgjengelige, samt inversjon; for NAND, NON-OR, NON-XOU, er det nødvendig å handle i to trinn: først den direkte operasjonen, og deretter invertere alle bitene.

Eksempler

CLR A: setter Acc til 0

Boolske instruksjoner

Dette er en innovasjon sammenlignet med mikroprosessorer, som fremdeles behandler data byte. 8051 inneholder en full prosessor som fungerer på 1-bit data, også kjent som boolske variabler. Det er Carry som spiller rollen som Acc for disse operasjonene.

8051s interne RAM inneholder 128 spor som kan adresseres individuelt. Et visst antall biter av SFR er også individuelt adresserbare, spesielt bitene som tilsvarer utgangsportene.

Tilkoblingsinstruksjoner

Husk at forgreningsinstruksjoner brukes til å bryte den normale kjøringssekvensen til et program. Vi skiller mellom:

Merk: Bare hopp kan være betinget i 8051.

I / U-porter

De I / O-porter tillate mikroprosessor eller mikrokontroller systemer for å kommunisere med omverdenen: motta informasjon, som det vil da prosess- og styreperiferi: indikatorlamper, motorer, releer, D / A-omformere, etc.

8051-familien er designet for applikasjoner som krever lite ROM og RAM. Så selve 8051 har en 4KB ROM og bare 128 byte RAM; og det er også nødvendig å ta i betraktning at RAM brukes av arbeidsregistrene, stakken og de 16 byte (fra 20h til 2Fh) adresserbare bit.

Når applikasjonen kan være fornøyd med disse minnestørrelsene, er 32 I / O-linjer tilgjengelige, organisert i 4 porter med 8 linjer; adressene er som følger: port 0: 80h; port 1: 90 timer; port 2; A0h; port 3: B0h. De interne kretsene knyttet til de forskjellige linjene er litt forskjellige. Ta eksemplet med port 1.

For å bruke en linje som en utgangslinje, skriver vi ønsket bit i D-flip-flop. Q / output (invers av Q) driver porten til en anrikningsmosfet. Hvis Q er 0, Q / er 1, leder mosfet og utgangslinjen trekkes til 0. Hvis Q er 1, Q / er 0, blokkeres mosfet og utgangslinjen trekkes til Vcc av opptrekksmotstanden .

For å bruke linjen i inngangslinjen, er det nødvendig å skrive en 1 i vippebryteren D (den er foruten staten som standard når den slås på). Den ytre kretsen kan trekke linjen til 0; linjestatusen vises på den interne databussen når en portlesing blir tatt.

Når systemet krever større minnestørrelse, er to løsninger:

Når du bruker eksterne minneskapsler:

Merk at vi kan administrere portene:

Legg også merke til at noen linjer i port 3 har en dobbel funksjon siden de kan brukes som avbruddsforespørselslinjer (se nedenfor), som innganger til tellerne (se nedenfor), som inngang og utgang til seriell port (se nedenfor) og som lese- og skrivelinjene til kontrollbussen når eksternt RAM brukes.

Avbrudd

Når en periferiutstyr (tastatur, A / D-omformer, seriell port osv.) Ønsker å kommunisere informasjon til MC, kan den:

Når det aktuelle periferiutstyret er utenfor MC, må det gis pinner for å koble til avbrytelsesforespørselslinjene.

8051 har 5 avbruddskilder:

Hver avbrudd kan maskeres eller avmaskeres ved å sette riktig bit av IE-registeret ( Interrupt Enable ) til 1 eller 0 . En maskert avbrudd tas ikke i betraktning. Det er også mulig å maskere alle avbruddene ved hjelp av bit 7 i IE.

Hver type avbrudd kan tildeles lav eller høy prioritet ved å sette riktig bit i IP-registeret ( Interrupt Priority ). Et avbrudd med høy prioritet kan avbryte rutinen for håndtering av et avbrudd med lav prioritet. Når MC mottar to avbruddsforespørsler på samme prioritetsnivå samtidig (dvs. i løpet av samme maskinsyklus), blir de behandlet i følgende rekkefølge: Int0, C / T0, Int1, C / T1, seriell port.

Når en avbruddsforespørsel godtas, oppretter MC en forbindelse til en av følgende adresser: 0003h for Int0, 000Bh for C / T1, 0013h for Int1, 001Bh for C / T1 og 0023h for den serielle porten. Generelt settes en instruks for en underrutineanrop på disse adressene for å håndtere avbruddet; på slutten av underrutinen går du tilbake til startadressen, som automatisk ble lagret i stabelen.

Hver avbruddsrutine har vanligvis følgende deler:

Ettersom 8051 har 4 blokker med 8 arbeidsregister, er en rask og elegant måte å lagre arbeidsregister på å bare endre den aktive blokken (dette bestemmes av bit 3 og 4 i statusregisteret, SR, Status Register )

Ved oppstart initialiseres IE- og IP-registerene til 0. Programmereren må derfor spesifisere hvilke avbruddskilder han vil autorisere, og deres prioritetsnivå. Valgene kan endres i løpet av programmet.

Teller / tidtakere

8051 har to tellere / tidtakere. Disse enhetene er såkalte fordi de kan brukes:

Hver C / T har to 8-bit binære tellere. Ulike driftsmåter er mulige: de mest brukte er:

Vi kan velge (passende biter av Tcon) som skal brukes på hver teller:

Driften av tellerne styres av:

Seriell port

For visse applikasjoner (ekstern dataoverføring, modemkontroll osv.) Er det nyttig å ha i tillegg til de parallelle I / O-portene, en seriell eller seriell inngang / utgang ( Serial Input / Output Port ).

Prinsippet om seriekoblinger er veldig enkelt: i stedet for å sende 8 bits parallelt på 8 linjer, sendes de 8 bitene etter hverandre på en enkelt linje.

8051 har en toveis seriell port som bruker en linje for sending av data, TxD og en linje for mottak av data, RxD.

Flere driftsmåter er mulige. Den mest brukte modusen bruker tidtaker 1 i automatisk omlastingsmodus for å stille inn bithastighet ( baudrate ). Standardpriser varierer fra 300  bit / s til 19 200  bit / s .

For å sende et tegn, er det tilstrekkelig å skrive det i senderegistret Sbuf; dette starter automatisk prosedyren for sending av tegnet:

Når et tegn mottas, initieres prosedyren ved deteksjon av en fallende kant ved RxD-pinnen. De 8 eller 9 bitene er plassert i mottaksregisteret Sbuf (merkelig, det samme navnet og den samme adressen, 99h, brukes til de to Sbuf-registerene; når man skriver til denne adressen, lagres byte i registeret d (emisjon, når vi leser, er det innholdet i mottaksregisteret). Når alle bitene er til stede, utløses en avbruddsforespørsel. MC må komme og lese den mottatte byten før mottakelsen av neste byte er avsluttet, ellers går den første tapt.

Senderen og mottakeren kan fungere samtidig. Avbruddsforespørsler kombineres. Derfor, når prosessoren samtidig sender og mottar, må prosessoren avgjøre under hver avbruddsforespørsel om det er fra avsenderen eller mottakeren. Dette gjøres ved å lese TI- og RI-bitene i Scon-registeret ( Serial Port Control Register ).

Programmering

I tillegg til monteringen er det mulig å bruke kompilatorer for språk på høyt nivå .

Reduksjon av forbruket

Mange applikasjoner krever ikke at MC er permanent aktiv. For eksempel kan et datainnsamlingssystem godt være "sovende" mellom de gangene det tar dataavlesninger, for å spare energi; Dette er spesielt interessant når utstyret er batteridrevet.

8051 i NMOS teknologi bare hadde en energisparemodus, hvilemodus . I denne modusen blir ikke klokken lenger brukt på mikroprosessoren, som derfor ikke lenger utfører instruksjoner; interne registre bevarer informasjonen deres; seriell port, avbruddshåndtering og tellere / tidtakere fungerer normalt. Idle modus er angitt av innstillingen IDL bit av Pcon register ( Strømforhold ) til 1. MC avslutter hvilemodus ved et avbrudd eller en ekstern reset.

8051 i CMOS- teknologi , den vanligste i våre dager, har, i tillegg til inaktiv modus , en Power Down- modus . Her er det rett og slett oscillatoren som genererer klokkesignalet som er blokkert. Alle funksjoner er blokkert. Forskjellen med strømbrudd er at alle registre beholder informasjonen, spesielt I / O-portene som er bundet til registre. Slå av modus går inn ved å sette PD-biten til Pcon-registeret til 1. Den eneste veien ut av Power Down- modus er gjennom en ekstern tilbakestilling, som også tilbakestiller programpekeren. Vi starter derfor programmet på nytt ved 0000h, og SFR-ene (inkludert portregistrene) tilbakestilles.

8051 familie

8051-familien har hatt en bemerkelsesverdig suksess, til tross for det noe "eksotiske" instruksjonssettet. Det er derfor veldig naturlig at Intel først, og deretter mange andre produsenter, har utviklet MC-er basert på 8051-arkitekturen, men med forskjellige forbedringer: slettbart og omprogrammerbart programminne (8751), tredje teller / tidtaker (8052), større ROM- og RAM-kapasitet , flere I / O-porter, integrerte A / D- og D / A-omformere, ekstra C / T (9 totalt i 80251) ...

8052

8052 er en oppgradert versjon av 8051, 8032 er en oppgradert versjon av 8031, som er en 8051 uten intern ROM.

De viktigste forbedringene som er gjort er:

- Opptaksmodus: telleren teller pulser som kommer fra en ekstern inngang eller en intern frekvensdeler; en puls påført pin T2EX kopierer tellerens tilstand på tidspunktet for denne pulsen i to SFRer (RCAP2H og RCAP2L); en avbruddsforespørsel genereres; telleren fortsetter å telle normalt.

- Automatisk omlastingsmodus: innholdet i SFR RCAP2H og RCAP2L kopieres til måleren enten automatisk, når måleren overskrider kapasiteten, eller når en ekstern puls påføres pin T2EX.

- Klokkemodus for overføring: Denne modusen er ment å lette opprettelsen av det serielle grensesnittet.

8052 Basic

Dette er en spesialversjon av 8052. Det interne 8KB ROM-minnet er okkupert av en Basic-tolk. Det er derfor mulig å bruke en terminal og det serielle grensesnittet til 8052 til å arbeide i interaktiv modus ved å sende kommandoer på grunnleggende språk til 8052 fra terminalen.

Basic 8052:

Eksterne linker