Serwis Edukacyjny w I-LO w Tarnowie ![]() Materiały dla uczniów liceum |
Wyjście Spis treści Wstecz Dalej Autor artykułu: mgr Jerzy Wałaszek |
©2023 mgr Jerzy Wałaszek |
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
SPIS TREŚCI |
Podrozdziały |
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.
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.
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 |
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 |
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.
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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. |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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 |
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.
|
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 |
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 |
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 |
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 |
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 |
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.
|
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 |
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 |
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 |
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.
|
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 |
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 |
![]() |
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.