Programowanie mikrokontrolera 8051
Asembler mikrokontrolera 8051
mnemonik [argument docelowy] , [argument zródłowy]
mov A , #0 ; komentarz
Tryby adresowania
adresowanie natychmiastowe
- argumenty: #data - 8 bitowa wartość, #d16 - 16bitowa wartość
mov A,#10H
mov DPTR,#1234H
adresowanie rejestrowe
- argumenty: A, B, Rr - R0 ... R7
mov A,R0
a dr esowan i e p ośr edn i e
- ar gu men ty: @DPTR, @Ri - @R0, @R1
mov A,@R0
movx A,@DPTR
adresowanie pośrednie indeksowe
- argumenty: @A+DPTR, @A+PC
movc A,@A+DPTR
movc A,@A+PC
adresowanie bezpośrednie
- argumenty: direct - adres komórki wewnętrznej pamięci RAM lub adres
SFR
mov A,DPH
adresowanie bezpośrednie bitowe
- argumenty: bit - bitowy adres komórki wewnętrznej pamięci RAM lub adres
SFR
setb ACC.4
Lista instrukcji asemblera mikrokontrolera 8051
i n stru k c je arytmetyczn e
ADD A,Rr - dodaje zawartość wskazanego rejestru R0...R7 do z
zawartości akumulatora
ADD A,direct - dodaje bajt adresowany bezpośrednio do zawartości
akumulatora
ADD A,E2H
ADD A,TH1
ADD A,@Ri - dodaje zawartość komórki pamięci RAM, której adres
umieszczony jest w rejestrze R0 lub R1 do akumulatora
ADD A,#data - dodaje wartość natychmiastową do akumulatora
ADD A,#3
- grupa instrukcji analogiczna do grupy ADD, przy czym do
ADDC A,Rr sumy dodawany jest bit przeniesienia C
ADDC A,direct (A)=(A)+(argument)+(C)
ADDC A,@Ri
ADDC A,#data
SUBB A,Rr - grupa instrukcji analogiczna do grupy ADDC, przy czym
obliczana jest ró\nica z po\yczką
SUBB A,direct
(A)=(A)-(argument)-(C)
SUBB A,@Ri
SUBB A,#data
INC A - zwiększa o 1 zawartość akumulatora
INC Rr - zwiększa o 1 zawartość rejestru Rr
INC direct - zwiększa o 1 zawartość komórki pamięci RAM adresowanej
bezpośrednio
INC A4H
INC TH0
INC @Ri - zwiększa o 1 zawartość komórki pamięci RAM, której adres
p odan y jest w r ejestr ze R0 lub R1
DEC A - grupa analogiczna do polecenia INC, przy czym operacją
jest zmniejszenie o 1 wskazanego argumentu
DEC Rr
DEC direct
DEC @Ri
INC DPTR - zwiększa o 1 zawartość 16-bitowego rejestru DPTR
MUL AB - mno\y zawartość akumulatora przez zawartość rejestru B.
Starsza część 16 bitowego wyniku umieszczana jest w
rejestrze B, a młodsza w akumulatorze
DIV AB - dzieli zawartość akumulatora przez zawartość rejestru B.
Iloraz umieszczany jest akumulatorze, a reszta z dzielenia w
rejestrze B
DA A - dokonuje korekty dziesiętnej akumulatora po operacjach
arytmetycznych w kodzie BCD
i n stru k c je l ogi czn e
ANL A,Rr - umieszcza w akumulatorze iloczyn logiczny
poszczególnych bitów rejestru Rr i odpowiednich bitów
akumulatora
A =10010111 MOV A,#10010111B
R1 =00100111 MOV R1,#00100111B
A =00000111 ANL A,R1
ANL A,direct - umieszcza w akumulatorze iloczyn logiczny
poszczególnych bitów pamięci RAM o podanym adresie i
zawartości akumulatora
ANL A,@Ri - umieszcza w akumulatorze iloczyn logiczny
poszczególnych bitów komórki pamięci RAM o adresie
podanym w rejestrze R0 lub R1 i zawartości akumulatora.
ANL A,#data - umieszcza w akumulatorze iloczyn logiczny
poszczególnych bitów danej natychmiastowej i zawartości
akumulatora
ANL direct,A - umieszcza w komórce pamięci RAM o podanym adresie
bezpośrednim iloczyn logiczny zawartości tej komórki i
zawartości akumulatora.
ANL direct,#data - umieszcza w komórce pamięci RAM o podanym adresie
bezpośrednim iloczyn logiczny zawartości tej komórki i
dan ej n atychmiastowej u mi eszczon ej w dr u gim b ajci e
i nstru k cji
ORL A,Rr - grupa instrukcji analogiczna do grupy instrukcji ANL, przy
czym operacją jest suma logiczna poszczególnych bitów
ORL A,direct
argumentów
ORL A,@Ri
A =10010111 MOV A,#10010111B
ORL A,#data
R1 =00100111 MOV R1,#00100111B
ORL direct,A
A =10110111 XRL A,R1
ORL direct,#data
XRL A,Rr - grupa instrukcji analogiczna do grupy instrukcji ANL, przy
czym operacją jest ró\nica symetryczna poszczególnych
XRL A,direct
bitów argumentów
XRL A,@Ri
A =10010111 MOV A,#10010111B
XRL A,#data
R1 =00100111 MOV R1,#00100111B
XRL direct,A
A =10110000 XRL A,R1
XRL direct,#data
CLR A - zeruje akumulator
CPL A - neguje wszystkie bity akumulatora
RL A - przesuwa akumulator w lewo o 1 bit
RLC A - przesuwa akumulator w lewo o 1 bit z uwzględnieniem bitu
przeniesienia C
RR A
- przesuwa akumulator w prawo o 1 bit
RRC A - przesuwa akumulator w prawo o 1 bit z uwzględnieniem
bi tu p r zen iesi eni a C
SWAP A - zamienia ze sobą miejscami tetrady akumulatora
i n stru k c je p r zesłań
MOV A,Rr - kopiuje argument zródłowy do akumulatora
MOV A, direct MOV A,R3
przed: A=13H , R3=AFH
MOV A,@Ri
po: A=AFH, R3=AFH
MOV A,#data
MOV A,@R0
przed: A=13H, R0=6FH, Mem(6FH)=1FH
po: A=1FH, R0=6FH, Mem(6FH)=1FH
MOV Rr,A - kopiuje argument zródłowy do rejestru pomocniczego Rr
MOV Rr,direct
MOV Rr,#data
MOV direct,A - kopiuje argument zródłowy do komórki pamięci RAM
zaadresowanej bezpośrednio
MOV direct,Rr
MOV direct,direct
MOV direct,@Ri
MOV direct,#data
MOV @Ri,#data - kopiuje argument zródłowy do pamięci RAM o adresie
podanym w rejestrze R0 lub R1
MOV @Ri,direct
MOV @Ri,A
MOV DPTR,#d16 - kopiuje daną natychmiastową 16-bitową do rejestru DPTR
MOV DPTR,#1234H
przed: DPL=00, DPH=00
po: DPL=34H, DPH=12H
MOVC
- kopiuje do akumulatora bajt pamięci programu, przy czym
A,@A+DPTR
jego adres obliczany jest jako suma zawartości rejestru
DPTR z zawartością podaną w akumulatorze
przed: A=00H, DPTR=311H, EPROM(312H)=22H
po: A=22H, DPTR=311H EPROM(312H)=22H
MOVC A,@A+PC - kopiuje do akumulatora bajt pamięci programu, przy czym
jego adres obliczany jest jako suma zawartości licznika
rozkazów PC z zawartością podaną w akumulatorze
Adr. ROM Zawartość ROM Instrukcja
0100 74 05 MOV A,#4
0102 83 MOVC A,@A+PC
0103 02 01 0A LJMP L1
0106 01 FF 03 DDB 01,FFH,03
B
0109 09 X11: NOP; A=FFH
L :
MOVX A,@Ri - kopiuje do akumulatora zawartość komórki zewnętrznej
pamięci RAM, której adres zawarty jest w rejestrze R0 lub
R1. Instrukcją mo\na zaadresować obszar 256 bajtów
zewnętrznej pamięci RAM
MOVX - kopiuje do akumulatora zawartość komórki zewnętrznej
A,@DPTR pamięci RAM, której adres zawarty jest w rejestrze DPTR
MOV DPTR,#1234H
MOVX A,@DPTR
przed: A=01H, RAMX(1234H)=7EH
po: A=7EH, RAMX(1234H)=7EH
MOVX @Ri,A - kopiuje zawartość akumulatora do komórki zewnętrznej
pamięci RAM, której adres zawarty jest rejestrze R0 lub R1.
Instrukcją mo\na zaadresować obszar 256 bajtów
zewnętrznej pamięci RAM
MOVX - kopiuje zawartość akumulatora do komórki zewnętrznej
@DPTR,A pamięci RAM, której adres zawarty jest w rejestrze DPTR
PUSH direct - odkłada na stosie komórkę pamięci RAM o adresie
bezpośrednim. Wskaznik stosu SP jest inkrementowany
przed odło\eniem danej na stosie
PUSH DPH
PUSH DPL
PRZED: PO:
SP=30H SP=32H
DPTR=1234H DPTR=1234H
RAM(30H) 10H RAM(30H) 10H
RAM(31H) xx RAM(31H) 12H
RAM(32H) xx RAM(32H) 34H
POP direct - zdejmuje ze stosu daną i kopiuje ją do komórki
adresowanej bezpośrednio. Wskaznik stosu SP jest
dekrementowany po zdjęciu danej ze stosie
POP DPL
POP DPH
PRZED: PO:
SP=32H SP=30H
DPTR=0000H DPTR=1234H
RAM(30H) 10H RAM(30H) 10H
RAM(31H) 12H RAM(31H) 12H
RAM(32H) 34H RAM(32H) 34H
XCH A,Rr - zamienia miejscami zawartości akumulatora i rejestru Rr
XCH A,R1
przed: A=01H, R1=7FH
po: A=7FH, R1=01H
XCH A,direct - zamienia zawartości akumulatora i komórki pamięci RAM
adresowanej bezpośrednio
XCH A,@Ri - zamienia zawartości akumulatora i komórki pamięci RAM,
której adres podano w rejestrze R0 lub R1
XCHD A,@Ri - zamienia młodsze tetrady akumulatora i komórki pamięci
RAM, o adresie podanym w rejestrze R0 lub R1
XCHD A,@R1
przed: A=01H, R1=30H RAM(30H)=7FH
po: A=0FH, R1=30H RAM(30H)=71H
i n stru k c je op eracji boolowsk i c h
CLR C - zeruje bit przeniesienia C
CLR bit - zeruje bit adresowany bezpośrednio
CLR 11H
CLR ACC.5
SETB C - ustawia bit przeniesienia C
SETB bit - ustawia bit adresowany bezpośrednio
CPL C - neguje bit przeniesienia C
CPL bit - neguje bit adresowany bezpośrednio
ANL C,bit - umieść w bicie przeniesienia wynik operacji iloczynu
logicznego C i bitu adresowanego bezpośrednio
ANL C,ACC.1
przed: C=1, ACC.1=0
po: C=0, ACC.1=0
ANL C,/bit - umieść w bicie przeniesienia wynik operacji iloczynu
logicznego C i negacji bitu adresowanego bezpośrednio
ORL C,bit - umieść w bicie przeniesienia wynik operacji sumy logicznej
C i bitu adresowanego bezpośrednio
ORL C,/bit - umieść w bicie przeniesienia wynik operacji sumy logicznej
C i negacji bitu adresowanego bezpośrednio
MOV C,bit - kopiuje bit adresowany bezpośrednio do bitu przeniesienia
MOV bit,C - kopiuje bit przeniesienia do bitu adresowanego
bezpośrednio
i n stru k c je rozgałęzi eń p rogramu
ACALL adr11 - wywołaj podprogram, którego adres znajduje się na tej
samej 2kB stronie programu
(PC) (PC)+2
!
(SP) (SP)+1
!
((SP)) (PC7-0) zapamiętanie adresu
!
powrotu na stosie
(SP)
(SP)+1
!
((SP))
(PC15-8)
!
(PC10-0) adr 11 wpisanie do PC
!
adresu podprogramu
MOV A,#1
ACALL PROC
MOV R1,A
.....
PROC:
MOV R1,A
MOV A,@R1
RET
RET - instrukcja powrotu z podprogramu
(PC ) ((SP))
15..8 !
(SP)-1
(SP)
!
((SP))
(PC )
7...0
!
(SP)-1
(SP)
!
RETI - instrukcja powrotu z procedury obsługi przerwania
AJMP adr11 - wykonuje skok bezwarunkowy pod adres znajdujący się na
tej samej stronie 2KB
(PC10..0) ! adr10..0
(PC15..11) - bez zmian
LJMP adr16 - wykonuje skok bezwarunkowy w dowolne miejsce
programu
(PC) ! adr15...0
SJMP rel - wykonuje skok bezwarunkowy krótki (-128B...+127B).
Adres skoku obliczany jest jako PC+rel
JMP @A+DPTR - wykonuje skok pod adres obliczony jako suma wartości
rejestru DPTR i akumulatora
MOV DPTR,#TAB
JMP @A+DPTR
TAB: AJMP L0
AJMP L1
AJMP L2
JZ rel - wykonuje skok względny jeśli wartość akumulatora równa
się zero
JNZ rel - wykonuje skok względny jeśli wartość akumulatora ró\na
jest od zera
JC rel - wykonuje skok względny jeśli wartość bitu przeniesienia
równa się jeden
JNC rel - wykonuje skok względny jeśli wartość bitu przeniesienia
równa się zero
JB bit,rel - wykonuje skok względny jeśli wartość testowanego bitu
równa się jeden
MOV A,R1
JB ACC.0,L1
MOV R1,#0
L1: MOV A,R0
JNB bit,rel - wykonuje skok względny jeśli wartość testowanego bitu
równa się jzero
JBC bit,rel - wykonuje skok względny jeśli wartość testowanego bitu
równa się jeden i kasuje go
CJNE A,direct,rel
- p or ówn u je zawar tość p i er wszego ar gu men tu z za wartością
dr u gi ego ar gumen tu i je\el i war tości te ni e są tak i e same, to
CJNE A,#data,rel
wyk on uje sk ok względn y. Jeśli wartość argument drugiego
CJNE Rr,#data,rel
jest większa od wartości argumentu pierwszego to
ustawiany jest bit przeniesienia. W przeciwnym wypadku bit
CJNE @Ri,#data,rel
przeniesienia jest kasowany
DJNZ Rr,rel - zmniejsza o 1 zawartość wskazanego argumentu i je\eli
jest ona ró\na od zera to wykonuje skok względny
DJNZ direct,rel
MOV R1,#7
L1: MOV A,@R1
...................
DJNZ R1,L1
NOP - operacja pusta - nic nie rób przez jeden cykl
tyl k o wybr an e i n str uk cje modyfi k ują fl agi r ejestr u statu sowego
Instrukcja C OV AC Instrukcja C OV AC
ADD X X X X
MOV C, BIT
ADDC X X X 1
SETB C
SUBB X X X CLR C 0
MUL 0 X CPL C X
DIV 0 X ANL C, BIT X
RLC X ANL C, /BIT X
RRC X ORL C, BIT X
DA X ORL C, /BIT X
CJNE X
Tab. 9 . 1. Flagi rejestru statusowego modyfikowane przez instrukcje 8051.
Wyszukiwarka
Podobne podstrony:
materiały wprowadzenie do opieki paliatywnej stud VI lek( 10 08TI 99 08 19 B M pl(1)ei 05 08 s029Wyklad 2 PNOP 08 9 zaoczneEgzamin 08 zbior zadan i pytanniezbednik wychowawcy, pedagoga i psychologa 08 4 (1)Kallysten Po wyjęciu z pudełka 0808 Inflacjawięcej podobnych podstron