|
Wyjście Spis treści Wstecz Dalej
Autor artykułu |
©2026 mgr Jerzy Wałaszek
|

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:
https://www.microchip.com/about-us/legal-information/copyright-usage-guidelines
| SPIS TREŚCI KONSERWACJA |
| 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 ©2026 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:
Serwis wykorzystuje pliki cookies. Jeśli nie chcesz ich otrzymywać, zablokuj je w swojej przeglądarce.
Informacje dodatkowe.