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 intellektuaalomandiga funktsiooniplokke (IP core), mida saab kasutada loogikamassiivides (nt FPGA -des).
Tehnilised omadused
MCS-51-l põhinevate mikrokontrolleriseeriate peamised tehnilised omadused:
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, 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
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:
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 ü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:
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:
Viited
Arhitektuurid
Perekonnad
4-bitised
8-bitised
16-bitised
32-bitised
Tarkvara
Vaata ka