08 stud

background image

Programowanie mikrokontrolera 8051

background image

Asembler mikrokontrolera 8051

mnemonik [argument docelowy] , [argument źró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

background image

adresowanie pośrednie

- argumenty: @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

background image

Lista instrukcji asemblera mikrokontrolera 8051

instrukcje arytmetyczne

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

background image

ADDC A,Rr

ADDC A,direct

ADDC A,@Ri

ADDC A,#data

sumy dodawany jest bit przeniesienia C

(A)=(A)+(argument)+(C)

SUBB A,Rr

SUBB A,direct

SUBB A,@Ri

SUBB A,#data

- grupa instrukcji analogiczna do grupy ADDC, przy czym

obliczana jest różnica z pożyczką

(A)=(A)-(argument)-(C)

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

background image

podany jest w rejestrze R0 lub R1

DEC A

DEC Rr

DEC direct

DEC @Ri

- grupa analogiczna do polecenia INC, przy czym operacją

jest zmniejszenie o 1 wskazanego argumentu

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

instrukcje logiczne

background image

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

background image

danej natychmiastowej umieszczonej w drugim bajcie

instrukcji

ORL A,Rr

ORL A,direct

ORL A,@Ri

ORL A,#data

ORL direct,A

ORL direct,#data

- grupa instrukcji analogiczna do grupy instrukcji ANL, przy

czym operacją jest suma logiczna poszczególnych bitów

argumentów

A =10010111

MOV A,#10010111B

R1 =00100111

MOV R1,#00100111B

A =10110111 XRL A,R1

XRL A,Rr

XRL A,direct

XRL A,@Ri

XRL A,#data

XRL direct,A

XRL direct,#data

- grupa instrukcji analogiczna do grupy instrukcji ANL, przy

czym operacją jest różnica symetryczna poszczególnych

bitów argumentów

A =10010111

MOV A,#10010111B

R1 =00100111

MOV R1,#00100111B

A =10110000 XRL A,R1

CLR A

- zeruje akumulator

background image

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

background image

bitu przeniesienia C

SWAP A

- zamienia ze sobą miejscami tetrady akumulatora

instrukcje przesłań

MOV A,Rr

MOV A, direct

MOV A,@Ri

MOV A,#data

- kopiuje argument źródłowy do akumulatora

MOV A,R3

przed: A=13H ,

R3=AFH

po:

A=AFH,

R3=AFH

MOV A,@R0

przed: A=13H,

R0=6FH, Mem(6FH)=1FH

po:

A=1FH,

R0=6FH, Mem(6FH)=1FH

MOV Rr,A

- kopiuje argument źródłowy do rejestru pomocniczego Rr

background image

MOV Rr,direct

MOV Rr,#data

MOV direct,A

MOV direct,Rr

MOV direct,direct

MOV direct,@Ri

MOV direct,#data

- kopiuje argument źródłowy do komórki pamięci RAM

zaadresowanej bezpośrednio

MOV @Ri,#data

MOV @Ri,direct

MOV @Ri,A

- kopiuje argument źródłowy do pamięci RAM o adresie

podanym w rejestrze R0 lub R1

MOV DPTR,#d16 - kopiuje daną natychmiastową 16-bitową do rejestru DPTR

background image

MOV DPTR,#1234H

przed: DPL=00,

DPH=00

po:

DPL=34H,

DPH=12H

MOVC

A,@A+DPTR

- kopiuje do akumulatora bajt pamięci programu, przy czym

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
0100
0102
0103
0106
0109

Zawartość ROM
74 05
83
02 01 0A
01 FF 03
09

DB
X1:

Instrukcja
MOV A,#4
MOVC A,@A+PC
LJMP L1
DB 01,FFH,03
L1: NOP; A=FFH

background image

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

A,@DPTR

- kopiuje do akumulatora zawartość komórki zewnętrznej

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

@DPTR,A

- kopiuje zawartość akumulatora do komórki zewnętrznej

pamięci RAM, której adres zawarty jest w rejestrze DPTR

background image

PUSH direct

- odkłada na stosie komórkę pamięci RAM o adresie

bezpośrednim. Wskaźnik stosu SP jest inkrementowany

przed odłożeniem danej na stosie

PUSH DPH

PUSH DPL

PRZED:

SP=30H

DPTR=1234H

PO:

SP=32H

DPTR=1234H

RAM(30H)

RAM(31H)

RAM(32H)

10H

xx

xx

RAM(30H)

RAM(31H)

RAM(32H)

10H

12H

34H

background image

POP direct

- zdejmuje ze stosu daną i kopiuje ją do komórki

adresowanej bezpośrednio. Wskaźnik stosu SP jest

dekrementowany po zdjęciu danej ze stosie

POP DPL

POP DPH

PRZED:

SP=32H

DPTR=0000H

PO:

SP=30H

DPTR=1234H

RAM(30H)

RAM(31H)

RAM(32H)

10H

12H

34H

RAM(30H)

RAM(31H)

RAM(32H)

10H

12H

34H

background image

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

background image

instrukcje operacji boolowskich

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

background image

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

background image

instrukcje rozgałęzień programu

ACALL adr11 - wywołaj podprogram, którego adres znajduje się na tej

samej 2kB stronie programu

(PC)

(SP)

((SP))

(SP)

((SP))





(PC)+2

(SP)+1

(PC7-0)

(SP)+1

(PC15-8)

zapamiętanie adresu

powrotu na stosie

(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

background image

RET

- instrukcja powrotu z podprogramu

(PC15..8)

(SP)

(PC7...0)

(SP)



((SP))

(SP)-1

((SP))

(SP)-1

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

background image

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

background image

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

background image

CJNE A,direct,rel
CJNE A,#data,rel
CJNE Rr,#data,rel

CJNE

@

Ri,

#

data,rel

- porównuje zawartość pierwszego argumentu z zawartością

drugiego argumentu i jeżeli wartości te nie są takie same, to

wykonuje skok względny. Jeśli wartość argument drugiego

jest większa od wartości argumentu pierwszego to

ustawiany jest bit przeniesienia. W przeciwnym wypadku bit

przeniesienia jest kasowany

DJNZ Rr,rel

DJNZ direct,rel

- zmniejsza o 1 zawartość wskazanego argumentu i jeżeli

jest ona różna od zera to wykonuje skok względny

MOV R1,#7

L1: MOV A,@R1

...................

DJNZ R1,L1

NOP

- operacja pusta - nic nie rób przez jeden cykl

background image

tylko wybrane instrukcje modyfikują flagi rejestru statusowego

Tab. 9.1. Flagi rejestru statusowego modyfikowane przez instrukcje 8051.

Instrukcja

C

OV AC

Instrukcja

C

OV AC

ADD

X

X

X

MOV C,BIT

X

ADDC

X

X

X

SETB C

1

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


Wyszukiwarka

Podobne podstrony:
cw4 08 stud, Studia, bazy danych, LABORATORIUM I-SZY STOP
Ćwiczenia, cw2 08 stud, Zad1
cw6 08 stud, Studia, bazy danych, LABORATORIUM I-SZY STOP
materiały wprowadzenie do opieki paliatywnej stud VI lek 28 10 08
FP w 08
08 Elektrownie jądrowe obiegi
Mat dla stud 2
Wyklad 1' stud
Metabolizm kkw tł stud
archkomp 08
02a URAZY CZASZKOWO MÓZGOWE OGÓLNIE 2008 11 08
ankieta 07 08

więcej podobnych podstron