Intel 8051

pisi|Mikrokontroller Infineon SAB-C515-LN mis põhineb 8051'l
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äsukood (hex) 0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F 0x  NOP  AJMP aadr11 LJMP aadr16 RR A INC A INC direct INC @Ri0 INC @Ri1 INC R0 INC R1 INC R2 INC R3 INC R4 INC R5 INC R6 INC R7 1x  JBC bitt, suht  ACALL aadr11 LCALL aadr16 RRC A  DEC A  DEC direct DEC @Ri0 DEC @Ri1 DEC R0  DEC R1  DEC R2  DEC R3  DEC R4  DEC R5  DEC R6  DEC R7 2x  JB bitt, suht  AJMP aadr11 RET  RL A  ADD A, #andmed ADD A, direct ADD @Ri0 ADD @Ri1 ADD R0 ADD R1 ADD R2 ADD R3 ADD R4 ADD R5 ADD R6 ADD R7 3x  JNB  bitt, suht  ACALL aadr11 RETI  RLC A ADDC A, #andmed  ADDC A, direct ADDC @Ri0 ADDC @Ri1 ADDC R0 ADDC R1 ADDC R2 ADDC R3 ADDC R4 ADDC R5 ADDC R6 ADDC R7 4x  JC suht  AJMP aadr11 ORL direct, A ORL direct, #andmed ORL A, #andmed  ORL A, direct  ORL @Ri0 ORL @Ri1 ORL R0 ORL R1 ORL R2 ORL R3 ORL R4 ORL R5 ORL R6 ORL R7 5x  JNC suht  ACALL aadr11 ANL direct, A ANL direct, #andmed ANL A, #andmed ANL A, direct ANL @Ri0 ANL @Ri1 ANL R0  ANL R1 ANL R2 ANL R3 ANL R4 ANL R5 ANL R6 ANL R7 6x  JZ suht  AJMP aadr11 XRL direct, A  XRL direct, #andmed XRL A, #andmed  XRL A, direct  XRL @Ri0  XRL @Ri1  XRL R0  XRL R1  XRL R2  XRL R3  XRL R4  XRL R5  XRL R6  XRL R7 7x  JNZ suht  ACALL aadr11 ORL C, bitt  JMP @A+DPTR MOV A, #andmed  MOV direct, #andmed MOV @Ri0, #andmed  MOV @Ri1, #andmed  MOV R0, #andmed  MOV R1, #andmed  MOV R2, #andmed  MOV R3, #andmed  MOV R4, #andmed  MOV R5, #andmed  MOV R6, #andmed  MOV R7, #andmed 8x  SJMP suht  AJMP aadr11  ANL C, bitt  MOVC A, @A+PC DIV AB MOV direct, direct MOV direct, @Ri0 MOV direct, @Ri1 MOV direct, R0  MOV direct, R1  MOV direct, R2  MOV direct, R3  MOV direct, R4  MOV direct, R5  MOV direct, R6  MOV direct, R7 9x  MOV DPTR, #andmed16 ACALL aadr11 MOV bitt, C MOVC A, @A+DPTR SUBB A, #andmed  SUBB A, direct SUBB direct, @Ri0  SUBB direct, @Ri1  SUBB A, R0 SUBB A, R1 SUBB A, R2 SUBB A, R3 SUBB A, R4 SUBB A, R5 SUBB A, R6SUBB A, R7 Ax  ORL C, bitt  AJMP aadr11 MOV C, bitt INC DPTR  MUL AB  määramata  MOV @Ri0, direct  MOV @Ri1, direct  MOV R0, direct MOV R1, direct MOV R2, direct MOV R3, direct MOV R4, direct MOV R5, direct MOV R6, direct MOV R7, direct Bx  ANL C, bitt  ACALL aadr11 CPL bitt  CPL C  CJNE A, #andmed, suht CJNE A, direct, suht  CJNE @Ri0, #andmed, suht CJNE  @Ri1, #andmed, suht CJNE R0, #andmed, suht CJNE R1, #andmed, suht CJNE R2, #andmed, suht CJNE R3, #andmed, suht CJNE R4, #andmed, suht CJNE R5, #andmed, suht CJNE R6, #andmed, suht CJNE R7, #andmed, suht Cx  PUSH direct  AJMP aadr11 CLR bitt  CLR C  SWAP A  XCH A, direct  XCH A, @Ri0  XCH A, @Ri1  XCH A, R0  XCH A, R1 XCH A, R2  XCH A, R3  XCH A, R4  XCH A, R5  XCH A, R6  XCH A, R7 Dx  POP direct  ACALL aadr11 SETB  SETB  DA A  DJNZ direct, suht  XCHD A, @Ri0  XCHD A, @Ri1  DJNZ R0, suht  DJNZ R1, suht DJNZ R2, suht DJNZ R3, suht DJNZ R4, suht DJNZ R5, suht DJNZ R6, suht DJNZ R7, suht Ex  MOVX A,@DPTR AJMP aadr11 MOVX A, @Ri0 MOVX A, @Ri1 CLR  A MOV A, direct MOV A, @Ri0 MOV A, @Ri1 MOV A, R0 MOV A, R1 MOV A, R2 MOV A, R3 MOV A, R4 MOV A, R5 MOV A, R6  MOV A, R7 Fx  MOVX @DPTR,A ACALL aadr11 MOVX @Ri0 MOVX @Ri1 CPL A MOV direct, A MOV @Ri0 MOV @Ri1 MOV R0, A MOV R1, A MOV R2, A MOV R3, A MOV R4, A MOV R5, A MOV R6, A MOV R7, A

 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

Kategooria:Mikrokontrollerid