Lista instrukcji mikrokontrolerów 8051
[edytuj] ACALL <adres_11-bitowy>
Funkcja: Bezwzględne wywołanie procedury
Opis: ACALL powoduje wywołanie procedury rozpoczynającej się pod podanym adresem bezwzględnym. Wykonanie instrukcji powoduje dwukrotną inkrementacją licznika rozkazów, tak by zawierał on adres następnej instrukcji, następnie umieszczenie obu bajtów licznika rozkazów na stosie (najpierw młodszy bajt) i zwiększenie wartości wskaźnika stosu o dwa. Adres wywoływanej procedury otrzymywany jest przez połączenie bitów 7-5 pierwszego bajtu kodu instrukcji i całego drugiego bajtu kodu instrukcji. W związku z tym, wywoływana procedura musi się rozpoczynać w obrębie tej samej 2K-bajtowej strony, w której znajduje się pierwszy bajt instrukcji następującej bezpośrednio po wykonywanej instrukcji ACALL. Wykonanie operacji nie zmienia stanu żadnego ze wskaźników.
Przykład: Początkowy stan wskaźnika SP jest równy
07H. Etykieta "SUBR" oznacza pamięć programu o adresie
0345H. Po wykonaniu instrukcji ACALL SUBR umieszczonej pod
adresem 0123H, wskaźnik SP będzie zawierał 09H, bajty wewnętrznej
pamięci RAM o adresach 08H i 09H będą zawierały odpowiednio 25H i
01H, a licznik rozkazów przyjmie wartość 0345H.
- Operacja ACALL
- PC := PC + 2
- SP := SP + 1
- [SP] := PC7-0
- SP := SP + 1
- [SP] := PC15-8
- PC10-0 := adr10-0;(adres w obszarze bieżącej strony)
- Liczba cykli: 2 Liczba bajtów: 2
[edytuj] ADD A, <bajt_źródłowy>
Funkcja: Dodawanie
Opis: ADD powoduje dodanie zawartości wskazanej zmiennej i akumulatora i pozostawia wynik operacji w akumulatorze. Wskaźnik przeniesienia i pomocniczy wskaźnik przeniesienia są ustawiane, jeśli nastąpiło przeniesienie odpowiednio z 7 lub 3 bitu. W przeciwnym razie (brak przeniesienia) wskaźniki są zerowane. W przypadku dodawania liczb bez znaku wskaźnik przeniesienia funkcjonuje jako wskaźnik przepełnienia. Bit OV ustawiany jest tylko wtedy, gdy wystąpiło przeniesienie z bitu 6, przy braku przeniesienia z bitu 7 lub gdy wystąpiło przeniesienie z bitu 7 przy braku przeniesienia z bitu 6. W pozostałych przypadkach OV jest zerowany. Jeśli dodawane są liczby ze znakiem, OV sygnalizuje otrzymanie dodatniego wyniku przy dodawaniu dwóch liczb ujemnych, bądź ujemnego wyniku przy dodawaniu dwóch liczb dodatnich. Do adresowania operandu źródłowego można wykorzysta jeden z następujących trybów adresowania: rejestrowe, bezpośrednie, pośrednie zawartością rejestru lub natychmiastowe.
Przykład: Akumulator zawiera 0C3H (11000011B), a rejestr R0 zawiera 0AAH (10101010B). Instrukcja ADD A, R0 pozostawi w akumulatorze wartość 6DH (01101101B), wyzeruje pomocniczy wskaźnik przeniesienia AC i spowoduje ustawienie wskaźnika przeniesienia CY oraz bitu OV.
- ADD A,Rn
- Operacja: ADD
- A := A + Rn
- Liczba cykli: 1 Liczba bajtów: 1
- ADD A, direct
- Operacja : ADD
- A :=A + (direct)
- Liczba cykli : 1 Liczba bajtów : 2
- ADD A, @Ri
- Operacja : ADD
- A := A + [Ri]
- Liczba cykli : 1 Liczba bajtów : 1
- ADD A, #data
- Operacja : ADD
- A := A + data
- Liczba cykli : 1 Liczba bajtów : 2
[edytuj] ADDC A, <bajt_źródłowy>
Funkcja: Dodawanie z przeniesieniem
Opis: ADDC powoduje dodanie zawartości wskazanej zmiennej, akumulatora oraz bitu przeniesienia i pozostawia wynik operacji w akumulatorze. Wskaźnik przeniesienia i pomocniczy wskaźnik przeniesienia są ustawiane, jeśli nastąpiło przeniesienie odpowiednio z 7 lub 3 bitu w przeciwnym razie (brak przeniesienia) wskaźniki są zerowane. W przypadku dodawania liczb bez znaku wskaźnik przeniesienia funkcjonuje jako wskaźnik przepełnienia. Bit OV ustawiany jest tylko wtedy, gdy wystąpiło przeniesienie z bitu 6 przy braku przeniesienia z bitu 7 lub gdy wystąpiło przeniesienie z bitu 7, przy braku przeniesienia z bitu 6. W pozostałych przypadkach OV jest zerowany. Jeśli dodawane są liczby ze znakiem, OV sygnalizuje otrzymanie dodatniego wyniku przy dodawaniu dwóch liczb ujemnych, bądź ujemnego wyniku przy dodawaniu dwóch liczb dodatnich. Do adresowania operandu źródłowego można wykorzysta jeden z następujących trybów adresowania: rejestrowe, bezpośrednie, pośrednie zawartością rejestru lub natychmiastowe.
Przykład: Akumulator zawiera 0C3H (11000011B), rejestr R0 zawiera 0AAH (10101010B), a wskaźnik przeniesienia jest ustawiony. Instrukcja ADDC A, R0 pozostawi w akumulatorze wartość 6EH (01101110B), wyzeruje pomocniczy wskaźnik przeniesienia AC i spowoduje ustawienie wskaźnika przeniesienia CY oraz bitu OV.
- ADDC A, Rn
- Operacja : ADDC
- A := A + Rn + CY
- Liczba cykli: 1 Liczba bajtów: 1
- ADDC A, direct
- Operacja : ADDC
- A := A + (direct) + CY
- Liczba cykli: 1 Liczba bajtów: 2
- ADDC A, @Ri
- Operacja : ADDC
- A := A + [Ri] + CY
- Liczba cykli: 1 Liczba bajtów: 1
- ADDC A, #data
- Operacja ADDC
- A := A + data + CY
- Liczba cykli: 1 Liczba bajtów: 2
[edytuj] AJMP <adres_11-bitowy>
Funkcja: Skok bezwzględny
Opis: AJMP powoduje przeniesienie wykonywania programu pod podany adres bezwzględny. Wykonanie instrukcji powoduje przyjęcie przez licznik rozkazów wartości otrzymanej przez połączenie pięciu najstarszych bitów licznika rozkazów, bitów 7-5 pierwszego bajtu kodu instrukcji i całego drugiego bajtu kodu instrukcji. W związku z tym miejsce, do którego wykonywany jest skok musi się znaleźć w obrębie tej samej 2K-bajtowej strony, w której znajduje się pierwszy bajt instrukcji następującej bezpośrednio po wykonywanej instrukcji AJMP. Wykonanie operacji nie zmienia stanu żadnego ze wskaźników.
Przykład: Etykieta "JMPADR" oznacza pamięć programu o adresie 0345H. Po wykonaniu instrukcji AJMP JMPADR umieszczonej pod adresem 0123H licznik rozkazów przyjmie wartość 0345H.
- Operacja : AJMP
- PC := PC + 2
- PC10-0 := adr10-0 (adres w obszarze bieżącej strony)
- Liczba cykli: 2 Liczba bajtów: 2
[edytuj] ANL <bajt_przeznaczenia>, <bajt_źródłowy>
Funkcja: Logiczna funkcja AND dwóch zmiennych
Opis: ANL wykonuje bitowy iloczyn logiczny dwóch wskazanych zmiennych bajtowych (każdy bajt traktowany jest jako zbiór ośmiu bitów). Wynik operacji umieszczany jest w pierwszej z wymienionych zmiennych. Wykonanie operacji nie zmienia stanu żadnego ze wskaźników. Możliwych jest 6 różnych kombinacji adresowania dla dwóch używanych przez instrukcję operandów. Jeśli miejscem przeznaczenia wyniku jest akumulator, to zmienna źródłowa może by adresowana w trybie rejestrowym, bezpośrednim, pośrednim (zawartości rejestru) lub natychmiastowym. Jeśli miejsce przeznaczenia wyniku jest adresowane bezpośrednio, to zmienna źródłowa może by akumulatorem lub zmienną adresowaną w trybie natychmiastowym.
Uwaga: jeśli instrukcja jest wykorzystywana do zmiany stanu linii portu, to wartością użytą jako pierwotny stan portu będzie wartość odczytana z rejestru wyjściowego portu, a nie rzeczywisty stan wyprowadzeń portu.
Przykład: Jeśli akumulator zawiera 0C3H (11000011B), rejestr R0 zawiera 0AAH (10101010B), to instrukcja ANL A, R0 pozostawi w akumulatorze wartość 82H (10000010B). Instrukcję można wykorzystywać do wyzerowania bitów wybranego bajtu wewnętrznej pamięci RAM lub rejestru, jeśli miejscem przeznaczenia wyniku jest bajt adresowany bezpośrednio. Maska określająca, które bity będą zerowane jest wówczas stałą wyszczególnioną w instrukcji lub zawartości akumulatora (zwykle uzyskaną z poprzedzających instrukcję obliczeń). Instrukcja ANL P1,#01110111B spowoduje wyzerowanie bitów 7 i 3 portu P1.
- ANL A, Rn
- Operacja : ANL
- A := A and Rn
- Liczba cykli : 1 Liczba bajtów : 1
- ANL A, direct
- Operacja : ANL
- A := A and (direct)
- Liczba cykli : 1 Liczba bajtów : 2
- ANL A, @Ri
- Operacja : ANL
- A := A and [Ri]
- Liczba cykli : 1 Liczba bajtów : 1
- ANL A, #data
- Operacja : ANL
- A := A and data
- Liczba cykli : 1 Liczba bajtów : 2
- ANL direct, A
- Operacja : ANL
- (direct) := A and (direct)
- Liczba cykli : 1 Liczba bajtów : 2
- ANL direct, #data
- Operacja : ANL
- (direct) := (direct) and data
- liczba cykli : 2 Liczba bajtów : 3
[edytuj] ANL C, <bit_źródłowy>
Funkcja: Logiczna funkcja AND zmiennych bitowych
Opis: Instrukcja zeruje wskaźnik przeniesienia, jeśli
wartość bitu będącego drugim z podanych operandów jest
zerem. W przeciwnym razie stan wskaźnika przeniesienia pozostaje bez
zmian. Operacja nie zmienia stanu pozostałych wskaźników.
Jeśli drugi z operandów jest poprzedzony kreską ukośną
"/". to do wykonania operacji używana jest zanegowana wartość wskazanego bitu (stan bitu źródłowego nie ulega jednak
zmianie). Operandami źródłowymi mogą być tylko bity
adresowalne bezpośrednio.
Przykład: Wykonanie ciągu instrukcji
MOV C, P 1.0 ; przesłanie stanu wyprowadzenia portu do wskaźnika przeniesienia ANL C, ACC.7 ; iloczyn logiczny wskaźnika przeniesienia z bitem 7 akumulatora ANL C, /OV ; iloczyn logiczny wskaźnika przeniesienia z negacją wskaźnika OV
spowoduje ustawienie wskaźnika przeniesienia tylko wtedy, gdy P1.0= 1, ACC.7=1 oraz OV=0.
- ANL C, bit
- Operacja : ANL
- CY := CY ^ (bit)
- Liczba cykli : 2 Liczba bajtów : 2
- ANL C, /bit
- Operacja ANL
- CY := CY ^ ~(bit)
- Liczba cykli : 2 Liczba bajtów : 2
[edytuj] CJNE <bajt_przeznaczenia>, <bajt_źródłowy>, <adres_względny>
Funkcja: Porównanie i skok jeśli różne
Opis: CJNE porównuje wartości dwóch pierwszych operandów i wykonuje skok jeśli są one różne. Wartość adresu, do którego wykonywany jest skok, obliczana jest przez dodanie przesunięcia (ostatniego z operandów będącego 8-bitową liczbą ze znakiem) do zawartości licznika rozkazów, po uprzednim zwiększeniu zawartości licznika rozkazów tak, by wskazywał on instrukcję znajdującą się za wykonywaną instrukcją CJNE. Jeśli <bajt_przeznaczenia> traktowany jako liczba bez znaku jest mniejszy niż analogicznie interpretowany <bajt źródłowy>, to wskaźnik przeniesienia jest ustawiany. W przeciwnym razie (odwrotny wynik porównania) bit przeniesienia jest zerowany. Żaden z operandów nie ulega zmianie. Możliwe są cztery różne kombinacje adresowania pierwszych dwóch operandów: operacja może porównywać zawartość akumulatora z dowolnym bajtem adresowanym bezpośrednio lub natychmiastowo, lub przeprowadza porównanie rejestru roboczego lub pośrednio adresowanego bajtu pamięci RAM z argumentem adresowanym w trybie natychmiastowym (stałą).
Przykład: Akumulator zawiera 34H. Rejestr R7 zawiera 56H.
Pierwsza instrukcja w sekwencji:
CJNE R7, #60H, NOT_EQ ...; R7=60H NOT_EQ : JC REQJLOW ; skok jeśli R7 < 60H ;... R7 > 60H
ustawi wskaźnik przeniesienia i spowoduje skok do adresu oznaczonego etykiet NOT_EQ. Znajdująca się tam instrukcja, testująca stan wskaźnika przeniesienia, określi czy zawartość R7 jest większa, czy mniejsza niż 60H.
Jeśli stan wyprowadzeń portu P1 także stanowi wartość 34H, to instrukcja
WAIT: CJNE A, P1, WAIT
wyzeruje bit przeniesienia i przejdzie do wykonania kolejnej instrukcji jako, że stan portu P1 i akumulatora są identyczne. Jeśli stan wyprowadzeń portu P1 będzie różny od 34H, to program będzie powtarzalną pętlą zawierającą instrukcję z etykiet WAIT tak długo, aż stan wyprowadzeń portu przyjmie wartość 34H.
- CJNE A, direct, rel
- Operacja : CJNE
- PC := PC + 3
- IF A <> (direct) THEN
- PC := PC + rel
- IF A < (direct) THEN
- CY := 1
- ELSE
- CY := 0
- Liczba cykli : 2 Liczba bajtów : 3
- CJNE A, #data, rel
- Operacja : CJNE
- PC := PC + 3
- IF A <> data THEN
- PC := PC + rel
- IF A < data THEN
- CY := 1
- ELSE
- CY := 0
- Liczba cykli : 2 Liczba bajtów : 3
- CJNE Rn, #data, rel
- Operacja : CJNE
- PC := PC + 3
- IF Rn <> data THEN
- PC := PC + rel
- IF Rn < data THEN
- CY := 1
- ELSE
- CY := 0
- Liczba cykli : 2 Liczba bajtów : 3
- CJNE @Ri, #data, rel
- Operacja : CJNE
- PC := PC + 3
- IF [Ri] <> data THEN
- PC := PC + rel
- IF [Ri] < data THEN
- CY := 1
- ELSE
- CY := 0
- Liczba cykli : 2 Liczba bajtów : 3
[edytuj] CLR A
Funkcja: Zerowanie akumulatora
Opis: Akumulator jest zerowany - wszystkie bity przyjmują stan 0. Żaden ze wskaźników nie ulega zmianie.
Przykład: Akumulator zawiera 5CH (01011100B). Instrukcja CLR A spowoduje przyjęcie przez akumulator stanu 00H (00000000B).
- Operacja: CLR
- A := 0
- Liczba cykli: 1 Liczba bajtów: 1
[edytuj] CLR <bit>
Funkcja: Zerowanie bitu
Opis: Wskazany bit jest zerowany. Żaden ze wskaźników nie ulega zmianie. Instrukcja może być przeprowadzona wyłącznie na wskaźniku przeniesienia lub dowolnym bicie adresowalnym bezpośrednio.
Przykład: Rejestr portu P1 zawiera 5DH (01011101B). Instrukcja CLR P1.2 spowoduje zmianę zawartości rejestru portu na 59H (01011001B).
- CLR C
- Operacja: CLR
- CY := 0
- Liczba cykli : 1 Liczba bajtów: 1
- CLR bit
- Operacja: CLR
- (bit) := 0
- Liczba cykli : 1 Liczba bajtów : 2
[edytuj] CPL A
Funkcja: Negacja zawartości akumulatora
Opis: Wszystkie bity akumulatora zmieniają swój stan. Bity zawierające zera są ustawiane i odwrotnie. Żaden ze wskaźników nie ulega zmianie.
Przykład: Akumulator zawiera 5CH (01011100B). Instrukcja CPL A spowoduje przyjęcie przez akumulator stanu 0A3H (10100011B).
- Operacja: CPL
- A := A xor 0FFH
- Liczba cykli: 1 Liczba bajtów: 1
[edytuj] CPL <bit>
Funkcja: Zanegowanie bitu
Opis: Wskazany bit jest negowany. Żaden ze wskaźników nie ulega zmianie. Instrukcja może by przeprowadzona wyłącznie na wskaźniku przeniesienia lub dowolnym bicie adresowalnym bezpośrednio.
Uwaga: jeśli instrukcja jest używana do zmiany stanu wyprowadzenia portu, to stan Początkowy negowanego bitu ustalany jest na podstawie wartości wpisanej do rejestru wyjściowego portu, a nie stanu wyprowadzenia mikrokontrolera.
Przykład: Rejestr portu P1 zawiera 5DH
(01011101B). Instrukcje
CPL P1.1
CPL P1.2
spowoduj zmian
zawartości rejestru portu na 5BH (01011011B).
CPL C
Operacja:
CPL
CY := ~ CY
Liczba cykli: 1 Liczba bajtów: 1
CPL bit
Operacja : CPL
(bit) := ~ (bit)
Liczba cykli : 1
Liczba bajtów : 2
[edytuj] DA A
Funkcja: Poprawka dziesiętna po dodawaniu
Opis: DA A koryguje zawartość akumulatora, będąc wynikiem dodawania dwóch zmiennych (ka da w postaci upakowanej liczby BCD), daj c w wyniku bajt zawierający dwie cyfry dziesiętne. Do dodawania przed wykonaniem poprawki dziesiętnej może by wykorzystana dowolna z instrukcji ADD lub ADDC. jeśli wartość zakodowana na czterech młodszych bitach akumulatora jest większa od 9 lub ustawiony jest wskaźnik przeniesienia pomocniczego AC, to do zawartości akumulatora dodawana jest liczba 6. Daje to w wyniku poprawną posta czterech młodszych bitów akumulatora, a ponadto ustawia wskaźnik przeniesienia, jeśli w wyniku dodania 6 przeniesienie wystąpiło (jeśli jednak dodawanie pomocnicze nie wywołało przeniesienia, to stan bitu CY nie ulega zmianie).jeśli po wykonaniu opisanej wy ej operacji bit przeniesienia jest ustawiony lub wartość zakodowana na czterech starszych bitach akumulatora przekracza 9, to do starszej polówki akumulatora dodawane jest 6. I analogicznie jak poprzednio, daje to poprawną postać czterech starszych bitów akumulatora, a ponadto ustawia wskaźnik przeniesienia, jeśli w wyniku dodania 6 przeniesienie wystąpiło (jeśli jednak dodawanie pomocnicze nie wywołało przeniesienia, to stan bitu CY nie ulega zmianie). Ostatecznie wskaźnik przeniesienia sygnalizuje wynik powyżej 99 i umożliwia tym samym realizację dodawania dziesiętnego wielokrotnej precyzji. Stan wskaźnika OV nie ulega zmianie. Wszystkie opisane operacje wykonywane są w ciągu jednego cyklu maszynowego. W praktyce realizacja poprawki dziesiętnej sprowadza się do dodania do akumulatora wartości OOH, 06H, 60H lub 66H, w zależności od początkowego stanu akumulatora i rejestru PSW.
Uwaga: Operacja poprawki dziesiętnej nie wykonuje zwykłego przekształcenia liczby szesnastkowej na posta BCD. me ma te zastosowania do operacji inkrementacji, ani odejmowania liczbę dziesiętną.
Przykład: Akumulator
zawiera wartość 56H (01010110B), co stanowi reprezentację BCD
dziesiętnej liczby 56. Rejestr R3 zawiera 67H (01100111B), co
stanowi reprezentację BCD
dziesiętnej liczby 67. wskaźnik
przeniesienia jest ustawiony. Sekwencja operacji
ADDC A, R3
DA
A
spowoduje najpierw wykonanie zwykłego dodawania w uzupełnieniu
do dwóch, dającego w
akumulatorze wynik 0BEH (10111 110B).
wskaźniki
przeniesienia i przeniesienia pomocniczego zostaną w
rezultacie tego dodawania
wyzerowane. Wykonanie wówczas
poprawki dziesiętnej
zmieni stan akumulatora na 24H (00100100B),
reprezentujący dwie młodsze cyfry wyniku
dodawania liczb 56, 67 i
przeniesienia. Poprawka
dziesiętna spowoduje tez. ustawienie bitu
przeniesienia, sygnalizującą przepełnienie dziesiętne.
Suma liczb
56. 67 i l jest równa 124.
zmienne bajtowe w kodzie RCD
mogą być inkrementowane lub dekrementowane przez
dodanie
odpowiednio liczb 01H lub 99H. jeśli
początkowo akumulator
zawiera 30H (reprezentacja BCD liczby 30), to sekwencja instrukcji
ADD A. #99H
DA A
ustawi wskaźnik przeniesienia i
pozostawi w akumulatorze liczb 29H, jako ze 30+99=129.
Ignoruj c
bit przeniesienia uzyskuje się 30-1=29.
Operacja: DA
IF (A3-0 >
9) OR (AC = 1) THEN
A3-0 := A3-0 + 6
IF (A7-4 > 9) OR (CY
= 1) THEN
A7-4 := A7-4 + 6
Liczba cykli : 1 Liczba bajtów
- 1
[edytuj] DEC <bajt>
Funkcja: Dekrementacja
Opis: Wskazany bajt jest dekrementowany o 1. Jeśli początkową wartością jest 00h, to wynikiem operacji jest 0FFh. Stan żadnego ze wskaźników nie ulega zmianie. Operandem może być bajt adresowany bezpośrednio, pośrednio zawartością rejestru, akumulator lub rejestr roboczy.
Uwaga: Jeśli instrukcja wykorzystywana jest do zmiany stanu portu, to wartością dekrementowaną jest zawartość rejestru wyjściowego portu, a nie stan linii portu.
Przykład: Rejestr R0 zawiera 7FH (01111111
B). Bajty wewnętrznej pamięci RAM o adresach 7EH i 7FH zawierają
odpowiednio 00H i 40H. Sekwencja instrukcji:
DEC @R0
DEC R0
DEC @R0
spowoduje przyjęcie przez rejestr R0 wartości 7EH i
nadanie bajtom wewnętrznej pamięci RAM o adresach 7EH i 7FH
odpowiednio wartości 0FFH i 3FH.
DEC A
A := A - 1
Liczba cykli: 1 Liczba bajtów: 1
DEC Rn
Rn := Rn - 1
Liczba cykli: 1 Liczba bajtów: 1
DEC direct
(direct) := (direct) - 1
Liczba cykli: 1 Liczba bajtów: 2
DEC @Ri
[Ri] := [Ri] - 1
Liczba cykli: 1 Liczba bajtów: 1
[edytuj] DIV AB
Funkcja: Dzielenie całkowite
Opis: DIV A dzieli 8-bitów
liczb bez znaku umieszczoną w akumulatorze przez 8-bitów
liczb bez znaku znajdującą się w rejestrze B. Po wykonaniu
operacji akumulator zawiera
iloraz, a rejestr B reszt z dzielenia
całkowitego. wskaźniki CY oraz OV s zerowane.
Wyj tek:
jeśli przed wykonaniem operacji w rejestrze B znajdowała się liczba
00H, to wynik
dzielenia (stan rejestrów A i B) jest
nieokreślony, natomiast wykonanie instrukcji spowoduje
ustawienie
wskaźnika OV. Tak czy inaczej wskaźnik przeniesienia będzie zerowany.
Przykład: Akumulator zawiera 251 (OFBH, czyli 11111011B),
a rejestr B zawiera 18 (12H,
czyli 00010010B). Instrukcja
DIV
AB
spowoduje przyj cie przez akumulator wartości 13 (ODH, czyli
00001101B), a przez rejestr
B wartości 17 (11H, czyli 00010001B),
jako e 251 = (13 x 18) + 17. wskaźniki przeniesienia
i
przepełnienia zostaną wyzerowane.
Operacja: DIV
A := A
div B
B := A mod B
Liczba cykli : 4 Liczba bajtów : 1
[edytuj] DJNZ <bajt>, <adres_względny>
Funkcja: Dekrementacja i skok jeśli nie zero
Opis: DJNZ zmniejsza zawartość wskazanej zmiennej o jeden i, jeśli wynikiem dekremcniacji jest wartość różna od zera, wykonuje skok pod podany adres. Wynikiem dekrementacji wartości 00H jest 0FFH. Stan żadnego ze wskaźników nie ulega zmianie. Warto adresu, do którego wykonywany jest skok, obliczana Jest przez dodanie przesunięcia (drugiego z operandów, będącego 8-bitowa liczb ze znakiem) do zawartości licznika rozkazów, po uprzednim zwiększeniu zawartości licznika rozkazów tak, by wskazywał on instrukcje znajdując się za wykonywaną instrukcją DJNZ. Dekrementowaną zmienną może by rejestr roboczy lub dowolny bajt adresowany bezpośrednio.
Uwaga: jeśli instrukcja wykorzystywana jest do zmiany stanu portu, to wartości dekrementowaną jest zawartość rejestru wyjściowego portu, a nie stan linii portu.
Przykład: wewnętrzna pamięć RAM o adresach 40H, 50H i 60H
zawiera odpowiednio
liczby 01H, 70H i 15H. Sekwencja instrukcji
DJNZ 40H,LABEL1
DJNZ 50H, LABEL2
DJNZ 60H, LABEL3
spowoduje przeniesienie wykonywania programu do miejsca
oznaczonego etykiet LABEL2,
z pozostawieniem w wymienionych
bajtach pamięci RAM wartości 00H, 6FH i 15H.
Pierwszy ze skoków
nie zostanie wykonany, ponieważ wynikiem dekrementacji będzie zero.
Instrukcja umożliwia łatwe tworzenie p tli, wykonywanej określoną
ilość razy w
szczególności, za może być wykorzystana do
spowodowania krótkiego opóźnienia (kilka do
kilkuset
cykli maszynowych) w wykonywaniu dalszej częci programu. Ciąg
instrukcji
MOV R2, #8
TOGGLE: CPL P1.7
DJNZ R2, TOGGLE
spowoduje 8-krotn zmian stanu wyprowadzeńnia P1.7, a tym samym
wygenerowanie
czterech impulsów wyj ciowych na bicie 7
portu P1. każdy z impulsów będzie trwal 3 cykle
maszynowe,
poniewa zmiana poziomu będzie nast powala co 3 cykle maszynowe (dwa
cykle wynosię czas wykonania instrukcji DJNZ i jeden - instrukcji
CPL),
DJNZ Rn, rel
Operacja: DJNZ
PC := PC + 2
Rn
- = Rn - 1
IF Rn < > 0 THEN
PC := PC + rel
Liczba
cykli: 2 Liczba bajtów: 2
DJNZ direct, rel
Operacja:
DJNZ
PC := PC + 3
(direct) := (direct) - 1
IF (direct) <>
0 THEN
PC := PC + rel
Liczba cykli: 2 Liczba bajtów: 3
[edytuj] INC <bajt>
Funkcja: Inkrementacja
Opis: Wskazany bajt jest inkrementowany o 1. jeśli początkową wartością jest 0FFH, to wynikiem operacji jest 00H. Stan żadnego ze wskaźników nie ulega zmianie. Operandem może by bajt adresowany bezpośrednio, pośrednio zawartości rejestru, akumulator lub rejestr roboczy.
Uwaga: jeśli instrukcja wykorzystywana jest do zmiany stanu portu, to wartością inkrementowaną jest zawartość rejestru wyjściowego portu, a nie stan linii portu.
Przykład: Rejestr R0 zawiera 7EH
(01111110B). Bajty wewnętrznej pamięci RAM o
adresach 7EH i 7FH
zawieraj odpowiednio 0FFH i 40H. Sekwencja instrukcji
INC @R0
INC R0
INC @R0
spowoduje przyj cie przez rejestr RO wartości
7FH i nadanie bajtom wewnętrznej pamięci
RAM o adresach 7EH i
7FH odpowiednio wartości 00H i 41H.
INC A
Operacja:
INC
A := A + 1
Liczba cykli: 1 Liczba bajtów: 1
INC Rn
Operacja: INC
Rn = Rn + 1
Liczba cykli: 1 Liczba
bajtów: 1
INC direct
Operacja: INC
(direct)
- = (direct) + 1
Liczba cykli: 1 Liczba bajtów: 2
INC @Ri
Operacja: INC
[Ri] := [Ri] + 1
Liczba cykli: 1
Liczba bajtów: 1
[edytuj] INC DPTR
Funkcja: Inkrementacja wskaźnika danych
Opis: Zwiększa 16-bitowy
wskaźnik danych o jeden. Wykonywana jest inkrementacja 16-
bitowa
(modulo 2"') - przepełnienie młodszego bajtu wskaźnika (DPL) z
wartości 0FFH na
00H spowoduje inkrementację starszego bajtu
wskaźnika (DPH). Stan żadnego ze
wskaźników nie ulega
zmianie. Rejestr DPTR jest jedynym 16-bitowym rejestrem, którego
zawartość może by inkrementowana za pomoc pojedynczej instrukcji.
Przykład: Rejestry DPH i DPL zawieraj odpowiednio 12H i
OFEH. Ciąg instrukcji
INC DPTR
INC DPTR
INC DPTR
spowoduje przyj cie przez rejestry DPH i DPL wartości 13H i 01H.
Operacja: INC
DPTR := DPTR + 1
liczba cykli : 2
Liczba bajtów : 1
[edytuj] JB <bit>, <adres_względny>
Funkcja: Skok jeśli bit jest jedynką
Opis: jeśli wskazany bit jest jedynką wykonywany jest skok pod podany adres,w przeciwnym razie następuje przej cie do instrukcji znajdującej się bezpośrednio za wykonywaną instrukcją skoku warunkowego. Warto adresu, do którego wykonywany jest skok, obliczana jest przez dodanie przesunięcia (drugiego z operandów, będącego 8-bitów liczb ze znakiem) do zawartości licznika rozkazów, po uprzednim zwiększeniu zawartości licznika rozkazów tak, by wskazywał on instrukcję znajdując się za wykonywaną instrukcją JB. Warto testowanego bitu nie ulega zmianie. Stan żadnego ze wskaźników nie ulega zmianie.
Przykład: Stan wyprowadzeń portu P1 jest reprezentowany
liczb 11001010B. Akumulator
zawiera liczb 56H (01010110B). Ciąg
instrukcji
JB P1.2.LABEL1
JB ACC.2,LABEL2
spowoduje
przeniesienie wykonywania programu do miejsca oznaczonego etykiet
LABEL2.
Operacja: JB
PC := PC + 3
IF(bit) = 1 THEN
PC = PC + rel
Liczba cykli : 2 Liczba bajtów : 3
[edytuj] JBC <bit>, <adres_względny>
Funkcja: Skok jeśli bit jest jedynką i wyzerowanie bitu
Opis: jeśli wskazany bit jcst jedynką wykonywany Jest skok pod podany adres, w przeciwnym razie następuje przej cie do instrukcji znajdującej się bezpośrednio za wykonywaną instrukcją skoku warunkowego. W obu przypadkach testowany bit jest zerowany. Warto adresu, do którego wykonywany jest skok obliczana jest przez dodanie przesunięcia (drugiego z operandów, będącego 8 bitów liczb ze znakiem) do zawartości licznika rozkazów po uprzednim zwiększeniu zawartości licznika rozkazów tak by wskazywał on instrukcję znajdującą się za wykonywaną instrukcję JBC. Stan żadnego ze wskaźników nie ulega zmianie.
Uwaga: jeśli instrukcja wykorzystywana jest do testowania stanu wyprowadzenia portu, to wartością testowaną jest bit rejestru wyjściowego portu, a nie stan linii portu
Przykład:
Akumulator zawiera liczb 56H (01010110B) Ciąg instrukcji
JBC
ACC3.LABEL1
JBC ACC2 LABEL2
spowoduje przeniesienie
wykonywania programu do miejsca oznaczonego etykiet LABEL2,
zmieniaj
c zawartość akumulatora na 52H (01010010B).
Operacja JBC
PC
=PC+3
IF (bit) = 1 THEN
PC =PC + rel
(bit) = 0
Liczba cykli : 2 Liczba bajtów : 3
[edytuj] JC <adres_względny>
Funkcja: Skok jeśli wskaźnik przeniesienia jest jedynką
Opis: jeśli wskaźnik przeniesienia jest jedynką wykonywany jest skok pod podany adres, w przeciwnym razie następuje przej cie do instrukcji znajdującej się bezpośrednio za wykonywaną instrukcją skoku warunkowego. Warto adresu, do którego wykonywany jest skok, obliczana jest przez dodanie podanego przesunięcia (będącego 8-bitów liczb ze znakiem) do zawartości licznika rozkazów, po uprzednim zwiększeniu zawartości licznika rozkazów o dwa. Stan żadnego ze wskaźników nie ulega zmianie.
Przykład: wskaźnik przeniesienia jest
wyzerowany. Ciąg instrukcji
JC LABEL1
CPL C
JC LABEL2
spowoduje ustawienie wskaźnika przeniesienia i przej cie z
wykonywaniem programu do
miejsca oznaczonego etykiet LABEL2.
Operacja: JC
PC := PC + 2
IF CY=1 THEN
PC :=
PC + rel
Liczba cykli : 2 Liczba bajtów : 2
[edytuj] JMP @A + DPTR
Opis: Dodaje 8-bitów stal bez. znaku umieszczoną w akumulatorze do 16-bitowego wskaźnika danych i wpisuje tak otrzymany wynik do licznika rozkazów. Następna instrukcja pobierana Jest spod adresu określonego nowym stanem licznika rozkazów. Wykonywane dodawanie jest 16-bitowe przeniesienie z młodszego bajtu wyniku wprowadzane jest do starszego bajtu. Stan akumulatora, ani wskaźnika danych nie ulega zmianie. Stan żadnego ze wskaźników nie ulega zmianie.
Przykład: W akumulatorze umieszczona
jest parzysta liczba z zakresu od 0 do 6. Podany
ci g instrukcji
spowoduje przej cie do jednej z instrukcji AJMP umieszczonych w
tabeli
skoków zaczynającej się w miejscu oznaczonym
etykiet JMPTAB.
MOV DPTR, #JMPTAB
JMP @A + DPTR
JMPTAB:
AJMP LABEL0
AJMP LABEL1
AJMP LABEL2
AJMP LABEL3
jeśli przed wykonaniem powyższego ciągu instrukcji akumulator
będzie zawierał 04H, to
rezultatem będzie przeniesienie
wykonywania programu do miejsca oznaczonego etykiet
LABEL2.
należy y pamięć ta , e instrukcja AJMP jest dwubajtowa, a zatem kody
kolejnych
instrukcji skoku umieszczone s co drugi bajt. Karol Rakczy.
Operacja: JMP
PC := A + DPTR
Liczba cykli : 2
Liczba bajtów : 1
[edytuj] JNB <bit>, <adres_względny>
Funkcja: Skok jeśli bit jest zerem
Opis: jeśli wskazany bit jest zerem wykonywany jest skok pod podany adres, w przeciwnym razie następuje przejście do instrukcji znajdującej się bezpośrednio za wykonywaną instrukcją skoku warunkowego. Warto adresu, do którego wykonywany jest skok, obliczana jest przez dodanie przesunięcia (drugiego z operandów, będącego 8-bitów liczb ze znakiem) do zawartości licznika rozkazów, po uprzednim zwiększeniu zawartości licznika rozkazów tak, by wskazywał on instrukcję znajdującą się za wykonywana instrukcją JNB. Warto testowanego bitu nie ulega zmianie. Stan żadnego ze wskaźników nie ulega zmianie.
Przykład: Stan wyprowadzeń portu Pl
jest reprezentowany liczb 11001010B. Akumulator
zawiera liczb 56H
(01010110B). Ci instrukcji
JNB P1.3,LABEL1
JNB ACC.3. LABEL2
spowoduje przej cie z wykonywaniem programu do miejsca
oznaczonego etykiet LABEL2.
Operacja: JNB
PC := PC + 3
IF (bit) = 0 THEN
PC := PC + rel
Liczba cykli: 2 Liczba
bajtów: 3
[edytuj] JNC <adres_względny>
Funkcja: Skok jeśli wskaźnik przeniesienia jest zerem
Opis: jeśli wskaźnik przeniesienia jest zerem wykonywany
jest skok pod podany adres, w
przeciwnym razie następuje
przejście do instrukcji znajdującej się bezpośrednio za
wykonywaną
instrukcję skoku warunkowego. Warto adresu, do którego
wykonywany jest
skok, obliczana jest przez dodanie podanego
przesunięcia (będącego 8-bitów liczb ze
znakiem) do
zawartości licznika rozkazów, po uprzednim zwiększeniu zawartości licznika
rozkazów o dwa. Stan żadnego ze wskaźników
(w tym wskaźnika przeniesienia) nie ulega
zmianie.
Przykład:
wskaźnik przeniesienia jest ustawiony. Ciąg instrukcji
JNC LABEL1
CPL C
JNC LABEL2
spowoduje wyzerowanie wskaźnika
przeniesienia i przej cie z wykonywaniem programu do
miejsca
oznaczonego etykiet LABEL2.
Operacja: JNC
PC := PC + 2
IF CY=0 THEN
PC := PC + rel
Liczba cykli: 2
Liczba
bajtów: 2
[edytuj] JNZ <adres_względny>
Funkcja: Skok jeśli zawartość akumulatora nie jest zerem
Opis: jeśli którykolwiek z bitów akumulatora
jest jedynką wykonywany jest skok pod podany adres, w przeciwnym
razie następuje przej cie do instrukcji znajdującej się bezpośrednio
za wykonywaną instrukcją skoku warunkowego. Warto adresu, do którego
wykonywany jest skok, obliczana jest przez dodanie podanego
przesunięcia (będącego 8-bitów liczb ze znakiem) do
zawartości licznika rozkazów, po uprzednim zwiększeniu
zawartości licznika rozkazów o dwa. Zawartość akumulatora
nie ulega zmianie. Stan żadnego ze wskaźników nie ulega
zmianie.
Przykład: Akumulator zawiera 00H. Ciąg instrukcji
JNZ LABEL1
INC A
JNZ LABEL2
spowoduje umieszczenie w
akumulatorze liczby 01H i przej cie z wykonywaniem programu
do
miejsca oznaczonego etykiet LABEL2.
Operacja: JNZ
PC
- = PC + 2
IF A <> 0 THEN
PC := PC + rel
Liczba
cykli: 2 Liczba bajtów: 2
[edytuj] JZ <adres_względny>
Funkcja: Skok jeśli zawartość akumulatora jest zerem
Opis: jeśli wszystkie bity akumulatora s zerami wykonywany
jest skok pod podany adres, w przeciwnym razie następuje przej
cie do instrukcji znajdującej się bezpośrednio za wykonywaną
instrukcję skoku warunkowego. Warto adresu, do którego
wykonywany jest skok, obliczana jest przez dodanie podanego
przesunięcia (będącego 8-bitów liczb ze znakiem) do
zawartości licznika rozkazów, po uprzednim zwiększeniu zawartości licznika rozkazów o dwa. Zawartość akumulatora nie ulega
zmianie. Stan żadnego ze wskaźników nie ulega zmianie.
Przykład: Akumulator zawiera 01H. Ciąg instrukcji
JZ
LABEL1
DEC A
JZ LABEL2
spowoduje przyjęcie przez
akumulator wartości OOH i przejście z wykonywaniem programu
do
miejsca oznaczonego etykietą LABEL2.
Operacja: JZ
PC :=
PC + 2
IF A = 0 THEN
PC := PC + rel
Liczba cykli: 2
Liczba bajtów: 2
[edytuj] LCALL <adres_16-bitowy>
Funkcja: Dalekie wywołanie procedury
Opis: LCALL wywołuje procedur znajdującą się pod wskazanym adresem. Instrukcja powoduje zwiększenie zawartości licznika rozkazów o trzy, tak by wskazywać następną instrukcje, a następnie przesyłać 16-bitów zawartość licznika rozkazów na stos (najpierw młodszy bajt), zwiększając jednocześnie zawartośćwskaźnika stosu o dwa. Po wykonaniu powyższych czynności do licznika rozkazów ładowany jest adres procedury podany w drugim i trzecim bajcie kodu instrukcji, powoduj c tym samym przej cie z wykonywaniem programu do załadowanego adresu. Początek procedury może naleźć się w dowolnym miejscu 64K-bajtowego obszaru pamięci programu. Stan żadnego ze wskaźników nie ulega zmianie.
Przykład: Początkowo wskaźnik stosu zawiera 07H.
Etykieta SUBRTN identyfikuje adres
1234H pamięci programu. Po
wykonaniu umieszczonej pod adresem 0123H instrukcji
LCALL SUBRTN
wskaźnik stosu będzie zawierał 09H, bajty wewnętrznej pamięci RAM
o adresach 08H i 09H
będą zawierały odpowiednio 26H i 01H, a
zawartość licznika rozkazów będzie wynosiła
1234H.
Operacja: LCALL
PC := PC + 3
SP := SP + 1
[SP]
- =PC7-0
SP := SP + 1
[SP] := PC15-8
PC15-0 := a15-0
Liczba cykli: 2 Liczba bajtów: 3
[edytuj] LJMP <adres_16-bitowy>
Funkcja: Długi skok
Opis: LJMP powoduje wykonanie bezwarunkowego skoku pod wskazany adres przez załadowanie do licznika rozkazów drugiego i trzeciego bajtu kodu instrukcji. Adres skoku może znaleźć się w dowolnym miejscu 64K-bajtowego obszaru pamięci programu. Stan żadnego ze wskaźników nie ulega zmianie.
Przykład: Etykieta
JMPADR identyfikuje adres 1234H pamięci programu. Umieszczona pod
adresem 0123H instrukcja
LJMP JMPADR
spowoduje przyj cie
przez licznik rozkazów wa o ci 1234H.
Operacja: LJMP
PC := a15-0
Liczba cykli: 2 Liczba bajtów: 3
[edytuj] MOV <bajt_przeznaczenia>, <bajt_źródłowy>
Funkcja: Przesłania zmiennej bajtowej.
Opis: zmienna bajtowa wskazana przez drugi z operandów jest kopiowana w miejsce identyfikowane przez pierwszy z operandów. Stan zmiennej źródłowej nie ulega zmianie. Stan żadnego ze wskaźników nie ulega zmianie. zmienna źródłowa i miejsce przeznaczenia w instrukcji przesłania zmiennej bajtowej mogą być adresowane łącznie na 15 różnych sposobów. Czyni to opisywaną instrukcję najbardziej elestyczną operacją w całej liście rozkazów mikrokontrolerów rodziny 51.
Przykład: Bajt
wewnętrznej pamięci RAM znajdujący się pod adresem 30H zawiera 40H, a
pod adresem 40H tej pamięci umieszczona jest wartość 10H. Stan
wyprowadzeń portu P1
reprezentuje liczba 11001010B (0CAH). Po
wykonaniu ci gu instrukcji
MOV R0, #30H ; R0 := 30H
MOV A,
@R0 ; A := 40H
MOV R1, A ;R1 := 40H
MOV B,@R1 ; B := 10H
MOV
@R1, P1; RAM(40H) := 0CAH
MOV P2, P1 ; P2 := 0CAH
w rejestrze
roboczym R1 znajdzie się wartość 30H, w rejestrze roboczym R1 i
akumulatorze
będzie 40H, rejestr B będzie zawierał 10H, a w
wewnętrznej pamięci RAM o adresie 40H
oraz w rejestrze wyjściowym
portu P2 pojawi się 0CAH (11001010B).
MOV A, Rn
Operacja:
MOV
A:=Rn
Liczba cykli : 1 Liczba bajtów : 1
MOV A, direct
Operacja: MOV
A := (direct)
Liczba cykli: 1
Liczba bajtów: 2
MOV A, @Ri
Operacja: MOV
A
- = [Ri]
Liczba cykli: 1 Liczba bajtów: 1
MOV A, #data
Operacja: MOV
A := data
Liczba cykli: 1 Liczba
bajtów: 2
MOV Rn, A
Operacja: MOV
Rn := A
Liczba cykli: 1 Liczba bajtów: 1
MOV Rn, direct
Operacja: MOV
Rn := (direct)
Liczba cykli : 2 Liczba bajtów
- 2
MOV Rn, #data
Opercja : MOV
Rn := data
Liczba
cykli : 1 Liczba bajtów : 2
MOV direct, A
Operacja
- MOV
(direct) := A
Liczba cykli : 1 Liczba bajtów : 2
MOV direct, Rn
Operacja : MOV
(direct) := Rn
Liczba cykli : 2 Liczba bajtów : 2
MOV direct1, direct2
Operacja: MOV
(direct1) := (direct2)
Liczba
cykli: 2 Liczba bajtów: 3
MOV direct @Ri
Operacja:
MOV
(direct) := [Ri]
Liczba cykli: 2 Liczba bajtów: 2
MOV direct, #data
Operacja : MOV
(direct) := data
Liczba cykli : 2 Liczba bajtów : 3
MOV @Ri, A
Operacja MOV
[Ri] := A
Liczba cykli : 1 Liczba bajtów
- 1
MOV @Ri, direct
Operacja : MOV
[Ri] := direct
Liczba cykli : 2 Liczba bajtów : 2
MOV @Ri, #data
Operacja : MOV
[Ri] := data
Liczba cykli : 2 Liczba
bajtów : 2
[edytuj] MOV <bit_przeznaczenia>, <bit_ źródłowy>
Funkcja: Przesłanie zmiennej bitowej
Opis: zmienna bitowa wskazana przez drugi z operandów jest kopiowana w miejsce identyfikowane przez pierwszy z operandów. Jednym z operandów musi być wskaźnik przeniesienia, drugim może by dowolny bit adresowalny bezpośrednio. Stan żadnego z rejestrów ani bitów, poza bitem przeznaczenia nie ulega zmianie.
Przykład:
Początkowo wskaźnik przeniesienia jest ustawiony. Stan wyprowadzeń
portu P3
reprezentuje liczba 11000101B, a w rejestrze wyjściowym
portu
P1 umieszczona jest wartość 35H (00110101B). Wykonanie ci gu
instrukcji
MOV P1.3, C
MOV C, P3.3
MOV P 1.2, C
spowoduje wyzerowanie wskaźnika przeniesienia i zmian zawartości
rejestru wyj ciowego
portu P1 na 39H (00111001B).
MOV C, bit
Operacja: MOV
CY := (bit)
Liczba cykli : 1 Liczba
bajtów : 2
MOV bit, C
Operacja : MOV
(bit)
- = CY
Liczba cykli : 2 Liczba bajtów : 2
[edytuj] MOV DPTR, #<stała_16-bitowa>
Funkcja: Ładowanie wskaźnika danych stal 16-bitów
Opis: wskaźnik danych ładowany jest podaną stałą 16-bitów
. Warto stałej określana jest stanem drugiego (DPH) i trzeciego
(DPL) bajtu kodu instrukcji. Stan żadnego ze wskaźników nie
ulega zmianie. Opisywana instrukcja jest jedyną instrukcją
przesyłania wartości (stałej lub zmiennej) 16-bitowej.
Przykład:
Instrukcja
MOV DPTR, #1234H
spowoduje załadowanie do
wskaźnika danych stałej 1234H. Rejestr DPH będzie zawierał
12H, a
rejestr DPL 34H.
Operacja: MOV
DPTR := d15-0 <=>
(DPH := d15-8; DPL := d7-0)
Liczba cykli: 2 Liczba bajtów:
3
[edytuj] MOVC A, @A + <rejestr_bazowy>
Funkcja: Przesłanie bajtu kodu
Opis: Instrukcja MOVC przesyła do akumulatora bajt kodu lub stal umieszczoną w pamięci programu. Adres pobieranego bajtu kodu określany jest jako suma zawartości akumulatora (traktowanej jako 8-bitowa liczba bez znaku) i 16-bitowego rejestru bazowego, którym może by wskaźnik danych lub licznik rozkazów. W tym ostatnim przypadku zawartość licznika rozkazów jest wstępnie inkrementowana, tak by przed wykonaniem sumowania z zawartości akumulatora licznik rozkazów wskazywał instrukcję znajduj c się bezpośrednio za wykonywaną instrukcję MOVC. jeśli rejestrem bazowym jest wskaźnik danych, jego zawartość nie jest zmieniana. Sumowanie wykonywane jest jako 16-bitowe, tak e przeniesienie z młodszego bajtu jest uwzględniane w starszym bajcie. Stan żadnego ze wskaźników nie ulega zmianie.
Przykład: W
akumulatorze znajduje się liczba z zakresu od 0do 3. Poniższy ciąg
instrukcji
spowoduje umieszczenie w akumulatorze zawartości
jednego
z bajtów kodu programu, zdefiniowanych za pomoc
pseudoinstrukcji DB (definiuj bajtami).
REL_PC: INC A
MOVC A,
@A + PC
RET
DB 66H
DB 77H
DB 88H
DB 99H
jeśli
procedura REL PC zostanie wywołana przy zawartości akumulatora równej
01H, to po
powrocie z procedury w akumulatorze będzie wartość 77H.
Instrukcja INC A umieszczona
przed instrukcją MOVC powoduje
"przeskoczenie" instrukcji RET, oddzielającej instrukcję
MOVC od tablicy stałych. Gdyby tablica była oddzielona od
instrukcji MOVC większą liczbę
bajtów kodu, to zawartośćakumulatora zwiększono by o odpowiedni wartość wykorzystując
instrukcję dodawania zamiast instrukcji inkrementacji.
MOVC A, @A + DPTR
Operacja: MOVC
A := (A + DPTR)
Liczba
cykli: 3 Liczba bajtów: 1
MOVC A, @A + PC
Operacja:
MOVC
PC := PC + 1
A := (A + PC)
Liczba cykli: 2 Liczba
bajtów : 1
[edytuj] MOVX <bajt_przeznaczenia>, <bajt_źródłowy>
Funkcja: Przesłanie z udziałem zewnętrznej pamięci danych
Opis: Instrukcja MOVX sluży do przeprowadzania wymiany informacji między akumulatorem i zewnętrzną pamięcią danych. Przesiania za pomoc instrukcji MOVX mogą by wykonywane przy wykorzystaniu 8- lub 16-bitowego adresowania zewnętrznej pamięci RAM. Przy adresowaniu 8-bitowym zewnętrzna pamięć może by adresowana zawartości rejestru R0 lub R1. Adres Jest wystawiany na porcie P0 i jest multipleksowany z bajtem danych. Adresowanie 8-bitowe jest wystarczaj ce zwykle tylko przy korzystaniu z niewielkiej zewnętrznej pamięci danych lub przy sterowaniu zewnętrznych układów peryferyjnych. jeśli obszar adresowy układów zewnętrznych przekracza 256 bajtów, to do określania starszych bitów adresu przy adresowaniu 8-bitowym mogą być wykorzystane dowolne wyprowadzenia mikrokontrolera (bardzo często wykorzystuje się do tego celu linie portu P2). Stan tych wyprowadzeń musi by oczywiście odpowiednio ustawiany przed każdą operacją MOVX działając w trybie 8-bitowym. W przypadku adresowania 16-bitowego do adresowania wykorzystywany jest 16-bitowy wskaźnik danych DPTR. Podczas wykonywania instrukcji starszy bajt adresu (zawartość DPH) wystawiany jest na liniach portu P2, za młodszy bajt adresu (DPL)jest multipleksowany z bajtem danych na liniach portu PO. Po wykonaniu operacji przestania linie portu P2 powracaj do stanu sprzed jej wykonywania. Adresowanie 16-bitowe jest szybsze i wydajniejsze ni 8-bitowe w przypadku dużego obszaru adresowego układów zewnętrznych, ponieważ nie jest wtedy potrzebne wstępne ustalanie (za pomoc dodatkowej instrukcji) stanu starszych bitów adresowych przed każdą operacją MOVX. Możliwe jest naprzemienne stosowanie obu trybów adresowania.
Przykład: Zewnętrzna pamięć RAM o pojemności 256 bajtów
z multipleksowaną szynę
danych i adresów (np. układ 8155)
jest podłączona do portu pn mikrokontrolera. Liniami
sterującymi
s odpowiednie linie portu P3. Linie portów P1 i P2
wykorzystywane s jako
zwykle linie wejścia/wyjścia. Rejestry
robocze R0 i R1 zawieraj 12H i 34H. Pod adresem
34H zewnętrznej
pamięci RAM umieszczono liczb 56H. Ciąg instrukcji
MOVX A,@R1
MOVX @R0.,A
spowoduje skopiowanie liczby 56H do akumulatora
oraz pod adres 12H zewn trznej pamięci
RAM.
MOVX A, @Ri
Operacja : MOVX
A := [Ri]
Liczba cykli : 2 Liczba
bajtów: 1
MOVX A, @DPTR
Operacja : MOVX
A
- = [DPTR]
Liczba cykli : 2 Liczba bajtów : 1
MOVX @Ri, A
Operacja : MOVX
[Ri] := A
Liczba cykli : 2
Liczba bajtów: 1
MOVX @DPTR, A
Operacja :
MOVX
[DPTR] := A
Liczba cykli : 2 Liczba bajtów : 1
[edytuj] MUL AB
Funkcja: Mnożenie
Opis: MUL AB mnoży dwie 8-bitowe liczby bez znaku umieszczone w akumulatorze i rejestrze B. młodszy bajt 16-bitowego iloczynu umieszczany jest w akumulatorze, starszy bajt w rejestrze B. jeśli wynik jest większy od 255 (0FFH) ustawiany jest wskaźnik przepełnienia, za jeśli starszy bajt wyniku jest zerem wskaźnik OV jest zerowany. wskaźnik przeniesienia jest zawsze zerowany.
Przykład: Początkowo akumulator zawiera liczb 80
(50H), a rejestr B liczb 160 (0A0H).
Wykonanie instrukcji
MUL
AB
da wynik 12800 (3200H), a zatem w rejestrze B znajdzie się
liczba 32H, a akumulator
zostanie wyzerowany. wskaźnik
przepełnienia będzie ustawiony, a wskaźnik przeniesienia
wyzerowany.
Operacja: MUL
A := (A x B) mod 256
B := (A x B)
div 256
Liczba cykli : 4 Liczba bajtów : 1
[edytuj] NOP
Funkcja: Wykonanie operacji pustej (wytracanie czasu)
Opis: Następuje przejście do następnej instrukcji. Stan żadnego ze wskaźników ani rejestrów, poza licznikiem rozkazów, nie ulega zmianie.
Przykład: Na wyprowadzeniu P2.7
mikrokontrolera należy wygenerować ujemny impuls
trwaj cy 5 cykli
maszynowych. Zwykła sekwencja instrukcji CLR/SETB spowodowałaby
wygenerowanie impulsu trwającego zaledwie jeden cykl maszynowy,
należy alo by zatem
wstawi dodatkowe cztery cykle.
dany
impuls można zatem wygenerować (przy założeniu
i wszystkie
przerwania s zablokowane) np. za pomoc ciągu instrukcji
CLR P2.7
NOP
NOP
NOP
NOP
SETB P2.7
Operacja: NOP
Liczba cykli : 1 Liczba bajtów : 1
[edytuj] ORL <bajt_przeznaczenia>, <bajt_źródłowy>
Funkcja: Logiczna funkcja OR dwóch zmiennych
Opis: ORL oblicza bitową sumę logiczną dwóch wskazanych zmiennych bitowych (każdy bajt traktowany jest jako zbiór ośmiu bitów). Wynik operacji umieszczany jest w pierwszej z wymienionych zmiennych. Wykonanie operacji nie zmienia stanu żadnego ze wskaźników. Możliwych jest 6 różnych kombinacji trybów adresowania dla dwóch używanych przez instrukcję operandów. jeśli miejscem przeznaczenia wyniku jest akumulator, to zmienna źródłowa może by adresowana w trybie rejestrowym, bezpośrednim, pośrednim (zawartości rejestru) lub natychmiastowym. jeśli miejsce przeznaczenia wyniku jest adresowane bezpośrednio , to zmienna źródłowa może by akumulatorem lub zmienną adresowaną w trybie natychmiastowym.
Uwaga: jeśli instrukcja jest wykorzystywana do zmiany stanu linii portu, to wartości użytą jako pierwotny stan portu będzie wartość odczytana z rejestru wyjściowego portu, a nie rzeczywisty stan wyprowadzeń portu.
Przykład:
jeśli akumulator zawiera 0C3H (11000011B), rejestr R0 zawiera 55H
(01010101
B), to instrukcja
ORL A, R0
pozostawi w
akumulatorze wartość OD7H (11010111B).
Instrukcję można
wykorzystywać do ustawiania bitów wybranego bajtu wewnętrznej
pamięci
RAM lub rejestru - jeśli miejscem przeznaczenia wyniku
jest bajt adresowany bezpośrednio.
Maska określająca, które
bity będą ustawiane jest wówczas stal wyszczególnioną w
instrukcji lub zawartości akumulatora (zwykle uzyskaną z
poprzedzających instrukcję
obliczeń). Instrukcja
ORL P1,
- 00110010B
spowoduje ustawienie bitów 5, 4 i 1portu P1.
ORL A, Rn
Operacja: ORL
A := A or Rn
Liczba
cykli: 1 Liczba bajtów: 1
ORL A, direct
Operacja:
ORL
A := A or (direct)
Liczba cykli : 1 Liczba bajtów
- 2
ORL A, @Ri
Operacja ORL
A := A or [Ri]
Liczba
cykli : 1 Liczba bajtów : 1
ORL A, #data
A := A
or data
Liczba cykli : 1 Liczba bajtów : 2
ORL direct, A
Operacja
ORL
(direct) := A or (direct)
liczba cykli : 1 Liczba bajtów
- 2
ORL direct, #data
Operacja ORL
(direct) :=
(direct) or data
Liczba cykli : 2 Liczba bajtów : 3
[edytuj] ORL C, <bit źródłowy>
Funkcja: Logiczna funkcja OR zmiennych bitowych
Opis: Instrukcja ustawia wskaźnik przeniesienia, jeśli wartość bitu będącego drugim z podanych operandów jest jedynką. W przeciwnym razie stan wskaźnika przeniesienia pozostaje bez zmian. Operacja nie zmienia stanu pozostałych wskaźników. jeśli drugi z operandów jest poprzedzony kreską ukośną "/", to do wykonania operacji używana jest zanegowana wartość wskazanego bitu (stan bitu źródłowego nie ulega jednak zmianie). Operandami źródłowymi mogą być tylko bity adresowalne bezpośrednio.
Przykład: Wykonanie ciągu instrukcji
MOV
C, P1.0 ; przesłanie stanu wyprowadzenia portu do wskaźnika
przeniesienia
ORL C, ACC.7 ; suma logiczna wskaźnika
przeniesienia z bitem 7 akumulatora
ORL C, /OV ; suma logiczna
wskaźnika przeniesienia z negacją wskaźnika OV
spowoduje
ustawienie wskaźnika przeniesienia tylko wtedy, gdy P1.0=1, ACC.7=1
lub
OV=0.
ORL C, bit
Operacja: ORL
CY := CY \/
(bit)
Liczba cykli : 2 Liczba bajtów : 2
ORL C, /bit
Operacja: ORL
CY := CY \/ ~(bit)
Liczba cykli :
2 Liczba bajtów : 2
[edytuj] POP <bajt_adresowany_bezpośrednio>
Funkcja: Pobranie bajtu ze stosu
Opis: Bajt wewnętrznej pamięci RAM o adresie określonym przez zawartość wskaźnika stosu jest odczytywany, a zawartość wskaźnika stosu jest zmniejszana o jeden. Odczytana wartość jest umieszczana pod adresem identyfikowanym przez operand instrukcji. Stan żadnego ze wskaźników nie ulega zmianie.
Przykład: wskaźnik stosu zawiera pocz tkowo
liczb 32H, a wewnętrzna pamięć RAM o
adresach od 30H do 32H
zawiera odpowiednio liczby 20H, 23H
i 01H. Ciąg instrukcji
POP
DPH
POP DPL
spowoduje umieszczenie we wskaźniku danych liczby
0123H i zmniejszenie zawartości
wskaźnika stosu do 30H. Wykonanie
wówczas instrukcji
POP SP
spowoduje przyj cie przez
wskaźnik stosu wartości 20H należy zauważy , ze w tym
szczególnym
przypadku zawartość wskaźnika stosu została zmniejszona o jeden (do
wartości
2FH) przed umieszczeniem w tym wskaźniku wartości 20H
odczytanej ze stosu
Operacja: POP
(direct) := [SP]
SP
- = SP - 1
Liczba cykli: 2 Liczba bajtów: 2
[edytuj] PUSH <bajt_adresowany_bezpośrednio>
Funkcja: Umieszczenie bajtu na stosie Opis: Zawartość wskaźnika stosu jest zwiększana o jeden. Następnie zawartość bajtu identyfikowanego przez operand instrukcji umieszczana jest w wewnętrznej pamięci RAM, pod adresem określonym przez zawartość wskaźnika stosu. Stan żadnego z pozostałych rejestrów, ani wskaźników nie ulega zmianie.
Przykład: wskaźnik stosu zawiera liczb 09H,
a wskaźnik danych zawiera 1234H.
Ciąg instrukcji
PUSH DPH
PUSH DPL
spowoduje umieszczenie w wewnętrznej pamięci RAM o
adresach 0AH i 0BH liczb 34H i
12H, oraz zwiększenie zawartości
wskaźnika stosu do 0BH.
Operacja: PUSH
SP := SP + 1
[SP] := (direct)
Liczba cykli: 2 Liczba bajtów: 2
[edytuj] RET
Funkcja: Powrót z procedury
Opis: RET pobiera ze stosu dwa bajty, umieszczaj c je w starszym i młodszym bajcie licznika rozkazów oraz zmniejszając zawartość wskaźnika stosu o dwa. Działanie programu kontynuowane JC się od, ustawionego w ten sposób, nowego adresu - z reguły jest to adres instrukcji położonej bezpośrednio za instrukcją ACALL lub LCALL, która wywołała procedur . Stan żadnego ze wskaźników nie ulega zmianie.
Przykład: wskaźnik stosu zawiera liczb OBH, a
wewnętrzna pamięćęć
RAM o adresach OAH
i OBH zawiera
odpowiednio 23H i 01H. Instrukcja
RET
spowoduje kontynuację
programu począwszy od adresu 0123H oraz
przyj cie przez wskaźnik
stosu wartości 09H.
Operacja: RET
PC15-8 := [SP]
SP
- = SP - 1
PC7-0 := [SP]
SP := SP - 1
Liczba cykli: 2
Liczba bajtów: 1
[edytuj] RETI
Funkcja: Powrót z procedury obsługi przerwania
Opis: RETI pobiera ze stosu dwa bajty, umieszczaj c je w starszym i młodszym bajcie licznika rozkazów oraz zmniejsza zawartość wskaźnika stosu o dwa. Przywracana jest możliwość obsługi przerwa o priorytecie takim samym jak przed wystąpieniem przerwania, którego obsługa jest właśnie kończona. Stan żadnego ze wskaźników nie ulega zmianie. Stan rejestru PSW sprzed przerwania nie jest automatycznie odtwarzany. Działanie programu kontynuowane jest z reguły od adresu instrukcji polo onej bezpośrednio za instrukcję , podczas wykonywania której wykryte zostało danie obsługi przerwania. Instrukcja, od której program bidzie kontynuowany, zostanie wykonana przed przej ciem do obsługi nowego przerwania nawet wtedy, gdy danie nowego przerwania wystąpi już podczas wykonywania instrukcji RETI.
Przykład:
wskaźnik stosu zawiera liczb OBH, a wewnętrzna pamięćęć
RAM o
adresach 0AH
i 0BH zawiera odpowiednio 23H i 01H. Obsługiwane
przerwanie zostało wykryte podczas
wykonywania instrukcji, której
ostatni bajt kodu znajduje się pod adresem 0122H. Instrukcja
RETI
spowoduje kontynuację programu począwszy od adresu 0123H oraz
przyj cie przez wskaźnik
stosu wartości 09H.
Operacja: RETI
PC15-8 := [SP]
SP := SP - 1
PC7-0 - [SP]
SP
- = SP - 1
Liczba cykli : 2 Liczba bajtów : 1
[edytuj] RL A
Funkcja: Cykliczne przesunięcie zawartości akumulatora w lewo
Opis: Osiem bitów akumulatora przesuwanych jest w lewo o jeden bit. przesunięcie jest cykliczne - w wyniku przesunięcia bit 7 akumulatora umieszczany jest na pozycji bitu 0. Stan żadnego ze wskaźników me ulega zmianie.
Przykład: Akumulator
zawiera liczb 0C5H (11000101B). Instrukcja
RL A
spowoduje
przyj cie przez akumulator wartości 8BH (10001011B). Stan wskaźnika
przeniesienia nie ulegnie zmianie.
Operacja: RL
FOR
n := 6 DOWNTO 0 DO
An+1 := An
A7 := A0(stare)
Liczba
cykli: 1 Liczba bajtów: 1
[edytuj] RLC A
Funkcja: Cykliczne przesunięcie zawartości akumulatora w lewo z udziałem wskaźnika przeniesienia
Opis: Osiem bitów akumulatora przesuwanych jest w lewo o jeden bit z przej ciem przez wskaźnik CY - bit 7 akumulatora przesuwany jest do wskaźnika przeniesienia. przesunięcie jest cykliczne - w wyniku przesunięcia początkowa zawartość wskaźnika przeniesienia umieszczana jest na pozycji bitu 0 akumulatora. Stan żadnego z pozostałych wskaźników nie ulega zmianie.
Przykład:
Akumulator zawiera liczb OC5H (11000101B), a wskaźnik przeniesienia
jest
wyzerowany. Instrukcja
RLC A
spowoduje przyj cie
przez akumulator wartości 8AH (10001010B). wskaźnik przeniesienia
zostanie ustawiony.
Operacja: RLC
CY:=A7
FOR n
- = 6 DOWNTO 0 DO
An+1 := An
A0 := CY(stare)
Liczba cykli - 1 Liczba bajtów : 1
[edytuj] RRC A
Funkcja: Cykliczne przesunięcie zawartości akumulatora w prawo z udziałem wskaźnika przeniesienia
Opis: Osiem bitów akumulatora oraz bit CY przesuwanych jest w prawo o jeden bit z przej ciem przez wskaźnik CY - bit O akumulatora przesuwany jest do wskaźnika przeniesienia. przesunięcie jest cykliczne - w wyniku przesunięcia początkowa zawartość wskaźnika przeniesienia umieszczana jest na pozycji bitu 7 akumulatora. Stan żadnego ze pozostałych wskaźników nie ulega zmianie.
Przykład:
Akumulator zawiera liczb OC5H (l 1000101B), a wskaźnik przeniesienia
jest
wyzerowany. Instrukcja
RRC A
spowoduje przyj cie
przez akumulator wartości 62H (01100010B). wskaźnik przeniesienia
zostanie ustawiony.
Operacja: RRC
CY := A0
FOR
n := 0 TO 6 DO
An := An+1
A7 := CY(stare)
Liczba cykli :
1 Liczba bajtów : 1
[edytuj] SETB <bit>
Funkcja: Ustawienie bitu
Opis: Wskazany bit jest ustawiany. Żaden ze wskaźników nie ulega zmianie. Instrukcja może by przeprowadzona wyłącznie na wskaźniku przeniesienia lub dowolnym bicie adresowalnym bezpośrednio.
Przykład: wskaźnik
przeniesienia jest wyzerowany. Rejestr portu Pl zawiera 34H
(00110100B). Instrukcje
SETB C
SETB P 1.O
spowoduj
ustawienie bitu przeniesienia i zmian zawartości rejestru portu P1 na
35H(00110101B).
SETB C
Operacja: SETB
CY := 1
Liczba cykli : 1 Liczba bajtów : 1
SETB bit
Operacja: SETB
(bit) := 1
Liczba cykli : 1 Liczba
bajtów : 2
[edytuj] SJMP <adres_względny>
Funkcja: Skok krótki
Opis: Wykonywany jest bezwarunkowy skok pod podany adres. Wartość adresu, do którego wykonywany jest skok, obliczana jest przez dodanie przesunięcia (operandu, będącego 8-bitową liczbą ze znakiem) do zawartości licznika rozkazów, po uprzednim zwiększeniu zawartości licznika rozkazów o dwa. Zasię g skoku rozciąga się zatem od 128 bajtów przed do 127 bajtów za wykonywaną instrukcją SJMP. Stan żadnego ze wskaźników nie ulega zmianie.
Przykład: Etykieta RELADR identyfikuje
adres 0123H pamięci programu. Instrukcja
SJMP RELADR
znalazła
się pod adresem 0100H. Po jej wykonaniu licznik rozkazów
będzie zawierał liczb
0123H.
Uwaga: W omawianym
Przykładzie instrukcja występująca bezpośrednio za instrukcją skoku
będzie polo ona pod adresem 0102H. przesunięcie będzie zatem
wynosiło (0123H-0102H)=21H. Warto zauważyć, że użycie instrukcji
skoku krótkiego, w której wartość adresu względnego
będzie równa 0FEH, utworzy nieskończoną pętlę , zlożoną z
pojedynczej
instrukcji.
Operacja: SJMP
PC := PC +
2
PC := PC + rel
Liczba cykli : 1 Liczba bajtów : 2
[edytuj] SUBB A, <bajt_źródłowy>
Funkcja: Odejmowanie z pożyczką
Opis: SUBB powoduje odjęcie zawartości wskazanej zmiennej oraz bitu przeniesienia od zawartości akumulatora i pozostawia wynik operacji w akumulatorze. wskaźnik przeniesienia (funkcjonujący w tym przypadku jako wskaźnik pożyczki) jest ustawiany, jeśli występuje pożyczka z 8 bitu. W przeciwnym razie (brak pożyczki) wskaźnik przeniesienia jest zerowany. Sygnalizowanie pożyczki umożliwia realizację odejmowania wielokrotnej precyzji. W takim wypadku należy pamiętać, by odejmowanie najmłodszych częci liczb było wykonywane przy wyzerowanym wskaźniku przeniesienia (pożyczki). Pomocniczy wskaźnik przeniesienia jest ustawiany, jeśli występuje pożyczka z 4 bitu. W przeciwnym razie pomocniczy wskaźnik przeniesienia jest zerowany. Bit OV jest ustawiany tylko wtedy, gdy wyst pila pożyczka na bicie 7, przy braku pożyczki na bicie 8 lub gdy wystąpiła pożyczka na bicie 8, przy braku pożyczki na bicie 7. W pozostałych przypadkach OV jest zerowany. jeśli odejmowane s liczby ze znakiem, OV sygnalizuje otrzymanie dodatniego wyniku przy odejmowaniu liczby dodatniej od liczby ujemnej, bądź ujemnego wyniku przy odejmowaniu liczby ujemnej od liczby dodatniej. Do adresowania operandu źródłowego można wykorzysta jeden z następujących trybów adresowania: rejestrowe, bezpośrednie, pośrednie zawartości rejestru lub natychmiastowe.
Przykład:
Akumulator zawiera 0C9H (11001001B), rejestr R2 zawiera 54H
(01010100B), a
wskaźnik poniesienia jest ustawiony. Instrukcja
SUBB A, R2
pozostawi, w akumulatorze wartość 74H (01110100B),
wyzeruje pomocniczy wskaźnik
przeniesienia AC i wskaźnik
przeniesienia CY oraz ustawi bit OV. Należy zauważyć, że
0C9H
minus 54H jest równe 75H. Różnica między t wartości , a
wynikiem otrzymanym w
przedstawionym Przykładzie wynika z
wykonania operacji odejmowania przy ustawionym
bicie
przeniesienia (pożyczki).
SUBB A, Rn
Operacja: SUBB
A
- = A - Rn - CY
Liczba cykli : 1 Liczba bajtów : 1
SUBB A, direct
Operacja: SUBB
A := A - (direct) - CY
Liczba
cykli : 1 Liczba bajtów : 2
SUBB A, @Ri
Operacja:
SUBB
A := A - [Ri] - CY
Liczba cykli : 1 Liczba bajtów
- 1
SUBB A, #data
Operacja: SUBB
A := A - data -
CY
Liczba cykli : 1 Liczba bajtów : 2
[edytuj] SWAP A
Funkcja: Zamiana miejscami polówek akumulatora
Opis: SWAP A zamienia miejscami zawartość starszej i młodszej polówki akumulatora (składających się z 4 bitów ka da). Operacja może być rozpatrywana jako cykliczne przesunięcie zawartości akumulatora 0 cztery bity. Stan żadnego ze wskaźników nie ulega zmianie.
Przykład: Akumulator zawiera liczb 0C5H
(11000101B). Instrukcja
SWAP A
powoduje przyj cie przez
akumulator wartości 5CH (010111000B)
Operacja: SWAP
A3-0
- = A7-4
A7-4 := A3-0 (stare)
Liczba cykli : 1 Liczba bajtów - 1
[edytuj] XCH A, <bajt>
Funkcja: Wymiana zawartości akumulatora i zmiennej bajtowej
Opis: XCH powoduje wpisanie do akumulatora zawartości wskazanej zmiennej z jednoczesnym przepisaniem początkowej zawartości akumulatora do tej zmiennej. Drugi z operandów może by rejestrem roboczym, zmienną adresowaną bezpośrednio lub pośrednio zawartości rejestru.
Przykład: Rejestr RO zawiera liczb 20H,
akumulator 3FH (00111111B) a bajt wewnętrznej
pamięci RAM o
adresie 20H zawiera 75H (01110101B). Instrukcja
XCH A, @RO
spowoduje przyj cie przez bajt wewnętrznej pamięci RAM o adresie
20H wartości 3FH
(00111111B), a przez akumulator wartości 75H
(01110101B).
XCH A, Rn
Operacja: XCH
A := Rn
Rn
- = A(stare)
Liczba cykli : 1 Liczba bajtów: 1
XCH A, direct
Operacja: XCH
A := (direct)
(direct) :=
A(stare)
Liczba cykli : 1 Liczba bajtów: 2
XCH A, @Ri
Operacja: XCH
A := [Ri]
[Ri] := A(stare)
Liczba
cykli: 1 Liczba bajtów: 1
[edytuj] XCHD A, @Ri
Funkcja: Wymiana cyfr
Opis: XCHD powoduje wymian młodszych polówek (bitów 0-3, stanowiących zwykle cyfr szesnastkowa lub dziesiętną w kodzie BCD) akumulatora i bajtu wewnętrznej pamięci RAM (zaadresowanego pośrednio zawartości wskazanego rejestru). Stan żadnego ze wskaźników nie ulega zmianie
Przykład:
Rejestr R0 zawiera liczb 20H, akumulator 36H (00110110B), a bajt
wewnętrznej
pamięci RAM o adresie 20H zawiera 75H (01110101).
Instrukcja
XCHD A, @RO
spowoduje przyj cie przez bajt
wewnętrznej pamięci RAM o adresie 20H wartości 76H
(01110110B), a
przez akumulator wartości 35 (00110101B).
Operacja: XCHD
A3-0 := [Ri]3-0
[Ri]3-0 := A3-0(stare)
Liczba cykli : 1
Liczba bajtów : 1
[edytuj] XRL <bajt_przeznaczenia>, <bajt_źródłowy>
Funkcja: Logiczna funkcja EXOR dwóch zmiennych
Opis: XRL oblicza bitową sum modulo dwa dwóch wskazanych zmiennych bajtowych (każdy bajt traktowany jest jako zbiór ośmiu bitów). Wynik operacji umieszczany jest w pierwszej z wymienionych zmiennych. Wykonanie operacji nie zmienia stanu żadnego ze wskaźników. Możliwych jest 6 różnych kombinacji trybów adresowania dla dwóch używanych przez instrukcję operandów. jeśli miejscem przeznacza wyniku jest akumulator, to zmienna źródłowa może by adresowana w trybie rejestrowym, bezpośrednim, pośrednim (zawartości rejestru) lub natychmiastowym. jeśli miejsce przeznaczenia wyniku jest adresowane bezpośrednio, to zmienna źródłowa może by akumulatorem lub zmienną adresowaną w trybie natychmiastowym.
Uwaga:
jeśli instrukcja jest wykorzystywana do zmiany stanu linii portu, to
wartości u yt
jako pierwotny stan portu będzie wartość odczytana z
rejestru wyj ciowego portu, a nie
rzeczywisty stan wyprowadzeń
portu.
XRL A, Rn
Operacja: XRL
A := A xor Rn
Liczba cykli: 1 Liczba bajtów: 1
XRL A, direct
Operacja: XRL
A := A xor (direct)
Liczba cykli: 1
Liczba bajtów: 2
XRL A, @Ri
Operacja: XRL
A
- = A xor [Ri]
Liczba cykli: 1 Liczba bajtów: 1
XRL A, #data
Operacja: XRL
A := A xor data
Liczba cykli:
1 Liczba bajtów: 2
XRL direct, A
Operacja: XRL
(direct) := A xor (direct)
Liczba cykli: 1 Liczba bajtów:
2
XRL direct, #data
Operacja: XRL
(direct) :=
(direct) xor data
Liczba cykli: 2 Liczba bajtów: 3
[edytuj] Źródło
Ten materiał jest chroniony prawem autorskim
Autor wyraził zgodę na publikację tego opracowania na tej witrynie
Wyłączność na rozpowszechnianie tego dokumentu posiada:
http://mikrokontrolery.net
Jeśli znalazłeś ten dokument na innej stronie, napisz:
Radoslaw.Kwiecien/at/interia.pl
Jeśli chcesz umieścic ten dokument na swojej stronie, lub na płycie CD-ROM, napisz:
Radoslaw.Kwiecien/at/interia.pl
Dokument opracowano na podstawie książki
„Mikrokontrolery jednoukładowe rodziny 8051” Tomasza Stareckiego.