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