Intel 8051

Allikas: Vikipeedia
Mikrokontroller Intel P8051
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 intellekttuaalomandiga funktsiooniplokke (IP core), mida saab kasutada loogikamassiivides (nt. FPGA-des).

Tehnilised omadused[muuda | redigeeri lähteteksti]

MCS-51-l põhinevate mikrokontrolleriseeriate peamised tehnilised omadused:

Käsustik[muuda | redigeeri lähteteksti]

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, R6 SUBB 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[muuda | redigeeri lähteteksti]

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 - Kahadada 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:

Bitinihutamise käsud:

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 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 kui ülekandelipp "Carry" on 0 - Jump if Carry Not Set
  • JNZ - Minna etteantud aadressile kui kui akuregistri sisu pole null - Jump if Accumulator Not Zero
  • JZ - Minna etteantud aadressile kui 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:

Operandide tähised tabelis[muuda | redigeeri lähteteksti]

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:

Viited[muuda | redigeeri lähteteksti]