Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

Autor artykułu: mgr Jerzy Wałaszek
Konsultacje: Wojciech Grodowski, mgr inż. Janusz Wałaszek

©2023 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Instrukcje maszynowe PIC

Rodzina średnia
(ang. Mid-range family)

obrazek

Educational and Non-Profit Use of Copyrighted Material:

If you use Microchip copyrighted material solely for educational (non-profit) purposes falling under the “fair use” exception of the U.S. Copyright Act of 1976 then you do not need Microchip’s written permission. For example, Microchip’s permission is not required when using copyrighted material in: (1) an academic report, thesis, or dissertation; (2) classroom handouts or textbook; or (3) a presentation or article that is solely educational in nature (e.g., technical article published in a magazine).

https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines

SPIS TREŚCI
Podrozdziały

obrazek

Wprowadzenie

Rodzina średnia mikrokontrolerów PIC (ang. Mid-range PIC family) obejmuje bardzo liczną grupę mikrokontrolerów PIC. Większość z nich może pracować z częstotliwością zegarową do 20 MHz. Zestaw instrukcji maszynowych składa się z 35 instrukcji, z których każda ma długość 14 bitów (o 2 bity więcej niż w mikrokontrolerach PIC grupy podstawowej). Liczba instrukcji jest niewielka, zatem łatwo się ich nauczyć. Mikrokontrolery PIC z tej rodziny oferują zaawansowane funkcje, jak np. wewnętrzne i zewnętrzne źródła przerwań. Oto ich podstawowe własności:

Do mikrokontrolerów PIC grupy średniej należą mikrokontrolery: PIC10F3xx, PIC12F6xx, PIC12F7xx, PIC16F6xx, PIC16F7xx, PIC16F8xx, PIC16F9xx

Mikrokontrolery PIC z rodziny średniej są następnym szczeblem wydajności i funkcji w porównaniu z mikrokontrolerami rodziny podstawowej. Dzięki wykorzystaniu 14-bitowego słowa instrukcji oraz bogactwa modułów peryferyjnych nadają się one doskonale do wielowymiarowych aplikacji, które wymagają wyższego poziomu mocy obliczeniowej i sterowania, jednakże z tylko 35 łatwymi do nauki instrukcjami pozwalają na osiągnięcie optymalnej wydajności systemu bez większych problemów.

Na początek:  podrozdziału   strony 

Budowa instrukcji PIC

Mikrokontrolery PIC z rodziny średniej używają zestawu 35 instrukcji maszynowych o długości 14-bitów:
b13 b12 b11 b10 b09 b08 b07 b06 b05 b04 b03 b02 b01 b00

Pamięć programu zorganizowana jest w słowa 14-bitowe. Z tego powodu jeśli w instrukcji technicznej mikrokontrolera PIC znajdziesz informację o pojemności pamięci programu wyrażonej w bajtach, to liczbę tę należy podzielić przez 1,75, aby otrzymać liczbę słów. Na przykład producent podaje, iż mikrokontroler PIC16F689 posiada 7168 bajtów FLASH. Liczymy:

Otrzymujemy wynik 4096 słów, czyli program dla tego mikroprocesora może składać się z maksymalnie 4096 instrukcji.

Każda instrukcja PIC z rodziny średniej jest 14-bitowym słowem podzielonym na pole kodu operacji, które określa rodzaj instrukcji, oraz na jeden lub więcej argumentów, które jeszcze bardziej określają operację wykonywaną przez daną instrukcję. Instrukcje są zgrupowane w trzy główne kategorie:

Dla instrukcji zorientowanych bajtowo (tzn. operujących na bajcie danych) oznaczenie f reprezentuje desygnator zestawu rejestru, a d reprezentuje desygnator przeznaczenia. Desygnator zestawu rejestrów określa rejestr w zestawie, który zostanie użyty w instrukcji.

Desygnator przeznaczenia określa miejsce docelowe, w którym będzie umieszczony wynik danej operacji. Jeśli d ma wartość zero, to wynik jest umieszczany w rejestrze roboczym W. Jeśli d ma wartość jeden, to wynik jest umieszczany w rejestrze zestawu określonym w instrukcji.

Dla operacji zorientowanych bitowo (tzn. operujących na pojedynczym bicie danych) oznaczenie b oznacza desygnator pola bitowego wybierającego numer bitu przetwarzanego w instrukcji, natomiast f reprezentuje numer rejestru w zestawie, w którym ten bit jest umieszczony.

Dla operacji ze stałymi i operacji sterujących k reprezentuje 8- lub 11-bitową wartość stałej.

Wszystkie instrukcje wykonywane są w jednym takcie zegara, chyba że test warunkowy jest prawdziwy lub zmieniony zostaje licznik programu jako wynik działania instrukcji. W takich przypadkach wykonanie instrukcji zajmuje dwa cykle rozkazowe, w drugim takcie wykonywana jest instrukcja NOP. Jeden cykl rozkazowy składa się z czterech taktów oscylatora. Stąd przy oscylatorze pracującym z częstotliwością 4MHz normalny czas wykonania instrukcji wynosi 1 µs. Jeśli wykonywany w instrukcji test jest prawdziwy lub instrukcja zmienia licznik programu, to czas jej wykonania podwaja się i wynosi 2 µs. Nakładkowanie przyspiesza wykonywanie instrukcji.

Formaty instrukcji

Poniższy rysunek pokazuje trzy ogólne formaty, które mogą mieć instrukcje. Z ogólnego formatu instrukcji wynika, iż część przeznaczona na kod operacji słowa instrukcji ma długoś od 3 do 6 bitów informacji. Pozwala to na osiągnięcie 35 instrukcji.

Zorientowane bajtowo operacje na zestawie rejestrów
 

Zorientowane bitowo operacje na zestawie rejestrów
 

Operacje ze stałymi i operacje sterujące
 

Poniższa tabelka przedstawia zestaw instrukcji PIC w rodzinie średniej. 7-bitowe numery rejestrów są oznaczone przez "f", natomiast stałe jako "k". Numery bitów (0–7) są wybierane przez "b". Bit "d" wybiera miejsce docelowe danych przetwarzanych przez instrukcję: 0 oznacza rejestr roboczy W (akumulator), natomiast 1 oznacza, iż wynik operacji będzie zapisany z powrotem do rejestru źródłowego f. Wynik operacji może modyfikować znaczniki stanu C (ang. Carry – przeniesienie) i Z (ang. Zero), w przeciwnym razie nie są one zmieniane. Instrukcje dodawania i odejmowania (lecz nie obracania bitów), które ustawiają znacznik C, ustawiają również znacznik DC (ang. Digit Carry – przeniesienie z cyfry) będący przeniesieniem z bitu 3 na bit 4, co jest użyteczne przy arytmetyce BCD (ang. Binary Coded Decimal – liczby dziesiętne kodowane binarnie). Dodatkowo mogą być modyfikowane znaczniki TO (ang. Time-out – przekroczenie czasu) i PD (ang. Page-down – wyłączenie zasilania), szczegóły znajdziesz w instrukcji mikrokontrolera. Literą "x" oznaczono bity, których stan jest nieistotny, jednakże zaleca się ustawianie ich na 0, aby zachować kompatybilność z przyszłymi modelami mikrokontrolerów PIC rodziny średniej. Kody nieobjęte tabelką są nieokreślone i zastosowanie ich w programie może przynieść nieoczekiwany wynik.

Mnemonik,
argumenty
Opis Cykle
roz.
14-bitowe słowo instrukcji Zmieniane
znaczniki
MSB...   ...LSB
Operacje bajtowe na rejestrach
ADDWF f,d Dodanie W i f 1 00 0111 dfff ffff C, DC,Z
ANDWF f,d Koniunkcja bitowa W i f 1 00 0101 dfff ffff Z
CLRF f Zerowanie f 1 00 0001 1fff ffff Z
CLRW Zerowanie W 1 00 0001 0xxx xxxx Z
CLR f,d Zerowanie W lub f 1 00 0001 dfff ffff Z
COMF f,d Zaprzeczenie f 1 00 1001 dfff ffff Z
DECF f,d Zmniejszenie o 1 f 1 00 0011 dfff ffff Z
DECFSZ f,d Zmniejszenie o 1 f, pominięcie przy zerze 1/2 00 1011 dfff ffff
INCF f,d Zwiększenie o 1 f 1 00 1010 dfff ffff Z
INCFSZ f,d Zwiększenie o 1 f, pominięcie przy zerze 1/2 00 1111 dfff ffff
IORWF f,d Alternatywa bitowa W z f 1 00 0100 dfff ffff Z
MOVF f,d Przesłanie f 1 00 1000 dfff ffff Z
MOVWF f Przesłanie W do F 1 00 0000 1fff ffff
NOP Instrukcja pusta 1 00 0000 0xx0 0000
RLF f,d Obrót bitów f w lewo przez znacznik C
 
1 00 1101 dfff ffff C
RRF f,d Obrót bitów f w prawo przez znacznik C
1 00 1100 dfff ffff C
SUBWF f,d Odjęcie W od f 1 00 0010 dfff ffff C, DC, Z
SWAPF f,d Zamiana połówek f 1 00 0111 dfff ffff
XORWF f,d Bitowa suma modulo 2 W z f 1 00 0110 dfff ffff Z
Operacje bitowe na rejestrach
BCF f,b Zerowanie bitu b w f 1 01 00bb bfff ffff
BSF f,b Ustawianie bitu b w f 1 01 01bb bfff ffff
BTFSC f,b Testowanie bitu b w f, pominięcie przy wyzerowanym 1/2 01 10bb bfff ffff
BTFSS f,b Testowanie bitu b w f, pominięcie przy ustawionym 1/2 01 11bb bfff ffff
Operacje ze stałą i operacje sterujące
ADDLW k Dodanie stałej k do W 1 11 111x kkkk kkkk C, DC, Z
ANDLW k Koniunkcja bitowa stałej k i W 1 11 1001 kkkk kkkk Z
CALL k Wywołanie podprogramu o adresie k 2 10 0kkk kkkk kkkk
CLRWDT Zerowanie timera licznika zegarowego 1 00 0000 0110 0100 TO, PD
GOTO k Skok do adresu k 2 10 1kkk kkkk kkkk
IORLW k Alternatywa bitowa stałej k z W 1 11 1000 kkkk kkkk Z
MOVLW k Przesłanie stałej k do W 1 11 00xx kkkk kkkk
RETFIE Powrót z przerwania 2 00 0000 0000 1001
RETLW k Powrót z podprogramu ze stałą k w W 2 11 01xx kkkk kkkk
RETURN Powrót z podprogramu 2 00 0000 0000 1000
SLEEP Wejście w tryb uśpienia 1 00 0000 0110 0011 TO, PD
SUBLW k Odjęcie W od stałej k 1 11 110x kkkk kkkk C, DC, Z
XORLW k Bitowa suma modulo 2 stałej k i W 1 11 1010 kkkk kkkk Z
Na początek:  podrozdziału   strony 

Opis instrukcji

Symbol Opis
f Numer rejestru w zestawie
W Rejestr roboczy (akumulator)
b Numer bitu w rejestrze
k Wartość stała
x Wartość bitu bez znaczenia
d Bit określający rejestr docelowy operacji:
d = 0: rejestrem docelowym jest W
d = 1: rejestrem docelowym jest f
dest Rejestr docelowy zależny od stanu bitu d
TOS Szczyt stosu
PC Rejestr licznika programu
PCL Dolny bajt licznika programu
PCH Górne bity licznika programu
PCLATH Zatrzask górnych bitów licznika programu
GIE Bit globalnego włączania przerwań
WDT Timer licznika zegarowego
C Znacznik przeniesienia
DC Przeniesienie z bitu 3 do 4; używane przy operacjach arytmetycznych BCD do korekcji wyniku
Z Znacznik zera
TO Bit oznaczający przekroczenie czasu
PD Bit oznaczający wyłączenie zasilania
[ ] Pole bitowe
Przesłanie wyniku

Operacje w czasie taktów zegarowych

Każdy cykl rozkazowy (Tcy) złożony jest z czterech taktów Q (Q1-Q4). Takt Q jest taki sam jak takt oscylatora mikrokontrolera (TOSC). Takty Q wyznaczają w każdym cyklu rozkazowym okresy dekodowania, odczytu, przetwarzania danych, zapisu, itp. Poniższy wykres pokazuje związek taktów Q z cyklem rozkazowym. Ogólnie cztery takty Q w cyklu rozkazowym można podzielić na:

Q1: Takt dekodowania instrukcji lub wymuszona operacja pusta
Q2: Takt odczytu danych lub operacja pusta
Q3: Przetwarzanie danych
Q4: Takt zapisu danych lub operacja pusta

Pobranie instrukcji wykonywane jest w trakcie wykonywania poprzednio pobranej instrukcji, zatem każda instrukcja zajmuje dwa cykle rozkazowe, jednak dzięki nakładkowaniu efektywny czas wykonania instrukcji jest równy jednemu cyklowi rozkazowemu (z wyjątkiem instrukcji rozgałęzień w programie, które zajmują 2 cykle rozkazowe). Poniższy rysunek pokazuje związek cykli rozkazowych z taktami Q:

Kolejny rysunek wyjaśnia ideę nakładkowania:

Wszystkie instrukcje są wykonywane w pojedynczym cyklu rozkazowym z wyjątkiem instrukcji rozgałęzień w programie, które wykonują się w dwóch cyklach, ponieważ pobrana instrukcja zostaje usunięta z kolejki nakładkowania, a w tym jest pobierana instrukcja spod nowego adresu, a później jest wykonywana.

W opisie każdej instrukcji pokazano szczegóły operacji w taktach Q.


ADDLW (ang. Add Literal and W – Dodanie stałej i W)

Składnia: ADDLW k

Argumenty: k = 0...255

Operacja: W ← W + k

Modyfikowane znaczniki stanu: C, DC, Z

Kod: 11 111x kkkk kkkk

Opis: Zawartość akumulatora W zostaje dodana do 8-bitowej stałej k. Wynik jest umieszczany w akumulatorze W.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
stałej k
Przetwarzanie
danych
Zapis do
rejestru W


ADDWF (ang. Add W and f – Dodanie W i f)

Składnia: ADDWF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: dest ← W + f

Modyfikowane znaczniki stanu: C, DC, Z

Kod: 00 0111 dfff ffff

Opis: Dodanie zawartości rejestru roboczego W (akumulatora) i rejestru f. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
rejestru f
Przetwarzanie
danych
Zapis do
rejestru dest


ANDLW (ang. And Literal with W – Koniunkcja bitowa stałej i W)

Składnia: ANDLW k

Argumenty: k = 0...255

Operacja: W ← W & k

Modyfikowane znaczniki stanu: Z

Kod: 11 1001 kkkk kkkk

Opis: Zawartość akumulatora W zostaje poddana operacji koniunkcji bitowej z 8-bitową stałą k. Wynik jest umieszczany w akumulatorze W.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
stałej k
Przetwarzanie
danych
Zapis do
rejestru W


ANDWF (ang. And W and f – Koniunkcja bitowa W i f)

Składnia: ANDWF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: dest ← W & f

Modyfikowane znaczniki stanu: Z

Kod: 00 0101 dfff ffff

Opis: Zawartość akumulatora W zostaje poddana operacji koniunkcji bitowej z rejestrem f. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
rejestru f
Przetwarzanie
danych
Zapis do
rejestru dest


BCF (ang. Bit Clear f – Zerowanie bitu w f)

Składnia: BCF f,b

Argumenty: f = 0...127, b = 0...7

Operacja: f[b] ← 0

Modyfikowane znaczniki stanu: żaden

Kod: 01 00bb bfff ffff

Opis: Bit b rejestru f zostaje wyzerowany.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
rejestru f
Przetwarzanie
danych
Zapis do
rejestru f


BSF (ang. Bit Set f – Ustawienie bitu w f)

Składnia: BSF f,b

Argumenty: f = 0...127, b = 0...7

Operacja: f[b] ← 1

Modyfikowane znaczniki stanu: żaden

Kod: 01 01bb bfff ffff

Opis: Bit b rejestru f zostaje ustawiony na 1.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
rejestru f
Przetwarzanie
danych
Zapis do
rejestru f


BTFSC (ang. Bit Test f, Skip if Clear – Testowanie bitu w f, pominięcie przy wyzerowanym)

Składnia: BTFSC f,b

Argumenty: f = 0...127, b = 0...7

Operacja: Pominięcie następnej instrukcji, jeśli f[b] = 0

Modyfikowane znaczniki stanu: żaden

Kod: 01 10bb bfff ffff

Opis: Jeśli bit b w rejestrze f ma stan 0, to zostaje pominięta następna instrukcja. Jeśli bit ten ma stan 0, to następna instrukcja pobrana w czasie wykonywania instrukcji bieżącej (nakładkowanie) zostaje usunięta z kolejki i zamiast niej mikroprocesor wykonuje instrukcję pustą NOP, co powoduje, iż instrukcja BTFSC zajmuje w tym przypadku 2 cykle rozkazowe.

Liczba cykli rozkazowych: 1/2

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
rejestru f
Przetwarzanie
danych
Brak
działania

Przy pominięciu (drugi cykl rozkazowy):

Q1 Q2 Q3 Q4
Brak
działania
Brak
działania
Brak
działania
Brak
działania

BTFSS (ang. Bit Test f, Skip if Set – Testowanie bitu w f, pominięcie przy ustawionym)

Składnia: BTFSS f,b

Argumenty: f = 0...127, b = 0...7

Operacja: Pominięcie następnej instrukcji, jeśli f[b] = 1

Modyfikowane znaczniki stanu: żaden

Kod: 01 11bb bfff ffff

Opis: Jeśli bit b w rejestrze f ma stan 1, to zostaje pominięta następna instrukcja. Jeśli bit ten ma stan 1, to następna instrukcja pobrana w czasie wykonywania instrukcji bieżącej (nakładkowanie) zostaje usunięta z kolejki i zamiast niej mikroprocesor wykonuje instrukcję pustą NOP, co powoduje, iż instrukcja BTFSS zajmuje w tym przypadku 2 cykle rozkazowe.

Liczba cykli rozkazowych: 1/2

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
rejestru f
Przetwarzanie
danych
Brak
działania

Przy pominięciu (drugi cykl rozkazowy):

Q1 Q2 Q3 Q4
Brak
działania
Brak
działania
Brak
działania
Brak
działania

CALL (ang. Call Subroutine – Wywołanie podprogramu)

Składnia: CALL k

Argumenty: k = 0...2047

Operacja:

TOS ← PC + 1
PC[10:0] ← k
PC[12:11] ← PCLATH[4:3]

Modyfikowane znaczniki stanu: żaden

Kod: 10 0kkk kkkk kkkk

Opis: Wywołanie podprogramu. Najpierw 13-bitowy adres powrotu (PC + 1) jest umieszczany na szczycie stosu. 11-bitowy adres bezpośredni jest ładowany do dolnych jedenastu bitów licznika programu PC[10:0]. Górne bity PC zostają załadowane z zatrzasków PCLATH[4:3]. Instrukcja CALL jest wykonywana w dwóch cyklach rozkazowych. Jest to konieczne, aby przeładować kolejkę instrukcji.

Liczba cykli rozkazowych: 2

Operacje w taktach zegarowych:

Pierwszy cykl:

Q1 Q2 Q3 Q4
Dekodowanie Odczyt
stałej k
Przetwarzanie
danych
Brak
działania

Drugi cykl:

Q1 Q2 Q3 Q4
Brak
działania
Brak
działania
Brak
działania
Brak
działania

CLRF (ang. Clear f – Zerowanie f)

Składnia: CLRF f

Argumenty: f = 0...127

Operacja:

f ← 00h
Z ← 1

Modyfikowane znaczniki stanu: Z

Kod: 00 0001 1fff ffff

Opis: Zawartość rejestru f jest zerowana a znacznik zera Z jest ustawiany. W rzeczywistości jest to instrukcja CLR f,1.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
rejestru f
Przetwarzanie
danych
Zapis do
rejestru f


CLRW (ang. Clear W – Zerowanie W)

Składnia: CLRW

Argumenty: brak

Operacja:

W ← 00h
Z ← 1

Modyfikowane znaczniki stanu: Z

Kod: 00 0001 0xxx xxxx

Opis: Zawartość rejestru W jest zerowana a znacznik zera Z jest ustawiany. W rzeczywistości jest to instrukcja CLR f,0, gdzie rejestr f (x) jest odczytywany, lecz nie zostaje użyty w instrukcji.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
rejestru f (x)
Przetwarzanie
danych
Zapis do
rejestru W


CLRWDT (ang. Clear Watchdog Timer – Zerowanie timera licznika zegarowego)

Składnia: CLRWDT

Argumenty: brak

Operacja:

WDT ← 00h
preskaler WDT ← 0
TO ← 1
PD ← 1

Modyfikowane znaczniki stanu: TO, PD

Kod: 00 0000 0110 0100

Opis: Instrukcja CLRWDT zeruje timer licznika zegarowego oraz licznik jego preskalera. Ustawiane są bity stanu TO i PD.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Brak
działania
Przetwarzanie
danych
Zerowanie
licznika WDT
Uwaga:   Instrukcja CLRWDT nie zmienia ustawień preskalera licznika zegarowego.


COMF (ang. Compliment f – Negacja f)

Składnia: COMF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: dest ← f

Modyfikowane znaczniki stanu: Z

Kod: 00 1001 dfff ffff

Opis: Wszystkie bity rejestru f zostają zanegowane i wynik jest umieszczany w rejestrze docelowym dest. Jeśli d jest równe 0, to wynik negacji zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
rejestru f
Przetwarzanie
danych
Zapis do
rejestru dest


DECF (ang. Decrement f – Zmniejszenie f o 1)

Składnia: DECF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: dest ← f - 1

Modyfikowane znaczniki stanu: Z

Kod: 00 0011 dfff ffff

Opis: Zawartość rejestru f zostaje zmniejszona o 1 i wynik jest umieszczany w rejestrze docelowym dest. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
rejestru f
Przetwarzanie
danych
Zapis do
rejestru dest


DECFSZ (ang. Decrement f, Skip if Zero – Zmniejszenie o 1 rejestru f, pominięcie przy zerze)

Składnia: DECFSZ f,d

Argumenty: f = 0...127, d = 0...1

Operacja:

dest ← f -1, pominięcie następnej instrukcji, jeśli wynik = 0

Modyfikowane znaczniki stanu: żaden

Kod: 00 1011 dfff ffff

Opis: Zawartość rejestru f zostaje zmniejszona o 1 i wynik jest umieszczany w rejestrze docelowym dest. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f. Jeśli wynik jest równy zero, to następna instrukcja pobrana w czasie wykonywania instrukcji bieżącej (nakładkowanie) zostaje usunięta z kolejki i zamiast niej mikroprocesor wykonuje instrukcję pustą NOP, co powoduje, iż instrukcja DECFSZ zajmuje w tym przypadku 2 cykle rozkazowe.

Liczba cykli rozkazowych: 1/2

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
rejestru f
Przetwarzanie
danych
Zapis
rejestru dest

Przy pominięciu (drugi cykl):

Q1 Q2 Q3 Q4
Brak
działania
Brak
działania
Brak
działania
Brak
działania

GOTO (ang. Unconditional Jump – Skok bezwarunkowy)

Składnia: CALL k

Argumenty: k = 0...2047

Operacja:

PC[10:0] ← k
PC[12:11] ← PCLATH[4:3]

Modyfikowane znaczniki stanu: żaden

Kod: 10 1kkk kkkk kkkk

Opis: Wykonanie bezwarunkowego skoku w programie. 11-bitowy adres bezpośredni jest ładowany do dolnych jedenastu bitów licznika programu PC[10:0]. Górne bity PC zostają załadowane z zatrzasków PCLATH[4:3]. Instrukcja GOTO jest wykonywana w dwóch cyklach rozkazowych. Jest to konieczne, aby przeładować kolejkę instrukcji.

Liczba cykli rozkazowych: 2

Operacje w taktach zegarowych:

Pierwszy cykl:

Q1 Q2 Q3 Q4
Dekodowanie Odczyt
stałej k
Przetwarzanie
danych
Brak
działania

Drugi cykl:

Q1 Q2 Q3 Q4
Brak
działania
Brak
działania
Brak
działania
Brak
działania

INCF (ang. Increment f – Zwiększenie o 1 f)

Składnia: INCF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: dest ← f + 1

Modyfikowane znaczniki stanu: Z

Kod: 00 1010 dfff ffff

Opis: Zawartość rejestru f zostaje zwiększona o 1 i wynik jest umieszczany w rejestrze docelowym dest. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
rejestru f
Przetwarzanie
danych
Zapis do
rejestru dest


INCFSZ (ang. Decrement f, Skip if Zero – Zwiększenie o 1 rejestru f, pominięcie przy zerze)

Składnia: DECFSZ f,d

Argumenty: f = 0...127, d = 0...1

Operacja:

dest ← f +1, pominięcie następnej instrukcji, jeśli wynik = 0

Modyfikowane znaczniki stanu: żaden

Kod: 00 1111 dfff ffff

Opis: Zawartość rejestru f zostaje zwiększona o 1 i wynik jest umieszczany w rejestrze docelowym dest. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f. Jeśli wynik jest równy zero, to następna instrukcja pobrana w czasie wykonywania instrukcji bieżącej (nakładkowanie) zostaje usunięta z kolejki i zamiast niej mikroprocesor wykonuje instrukcję pustą NOP, co powoduje, iż instrukcja DECFSZ zajmuje w tym przypadku 2 cykle rozkazowe.

Liczba cykli rozkazowych: 1/2

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
rejestru f
Przetwarzanie
danych
Zapis
rejestru dest

Przy pominięciu (drugi cykl):

Q1 Q2 Q3 Q4
Brak
działania
Brak
działania
Brak
działania
Brak
działania

IORLW (ang. Inclusive OR Literal with W – Alternatywa bitowa stałej i W)

Składnia: IORLW k

Argumenty: k = 0...255

Operacja: W ← W | k

Modyfikowane znaczniki stanu: Z

Kod: 11 1000 kkkk kkkk

Opis: Zawartość akumulatora W zostaje poddana operacji alternatywy bitowej z 8-bitową stałą k. Wynik jest umieszczany w akumulatorze W.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
stałej k
Przetwarzanie
danych
Zapis do
rejestru W


IORWF (ang. Inclusive OR W and f – Alternatywa bitowa W i f)

Składnia: IORWF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: dest ← W | f

Modyfikowane znaczniki stanu: Z

Kod: 00 0100 dfff ffff

Opis: Zawartość akumulatora W zostaje poddana operacji alternatywy bitowej z rejestrem f. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
rejestru f
Przetwarzanie
danych
Zapis do
rejestru dest


MOVLW (ang. Move Literal to W – Załadowanie stałej do W)

Składnia: MOVLW k

Argumenty: k = 0...255

Operacja: W ← k

Modyfikowane znaczniki stanu: żaden

Kod: 11 00xx kkkk kkkk

Opis: 8-bitowa stała k zostaje umieszczona w akumulatorze W.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
stałej k
Przetwarzanie
danych
Zapis do
rejestru W


MOVF (ang. Move f – Przesłanie f)

Składnia: MOVF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: dest ← f

Modyfikowane znaczniki stanu: Z

Kod: 00 1000 dfff ffff

Opis: Zostaje pobrany rejestr f. Jeśli d jest równe 0, to rejestr f zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f. Jest to przydatne przy testowaniu stanu rejestru f, ponieważ w tej operacji ustawiany jest znacznik zera Z.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
rejestru f
Przetwarzanie
danych
Zapis do
rejestru dest


MOVWF (ang. Move W to f – Przesłanie W do f)

Składnia: MOVWF f

Argumenty: f = 0...127

Operacja: f ← W

Modyfikowane znaczniki stanu: żaden

Kod: 00 0000 1fff ffff

Opis: Dane z rejestru W zostają umieszczone w rejestrze f.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
rejestru f
Przetwarzanie
danych
Zapis do
rejestru f


NOP (ang. No Operation – Brak działania)

Składnia: NOP

Argumenty: brak

Operacja: brak działania

Modyfikowane znaczniki stanu: żaden

Kod: 00 0000 0xx0 0000

Opis: Instrukcja pusta, brak operacji.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Brak
działania
Brak
działania
Brak
działania


OPTION (ang. Load Option Register – Załadowanie rejestru Option)

Składnia: OPTION

Argumenty: brak

Operacja: OPTION ← W

Modyfikowane znaczniki stanu: żaden

Kod: 00 0000 0110 0010

Opis: Zawartość akumulatora W zostaje załadowana do rejestru OPTION. Instrukcja ta jest utrzymywana dla kompatybilności kodu z mikrokontrolerami serii PIC16C5x. Ponieważ OPTION jest rejestrem zapisywalnym i odczytywalnym, to użytkownik może go zaadresować bezpośrednio.

Liczba cykli rozkazowych: 1

Aby zapewnić kompatybilność z przyszłymi mikrokontrolerami serii PIC16xx, nie używaj tej instrukcji.

RETFIE (ang. Return From Interrupt– Powrót z przerwania)

Składnia: RETFIE

Argumenty: brak

Operacja:

PC ← TOS
GIE ← 1

Modyfikowane znaczniki stanu: żaden

Kod: 00 0000 0000 1001

Opis: Powrót z przerwania. 13-bitowy adres ze szczytu stosu (TOS) zostaje załadowany do rejestru licznika programu PC. Bit globalnego włączenia przerwań (ang. Global Interrupt Enable bit, GIE – INTCON[7]) jest automatycznie ustawiany na 1, co uaktywnia przyjmowanie przerwań. Instrukcja zajmuje 2 cykle zegarowe.

Liczba cykli rozkazowych: 2

Operacje w taktach zegarowych:

Pierwszy cykl:
Q1 Q2 Q3 Q4
Dekodowanie Brak
działania
Przetwarzanie
danych
Brak
działania

Drugi cykl:
Q1 Q2 Q3 Q4
Brak
działania
Brak
działania
Brak
działania
Brak
działania


RETLW (ang. Return with Literal in W – Powrót z podprogramu ze stałą w W)

Składnia: RETLW k

Argumenty: k = 0...255

Operacja:

W ← k
PC ← TOS

Modyfikowane znaczniki stanu: żaden

Kod: 11 01xx kkkk kkkk

Opis: Powrót z podprogramu. 8-bitowa stała k zostaje umieszczona w akumulatorze W. Licznik programu PC zostaje załadowany 13-bitowym adresem ze szczytu stosu TOS. Instrukcja zajmuje 2 cykle rozkazowe.

Liczba cykli rozkazowych: 2

Operacje w taktach zegarowych:

Pierwszy cykl:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
stałej k
Przetwarzanie
danych
Zapis
do rejestru W

Drugi cykl:
Q1 Q2 Q3 Q4
Brak
działania
Brak
działania
Brak
działania
Brak
działania


RETURN (ang. Return from Subroutine – Powrót z podprogramu)

Składnia: RETURN

Argumenty: brak

Operacja: PC ← TOS

Modyfikowane znaczniki stanu: żaden

Kod: 00 0000 0000 1000

Opis: Powrót z podprogramu. Licznik programu PC zostaje załadowany 13-bitowym adresem ze szczytu stosu TOS. Instrukcja zajmuje 2 cykle rozkazowe.

Liczba cykli rozkazowych: 2

Operacje w taktach zegarowych:

Pierwszy cykl:
Q1 Q2 Q3 Q4
Dekodowanie Brak
działania
Przetwarzanie
danych
Brak
działania

Drugi cykl:
Q1 Q2 Q3 Q4
Brak
działania
Brak
działania
Brak
działania
Brak
działania


RLF (ang. Rotate Left f through Carry – Obrót bitów f w lewo poprzez przeniesienie)

Składnia: RLF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: Zobacz na opis poniżej.

Modyfikowane znaczniki stanu: C

Kod: 00 1101 dfff ffff

Opis: Bity rejestru f są obracane w lewo poprzez znacznik przeniesienia. Jeśli d = 0, to wynik trafi do rejestru roboczego W, jeśli d = 1, to wynik trafi z powrotem do rejestru f.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
rejestru f
Przetwarzanie
danych
Zapis do
rejestru dest


RRF (ang. Rotate Right f through Carry – Obrót bitów f w prawo poprzez przeniesienie)

Składnia: RRF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: Zobacz na opis poniżej.

Modyfikowane znaczniki stanu: C

Kod: 00 1100 dfff ffff

Opis: Bity rejestru f są obracane w prawo poprzez znacznik przeniesienia. Jeśli d = 0, to wynik trafi do rejestru roboczego W, jeśli d = 1, to wynik trafi z powrotem do rejestru f.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
rejestru f
Przetwarzanie
danych
Zapis do
rejestru dest


SLEEP (Uśpienie)

Składnia: SLEEP

Argumenty: brak

Operacja:

WDT ← 00h
Preskaler WDT ← 0
TO ← 1
PD ← 0

Modyfikowane znaczniki stanu: TO, PD

Kod: 00 0000 0110 0011

Opis: Opis: Zostaje ustawiony znacznik zakończenia zliczania TO (ang. Time-out Status bit). Znacznik wyłączenia zasilania PD (ang. Power-down Status bit) jest zerowany. Licznik zegarowy i jego preskaler są zerowane. Procesor zostaje wprowadzony w tryb uśpienia z zatrzymanym oscylatorem. Szczegóły trybu uśpienia znajdziesz w dokumentacji danego mikrokontrolera.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Brak
działania
Brak
działania
Uśpienie

Uwaga: Instrukcja SLEEP nie zmienia ustawień preskalera timera licznika zegarowego.

SUBLW (ang. Subtract W from Literal – Odjęcie W od stałej)

Składnia: SUBLW k

Argumenty: k = 0...255

Operacja: W ← k - W

Modyfikowane znaczniki stanu: C, DC, Z

Kod: 11 110x kkkk kkkk

Opis: Zawartość akumulatora W zostaje odjęta od 8-bitowej stałej k (metodą uzupełnień do 2). Wynik jest umieszczany w akumulatorze W.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
stałej k
Przetwarzanie
danych
Zapis do
rejestru W


SUBWF (ang. Subtract W from f – Odjęcie W od f)

Składnia: SUBWF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: dest ← f - W

Modyfikowane znaczniki stanu: C, DC, Z

Kod: 00 0010 dfff ffff

Opis: Zawartość akumulatora W zostaje odjęta od rejestru f (metodą uzupełnień do 2). Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
rejestru f
Przetwarzanie
danych
Zapis do
rejestru dest


SWAPF (ang. Swap Nibbles in f – Wymiana połówek f)

Składnia: SWAPF f,d

Argumenty: f = 0...127, d = 0...1

Operacja:

dest[7:4] ← f[3:0]
dest[3:0] ← f[7:4]

Modyfikowane znaczniki stanu: żaden

Kod: 00 1110 dfff ffff

Opis: Górna i dolna połówka (4 bity) rejestru f zostają zamienione miejscami. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
rejestru f
Przetwarzanie
danych
Zapis do
rejestru dest


TRIS (ang. Load TRIS register – Załadowanie rejestru TRIS)

Składnia: TRIS f

Argumenty: f = 5...7

Operacja: rejestr TRIS f ← W

Modyfikowane znaczniki stanu: żaden

Kod: 00 0000 0110 0fff

Opis: Zawartość akumulatora W zostaje załadowana do rejestru TRIS f. Instrukcja ta jest utrzymywana dla kompatybilności kodu z mikrokontrolerami serii PIC16C5x. Ponieważ rejestry TRIS f są zapisywalne i odczytywalne, to użytkownik może je zaadresować bezpośrednio.

Liczba cykli rozkazowych: 1

Aby zapewnić kompatybilność z przyszłymi mikrokontrolerami serii PIC16xx, nie używaj tej instrukcji.

XORLW (ang. Exclusive OR Literal with W – Suma modulo 2 stałej z W)

Składnia: XORLW k

Argumenty: k = 0...255

Operacja: W ← W ^ k

Modyfikowane znaczniki stanu: Z

Kod: 11 1010 kkkk kkkk

Opis: Zawartość akumulatora W zostaje poddana operacji sumy modulo 2 z 8-bitową stałą k. Wynik jest umieszczany w akumulatorze W.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
stałej k
Przetwarzanie
danych
Zapis do
rejestru W


XORWF (ang. Exclusive OR W with f – Suma modulo 2 W z f)

Składnia: XORWF f,d

Argumenty: f = 0...127, d = 0...1

Operacja: dest ← W ^ f

Modyfikowane znaczniki stanu: Z

Kod: 00 0110 dfff ffff

Opis: Zawartość akumulatora W zostaje poddana operacji sumy modulo 2 z rejestrem f. Jeśli d jest równe 0, to wynik zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.

Liczba cykli rozkazowych: 1

Operacje w taktach zegarowych:
Q1 Q2 Q3 Q4
Dekodowanie Odczyt
rejestru f
Przetwarzanie
danych
Zapis do
rejestru dest

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

w I Liceum Ogólnokształcącym
im. Kazimierza Brodzińskiego
w Tarnowie
ul. Piłsudskiego 4
©2023 mgr Jerzy Wałaszek

Materiały tylko do użytku dydaktycznego. Ich kopiowanie i powielanie jest dozwolone
pod warunkiem podania źródła oraz niepobierania za to pieniędzy.

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.

Informacje dodatkowe.