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.