# 8051-microcontroller

De 8051 microcontroller is een acht bit CISC microcontroller die door Intel in 1980 op de markt gezet werd. Hoewel Intel de 8051 en afgeleiden niet meer produceert is het ontwerp zo populair dat er wel twintig (en meer) verschillende types op de markt zijn, die allemaal opgebouwd werden rond dezelfde kern (core). Deze derivaten worden aangeboden door onder meer de fabrikanten NXP Semiconductors, Infineon, Texas Instruments en Atmel.

## Opbouw

De opbouw van de 8051 bestaat uit een minimaal computersysteem. De volgende onderdelen zijn terug te vinden in elk computersysteem:
* Bus: De bus wordt gebruikt om de cpu te laten communiceren met de overige componenten van het systeem. De 8051 heeft drie bussen: de adres-, data- en besturingsbus.
* Cpu: De CPU (Central Processing Unit) voert bewerkingen uit en neemt beslissingen gebaseerd op het computerprogramma. Bij de 8051 is intern een cpu aanwezig.
* Programmageheugen: Het geheugen wordt gebruikt om de programma-instructies, programma-adressen en data in op te slaan. Het kan samengesteld zijn uit verschillende types: ROM, EPROM en/of EEPROM.
* Input/Output poorten: Deze poorten worden gebruikt om met de buitenwereld te communiceren of om informatie extern te bewaren.
* Klok: Dit is een stuk hardware dat zorgt voor de juiste timingsignalen om de CPU aan te sturen. De klokperiode of de klokcyclus kan afkomstig zijn van een externe kristaloscillator of van een extern digitaal signaal.
* Interrupt controle: De werking van de CPU kan onderbroken/aangepast worden door een interrupt. De interrupt controle handelt dit af.
* Datageheugen: Hierin worden de datagegevens opgeslagen. Als dusdanig kan men zowel lezen als schrijven naar dit geheugen, het is dus een RAM geheugen.
* Timer: Dit wordt gebruikt bij het realiseren van de timingaspecten van de applicaties.
* Seriële poort: Staat in voor de seriële communicatie van de 8051. Gegevens op een seriële manier ontvangen en verzenden.

## Adresruimte

De 8051 is opgebouwd volgens het algemeen Harvard Architectuur principe. Deze architectuur verdeelt de geheugenruimte in drie verschillende gebieden. Deze zijn:
* Codegeheugen (=programmageheugen): De 8051 heeft 4096 bytes intern codegeheugen. Dit geheugen kan uitgebreid worden tot een totaal van 64 kB. Door middel van de EA (External Acces)-pen kan men het inwendige codegeheugen uitschakelen.
** Pen is laag: De processor zal de instructies uit het externe geheugen halen (fetch instructie).
** Pen is hoog: De fetchinstructie gebeurt inwendig voor het aanspreken van de eerst 4096 bytes van het programmageheugen.
* Intern datageheugen: Het interne datageheugen van 256 bytes kunnen we onderverdelen in een onderste helft van 128 bytes, die gebruikt wordt door het programma om datavariabelen op te slaan, en een bovenste helft van 128 bytes die gereserveerd is voor de Special Function Registers (SFR’s). De SFR’s worden gebruikt om de waarden (in bytes), die de werking van de 8051 controleren, te bewaren. SFR’s waarvan het adres deelbaar is door 8, zijn bit-adresseerbaar.
* Bit-adresseerbaar geheugen
** Zestien bytes van het interne datageheugen zijn bit-adresseerbaar.
* Extern datageheugen: Indien men meer data geheugen nodig heeft, beschikt de 8051 over een bijkomend extern datageheugen van 64 kB.

## Penaansluitingen

De standaard 8051 is verkrijgbaar in een 40-pins DIP-behuizing. Er bestaan verschillende varianten van de 8051, die uitgevoerd zijn in verschillende behuizingen. Twee hiervan zijn respectievelijk een DIL (Dual In Line)- en een PLCC (Plastic Chip Carrier)-behuizing. De DIL-behuizing is leverbaar in keramische of kunststof uitvoering. Voor een UV-wisbare EPROM-versie moet men kiezen voor de duurdere keramische uitvoering aangezien dit de enige is die een venster heeft om de chip te kunnen wissen met UV-licht.
Specificaties:
* 32Bi-directionele I/O-lijnen geconfigureerd in vier 8-bits poorten.
* Een programmeerbaar full-duplex serieel kanaal.
* 64 kB programmageheugenruimte.
* 64 kB datageheugenruimte.
* Twee interne timer/counters.
* Twee interruptlijnen.
De functionele penaansluitingen van de 8051 bestaat uit volgende onderdelen:
* Poorten 0, 1, 2 en 3:
** Poort 0: is een quasi-bidirectionele 8-bits poort. Bij gebruik van extern geheugen dient deze poort als een gemultiplexeerde adresbus (laagste orde) en een databus.
** Poort 1: (I/O) is een quasi-bidirectionele 8-bits poort.
** Poort 2: (I/O) is een quasi-bidirectionele 8-bits poort. Deze poort dient als adresbus (hoogste byte) bij het gebruik van extern geheugen.
** Poort 3: (I/O) is een quasi-bidirectionele 8-bits poort met verscheidene specifieke functies:
*** P3.0 = RXD (serial port input)
*** P3.1 = TXD (serial port output)
*** P3.2 = INT0
*** P3.3 = INT1
*** P3.4 = T0 (Timer 0 input)
*** P3.5 = T1( Timer 1 input)
*** P3.6 = WR’ (Write-strobe voor externe data)
*** P3.7 = RD’ (Read-strobe voor externe data)
* VCC:+5V
* Vss:0V
* XTAL:Aansluiting voor een kristal of een externe klokgenerator.
* RST:Resetpin. Bij een hoog niveau op deze pin zal de 8051 resetten.
* EA/Vpp: De EA (External Access)-optie dient voor de keuze tussen intern of extern programmageheugen.
          L-niveau: externe ROM
          H-niveau: interne ROM
       De Vpp staat voor de programmatiespanning voor een 8751 (EPROM-versie)
* PSEN: Program Store Enable. Dit is het leessignaal voor extern programmageheugen.
* ALE/PROG: ALE (Adres Latch Enable) is het controlesignaal voor de gemultiplexte adresbus (Poort 0). De PROG-optie dient bij de 8751 voor de programmatie-impuls om de inwendige EPROM te programmeren.