Intel 8051

Intel MCS-51 (mida tuntakse tavaliselt Intel 8051 nime all) on Harvardi arhitektuuriga ühekiibi mikrokontrollerite seeria, mille töötas välja Intel 1980. aastatel. Kuigi Intel tänapäeval neid mikrokontrollereid ei tooda, on nendega ühilduvad mikrokontrollerid kasutusel teiste tootjate kiipides. Lisaks füüsilistele kiipidele pakuvad mitmed firmad MSC-51-l põhinevaid rakenduskiipe (ASIC) ja intellektuaalomandiga funktsiooniplokke (IP core), mida saab kasutada loogikamassiivides (nt FPGA-des).

Tehnilised omadused
MCS-51-l põhinevate mikrokontrolleriseeriate peamised tehnilised omadused: 
 8-bitiline CISC käsustikuga mikroprotsessor
 vähemalt 128 baiti sisemist muutmälu (RAM) 
 välise muutmälu (RAM) ja püsimälu (ROM) ühendamise võimalus
 Kahesuunaline asünkroonne jadavärat (Full-Duplex-UART)
 5 katkestussignaali (IRQ)
 2 katkestusprioriteeti
 2 16-bitilist sisseehitatud taimerit/loendurit

Käsustik 
Intel MCS-51 käsustik pole binaarkujul masinkoodina ühilduv Intel 8080/8085 ega Z80 mikroprotsessoritega, kuid käskude mnemokoodid on sarnased firma Intel teiste mikroprotsessorite käskude mnemokoodidega.

Käskude mnemokoodide selgitus 
Aritmeetikakäsud:
ADD – Liitmine akuregistriga – Add Accumulator
ADDC – Liitmine akuregistriga koos ülekandega – Add Accumulator With Carry
SUBB – Lahutada akuregistrist jättes tulemuse akuregistrisse – Subtract From Accumulator With Borrow
INC – Suurendada registris olevat väärtust – Increment Register
DEC – Kahanda registri sisu ühe võrra – Decrement Register
MUL – Korrutada akuregistris olev arv registris B paikneva väärtusega – Multiply Accumulator by B
DIV – Jagada akuregistris olev arv registris B paikneva väärtusega – Divide Accumulator by B
CPL – Asendada registri sisu vastava pöördkoodiga – Complement Register
DA – Kümnendkorrektsioon – Decimal Adjust

Loogikatehete käsud:
ANL – NING tehe bitikaupa – Bitwise AND
ORL – Bitikaupa VÕI tehe – Bitwise OR
XRL – Bitikaupa Välistav-VÕI tehe – Bitwise Exclusive OR

Bitinihutamise käsud:
RL – Akuregistri sisu nihutamine vasakule – Rotate Accumulator Left
RLC – Akuregistri sisu nihutamine vasakule koos ülekandelipuga – Rotate Accumulator Left Through Carry
RR – Akuregistri sisu nihutamine paremale – Rotate Accumulator Right
RRC – Akuregistri sisu nihutamine paremale koos ülekandelipuga – Rotate Accumulator Right Through Carry

Andmete kopeerimise käsud:
MOV – Andmete kopeerimine – Move Memory
MOVC – Andmete kopeerimine programmimälus – Move Code Memory
MOVX – Andmete kopeerimine laiendatud mälus – Move Extended Memory
POP – Väärtuse tagasilugemine pinumälust – Pop Value From Stack
PUSH – Väärtuse paigutamine pinumällu – Push Value Onto Stack
CLR – Nullida registri sisu – Clear Register
SETB – Biti seadmine 1'ks – Set Bit
SWAP – Vahetada akuregistri näksid (neli esimest ja neli viimast bitti) – Swap Accumulator Nibbles
XCH – Vahetada baidid registrites – Exchange Bytes
XCHD – Vahetada neli bitti akuregistrist (nt. kümnend- või kuueteistkümnendarv) sisemise mäluregistriga – Exchange Digits

Siirdekäsud:
JMP – Minna tingimusteta etteantud aadressile – Jump to Address
AJMP – Siirdumine absoluutaadressile – Absolute Jump
LJMP – Minna tingimusteta etteantud täispikale aadressile – Long Jump
SJMP – Minna tingimusteta etteantud lähiaadressile – Short Jump
CJNE – Võrrelda ja siirduda etteantud aadressile kui pole võrdne – Compare and Jump if Not Equal
DJNZ – Kahandada registrit ja minna etteantud aadressile kui registri sisu kahandamise järel pole null – Decrement Register and Jump if Not Zero
JB – Minna etteantud aadressile kui vastav bitt on 1 – Jump if Bit Set
JBC – Minna etteantud aadressile kui vastav bitt on 1 ja seejärel bitt nullida – Jump if Bit Set and Clear Bit
JC – Minna etteantud aadressile kui ülekandelipp "Carry" on 1 – Jump if Carry Set
JNB – Minna etteantud aadressile kui vastav bitt on 0 – Jump if Bit Not Set
JNC – Minna etteantud aadressile kui ülekandelipp "Carry" on 0 – Jump if Carry Not Set
JNZ – Minna etteantud aadressile kui akuregistri sisu pole null – Jump if Accumulator Not Zero
JZ – Minna etteantud aadressile kui akuregistri sisu on null – Jump if Accumulator Zero
RETI – Katkestustöötlusrutiinist väljumine – Return From Interrupt
NOP – Üks käsk tegevuseta edasi – No Operation

Alamprogrammikäsud:
ACALL – Alamprogrammi väljakutsumine absoluutaadressiga – Absolute Call
LCALL – Alamprogrammi väljakutsumine täispika aadressiga – Long Call
RET – Alamprogrammist väljumine – Return From Subroutine

Operandide tähised tabelis 
Andmed:
 A – kiire protsessori sisemine  register ehk "Aku"
 R0, R1, R2, R3, R4, R5, R6 ja R7 – protsessori  registrid
 C – ülekande tunnus ehk ülekandelipp (carry flag)
 bitt – otseadresseeritav bitt sisemises põhi-muutmälus RAM või  eriregistris SFR
 @Ri0 – sisemise muutmäluploki 0 kaudne aadress, märgi "@" järgi antakse aadressi sisaldava registri tähis R0 kuni R7
 @Ri1 – sisemise muutmäluploki 1 kaudne aadress, märgi "@" järgi antakse aadressi sisaldava registri tähis R0 kuni R7
 #andmed – 8 bitiline konstant, mis antakse käsukoodi järel
 #andmed16 – 16 bitiline konstant, mis antakse käsukoodi järel 
 direct – 128 sisemist mälupesa ja eriotstarbelised  registrid SFR
 @DPTR – andmeviit (data pointer)

Programmimälu:
 aadr11 – 11 bitiline programmimälu aadress
 aadr16 – 16 bitiline programmimälu aadress
 suht – 8-bitiline suhteline aadress programmimälus (aadress on vahemikus −128 kuni +127)

Viited

Mikrokontrollerid