Intel 8051
See artikkel vajab toimetamist. (Jaanuar 2013) |
Artiklis ei ole piisavalt viiteid. |
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
muudaMCS-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
muudaIntel 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
muudaAritmeetikakä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
muudaAndmed:
- 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)