Mikrokontroler Intel 8051

 Porównanie list rozkazów z80 i 8051

z80

Listę Rozkazów Można podzielić na 12 grup:

1.Jednobajtowe rozkazy przesłań.

2.Dwubajtowe rozkazy przesłań.

      

3.Rozkazy zamiany.

4.JednoBajtowe rozkazy Arytmetyczne

5.Rozkazy obrotów i Przesunięć

6.Dwubajtowe rozkazy arytmetyczne

7.Rozkazy przesłań i przeszukiwania bloków bajtów

8.Rokazy Sterujące stanem procesora

9.Rozkazy adresujące pojedyncze bity

10.Rozkaz Skoków

11.Rozkazy wywołań podprogramów i rozkazy powrotów.

12.rozkazy wejścia / wyjścia

      Lista Rozkazów mikrokontrolerów 51 zawiera polecenia umożliwiające przesyłanie danych, wykonywanie operacji arytmetycznych, logicznych i sterowanie wykonywaniem programu(skoki, wywołania procedur) Na szczególna uwagę zasługuje obecność znaczącej liczby instrukcji operujących na pojedynczych bitach, które w przypadku mikrokontrolerów,(stosowanie głownie w układach sterowania) sa bardzo przydatnie i często wykorzystywane. Dużym ułatwieniem z punktu widzenia tworzenia oprogramowanie jest występowanie na liście instrukcji mikrokontrolerów rodziny `51 operacja mnożenia dzielenia. Instrukcje działają tylko na 8 bitowych liczbach bez znaków jednakże w przypadków przeciętnych zastosowań mikrokontrolerów są one wystarczające. Istotnym efektem wykonywania poszczególnych instrukcji jest modyfikacja wskaźnika stanu CPU. Mikrokontrolery rodziny  51 maja 4 takie wskazniki  P, CY, AC, OV wszystkie umieszczone w rejestrze PSW. Wskaźnik parzystości P jest aktualizowany po każdej operacji natomiast wskaźniki CY,AC,OV,  przez niektóre instrukcje.  

     Zestaw rozkazów mikrokontrolera 51 został zoptymalizowany pod kątem zastosowań w układach sterujących. Rozbudowane możliwości operacji na pojedynczych bitach są cechą charakterystyczną zestawu instrukcji tego mikrokontrolera. Układ 8051 jest jednoukładowym mikrokontrolerem 8-bitowym Poszczególne rozkazy określają rodzaj wykonywanej czynności, a ich parametry precyzują obiekt (obiekty), na których czynność ta ma być wykonana, lub adres pod który ma nastąpić skok. Rozkazy mikrokontrolera 51 można podzielić na następujące grupy:

    Operacje arytmetyczne (dodawanie, odejmowanie, inkrement o 1, dekrement o 1, mnożenie i dzielenie - operacje te są wykonywane na danych 8-bitowych, przy czym operacje dodawania i odejmowania ustawiają flagę przeniesienia)  

    Operacje logiczne (iloczyn, suma, suma modulo 2, zerowanie, negowanie oraz przesunięcia w lewo i prawo wykonywane na całych bajtach oraz operacje zerowania, ustawiania bitu, negowanie, kopiowanie, suma logiczna i iloczyn logiczny wykonywane na poszczególnych bitach) Przesyłanie danych (kopiowanie danych pomiędzy wszystkimi rejestrami oraz wpisywanie do nich podanych wartości) Sterowanie pracą programu (skoki, skoki warunkowe oraz wywołania i powroty z podprogramów).

8051

1.Operacje Arytmetyczne

2.Operacje Logiczne

3.Operacje Logiczne na pojedynczych  Bitach

4.Przesyłanie Danych

5.Skoki

 

Różnice miedzy Z80 a 51

    Operacje Arytmetyczne  

Z80 nie posiada rozkazów  MUL , DIV ,

Inny zapis rozkazu SUBB,  w Z80 bez drugiego B , DA w z80 DAA

    Operacje Logiczne

Z80 nie posiada rozkazu SWAP

    Operacje Logiczne na Bitach:

Z 80 posiada inny zapis Rozkazu CLR  - RES  oraz SETB   SET  

Z80 nie Posiada rozkazów CPL , ANL, ORL, MOV,  

     Przesyłanie Danych  

Inny Zapis Rozkazu MOV , w Z80 jest LD  

Nie Posiada Rozkazów XCH , XCHD

    Skoki

Nie Posiada Rozkazów RETI ,LJMP, AJMP, SJMP, JMP, ACALL,JBC

Inny Zapisz Rozkazu JZ , w Z80 JP , w 51 od razu warunek a  potem gdzie ma skoczyć,

ACALL, LCALL w z80 CALL,

Wszystkie skoki relatywne,

    z80 posiada dodatkowo

Rozkaz  ,HALT,OUT,DI, EI, SFC, IN

Rr - rejestry R0-R7.  

direct - obszar wewnętrznej pamięci danych (128B) i rejestry SFR.  

@Ri - adres z rejestrów indeksowych R0 lub R1.  

bit - bity pamięci danych i SFR adresowalne bezpośrednio.  

#data - stała 8-bitowa.  

#data16 - stała 16-bitowa.  

addr16 - adres 16-bitowy (obszar 64kB).  

addr11 - adres 11-bitowy (w stronie 2kB).  

rel - adres względny -128...+127.  

/bit - negacja bitu.  

(n) - rozkaz wykonywany w n cyklach maszynowych. Brak oznaczenia oznacza 1 cykl.  

Operacje arytmetyczne:

ADD - dodawanie.  

Działanie: A=A+dana.  

Dozwolone argumenty: A,Rr    A,direct     A,@Ri    A,#data  

Modyfikowane znaczniki: C, AC, OV.  

ADDC - dodawanie z przeniesieniem.  

Działanie: A=A+dana+C.  

Dozwolone argumenty: A,Rr    A,direct    A,@Ri    A,#data  

Modyfikowane znaczniki: C, AC, OV.  

SUBB - odejmowanie z pożyczką.  

Działanie: A=A-dana-C.  

Dozwolone argumenty: A,Rr    A,direct    A,@Ri    A,#data  

Modyfikowane znaczniki: C, AC, OV.  

INC - inkrementacja.  

Działanie: argument=argument+1  

Dozwolone argumenty: A    Rr    direct    @Ri    DPTR(2)  

DEC - dekrementacja.  

Działanie: argument=argument-1.  

Dozwolone argumenty: A    Rr    direct    @Ri  

MUL - mnożenie liczb 8-bitowych, wynik 16-bitowy.  

Działanie: A*B, do A zapisywana młodsza część wyniku, do B starsza.  

Dozwolone argumenty: AB  

Modyfikowane znaczniki: OV, bit C zerowany.  

DIV - dzielenie liczb 8-bitowych, 8-bitowy wynik i 8-bitowa reszta.  

Działanie: A/B, A - wynik, B - reszta.  

Dozwolone argumenty: AB  

Modyfikowane znaczniki: OV, bit C zerowany.  

DA - poprawka dziesiętna.  

Działanie: wykonuje poprawkę dziesiętną liczby 8-bitowej, przekształcając ją do postaci 2 cyfr w kodzie BCD.  

Dozwolone argumenty: A  

Modyfikowane znaczniki: C.  

Operacje logiczne:  

ANL - iloczyn logiczny AND.  

Działanie: wykonuje logiczny iloczyn na odpowiednich bitach argumentów, wynik zapisuje do pierwszego argumentu.  

Dozwolone argumenty: A,Rr    A,direct    A,@Ri    A,#data    direct,A    direct,#data(2)  

ORL - suma logiczna OR.  

Działanie: wykonuje sumę logiczną odpowiednich bitów argumentów, wynik zapisuje do pierwszego argumentu.  

Dozwolone argumenty: A,Rr    A,direct    A,@Ri    A,#data    direct,A    direct,#data(2)  

XRL - suma mod 2 (XOR).  

Działanie: wykonuje sumowanie mod 2 odpowiednich bitów argumentu, wynik zapisuje do pierwszego z nich.  

Dozwolone argumenty: A,Rr    A,direct    A,@Ri    A,#data    direct,A    direct,#data(2)  

CLR - zerowanie (bajtowe).  

Działanie: zeruje wszystkie bity argumentu.  

Dozwolone argumenty: A.  

CPL - negowanie (bajtowe).  

Działanie: neguje wszystkie bity argumentu.  

Dozwolone argumenty: A.  

RL - obrót w lewo.  

Działanie: przesuwa w lewo zawartość akumulatora.  

Dozwolone argumenty: A.  

RR - obrót w prawo.  

Działanie: przesuwa w prawo zawartość akumulatora.  

Dozwolone argumenty: A.  

RLC - obrót w lewo przez C.  

Działanie: przesuwa w lewo zawartość akumulatora, na miejsce najmłodszego bitu wpisywana jest dotychczasowa zawartość bitu C, bit najstarszy jest wpisywany

jako nowa wartość C.  

Dozwolone argumenty: A.  

RRC - obrót w prawo przez C.  

Działanie: przesuwa w prawo zawartość akumulatora, na miejsce najstarszego bitu wpisywana jest dotychczasowa zawartość bitu C, bit najmłodszy jest

wpisywany jako nowa wartość C.  

Dozwolone argumenty: A.  

SWAP - zamiana 4 bitów bajtu.  

Działanie: zamienia miejscami 4 starsze i 4 młodsze bity bajtu.  

Dozwolone argumenty: A.  

Operacje logiczne na bitach:

CLR - zerowanie.  

Działanie: zeruje podany bit.  

Dozwolone argumenty: C    bit.  

SETB - ustawienie bitu.  

Działanie: przypisuje danemu bitowi wartość 1.  

Dozwolone argumenty: C    bit.  

CPL - negacja.  

Działanie: neguje podany bit.  

Dozwolone argumenty: C    bit.  

ANL(2) - iloczyn logiczny AND.  

Działanie: wykonuje iloczyn logiczny dwóch bitów, wynik zapisuje w pierwszym.  

Dozwolone argumenty: C,bit    C,/bit.  

ORL(2) - suma logiczna OR.  

Działanie: wykonuje sumę logiczną dwóch bitów, wynik zapisuje w pierwszym.  

Dozwolone argumenty: C,bit    C,/bit.  

MOV - kopiuj.  

Działanie: wpisuje do pierwszego bitu wartość zapisaną w drugim.  

Dozwolone argumenty: C,bit    bit,C(2).  

Przesyłanie danych:

MOV - kopiuj.  

Działanie: wpisuje do pierwszego operandu zawartość drugiego.  

Dozwolone argumenty: A,Rr    A,direct    A,@Ri    A,#data    Rr,A    Rr,direct(2)    Rr,#data    direct,A    direct,Rr(2)    direct,direct(2)    direct,@Ri(2)    

direct,#data(2)    @Ri,A    @Ri,direct(2)    @Ri,data    DPTR,#data16(2).  

MOVC(2) - kopiuj z pamięci programu.  

Działanie: kopiuje bajt kodu (zawartości pamięci programu).  

Dozwolone argumenty: A,@A+DPTR    A,@A+PC.  

MOVX(2) - kopiuj z/do zewnętrznej pamięci danych.  

Działanie: kopiuje bajt z/do komórki zewnętrznej pamięci danych wskazanej rejestrem indeksowym.  

Dozwolone argumenty: A,@Ri    A,@DPTR    @Ri,A    @DPTR,A.  

XCH - zamień.  

Działanie: wymienia między sobą zawartość dwóch rejestrów.  

Dozwolone argumenty: A,Rr    A,direct    A,@Ri.  

XCHD - zamień młodsze 4 bity.  

Działanie: wymienia między dwoma rejestrami zawartość ich 4 młodszych bitów.  

Dozwolone argumenty: A,@Ri.  

PUSH(2) - przesłanie bajtu na stos.  

Działanie: inkrementuje zawartość rejesru SP i kopiuje zawartość komórki pod adres wskazywany przez SP.  

Dozwolone argumenty: direct.  

 POP(2) - pobranie bajtu ze stosu.  

Działanie: kopiuje zawartość komórki wskazywanej przez SP do komórki podanej w wywołaniu i dekrementuje zawartość SP.  

Dozwolone argumenty: direct.  

    

Skoki(2):

ACALL - wywołanie podprogramu w stronie 2kB.  

Działanie: zapisuje na stos zawartość PC i wykonuje skok do adresu początku procedury.  

Dozwolone argumenty: addr11.  LCALL - wywołanie podprogramu.  

Działanie: zapisuje na stos zawartość PC i wykonuje skok do adresu początku procedury.  

Dozwolone argumenty: addr16.  

RET - powrót z procedury.  

Działanie: pobiera ze stosu zawartość licznika rozkazów i przekazuje sterowanie do znajdującego się tam adresu.  

RETI - powrót z procedury obsługi przerwania.  

Działanie: pobiera ze stosu zawartość licznika rozkazów i przekazuje sterowanie do znajdującego się tam adresu.  

LJMP - rozkaz skoku w obszarze 64kB.  

Działanie: wpisuje do licznika rozkazów podany adres.  

Dozwolone argumenty: addr16.  

AJMP - rozkaz skoku w stronie 2kB.  

Działanie: zastępuje 11 młodszych bitów PC wartością podaną w wywołaniu.  

Dozwolone argumenty: addr11.  

SJMP - rozkaz skoku w obszarze 256B.  

Działanie: następuje zmiana zawartości PC o wartość w kodzie U2 podaną w wywołaniu.  

Dozwolone argumenty: rel.  

JMP - rozkaz skoku w trybie pośrednim.  

Działanie: przepisuje do PC wartość będącą sumą zawartości rejestru indeksowego i bazowego.  

Dozwolone argumenty: @A+DPTR.  

JZ - skok warunkowy.  

Działanie: wykonuje skok, jeżeli zawartość akumulatora równa jest 0.  

Dozwolone argumenty: rel.  

JNZ - skok warunkowy.  

Działanie: wykonuje skok, jeżeli zawartość akumulatora jest różna od 0.  

Dozwolone argumenty: rel.  

JC - skok warunkowy.  

Działanie: wykonuje skok, jeżeli bit przeniesienia C jest ustawiony.  

Dozwolone argumenty: rel.  

JNC - skok warunkowy.  

Działanie: wykonuje skok, jeżeli bit przeniesienia C jest wyzerowany.  

Dozwolone argumenty: rel.  

JB - skok warunkowy.  

Działanie: wykonuje skok, jeżeli dany bit jest ustawiony.  

Dozwolone argumenty: bit,rel.  

JNB - skok warunkowy.  

Działanie: wykonuje skok, jeżeli dany bit jest wyzerowany.  

Dozwolone argumenty: bit,rel.  

JBC - skok warunkowy.  

Działanie: gdy dany bit jest ustawiony, to nastąpi skok i wyzerowanie bitu.  

Dozwolone argumenty: bit,rel.  

CJNE - skok warunkowy, zależny od wyniku porównania.  

Działanie: następuje porównanie operandów, jeżeli są różne, to następuje skok.  

Dozwolone argumenty: A,direct,rel    A,#data,rel    Rr,#data,rel    @Ri,#data,rel.  

Modyfikowane znaczniki: C (ustawiany, jeżeli pierwszy operand mniejszy od drugiego).  

DJNZ - skok warunkowy, zależny od wyniku dekrementacji.  

Działanie: następuje dekrementacja zawartości operandu, jeżeli zawartość nie osiągnęła zera, to nastąpi skok.  

Dozwolone argumenty: Rr,rel    direct,rel.  

   

   Specyficznym rozkazem nie kwalifikującym się do powyższych grup jest rozkaz NOP (jego kod binarny to 00H). Jego wykonanie nie wywołuje żadnych

efektów, zajmuje jedynie czas 1 cyklu maszynowego. Często jest on wykorzystywany jako rezerwacja miejsca pamięci przeznaczonego na późniejszą rozbudowę

programu, lub jako niewielkie (1 cykl) opóźnienie w wykonywaniu programu.