|
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 |
8-nóżkowy PIC12F510, dostępny również w obudowie 2x3 DFN, posiada pojedynczy komparator oraz 8-bitowy przetwornik A/C, 8 MHz oscylator wewnętrzny oraz ulepszony DRT, natomiast 14-nóżkowy PIC16F506 oferuje dwa komparatory w dodatku do 8-bitowego przetwornika A/C. Te mikrokontrolery PIC rodziny podstawowej dają inżynierom możność zastosowania mikrokontrolerów w aplikacjach, które historycznie były pozbawione takich układów. Czy ograniczenia dotyczą kosztów, czy dostępnej przestrzeni, mikrokontrolery PIC z rodziny podstawowej rozwiązują te problemy udostępniając strukturę cenową, która czyni opłacalnymi tworzenie prawie jednorazowych projektów, przy rozmiarach obudowy tak małych, że układy mikrokontrolerów mogą zostać łatwo zaimplementowane w większości projektów z ograniczoną przestrzenią.
8-bitowe mikrokontrolery PIC® rodziny podstawowej z pamięcią FLASH (12-bitowe słowo instrukcji)
| Układ | Pojemność FLASH w bajtach (słowach) |
Liczba bajtów RAM |
Liczba końcówek we/wy |
Moduły analogowe | Wewnętrzny oscylator |
Moduły cyfrowe | Obudowy | |
| Przetw. A/C | Komp. | Timery/WDT | ||||||
| PIC10F200 | 384 (256) | 16 | 4 | – | – | 4 MHz | 1 8-bitowy, 1 WDT | 6OT, 8MC, 8P |
| PIC10F202 | 768 (512) | 24 | 4 | – | – | 4 MHz | 1 8-bitowy, 1 WDT | 6OT, 8MC, 8P |
| PIC10F204 | 384 (256) | 16 | 4 | – | 1 | 4 MHz | 1 8-bitowy, 1 WDT | 6OT, 8MC, 8P |
| PIC10F206 | 768 (512) | 24 | 4 | – | 1 | 4 MHz | 1 8-bitowy, 1 WDT | 6OT, 8MC, 8P |
| PIC10F220 | 384 (256) | 16 | 4 | 2 x 8-bitowy | – | 4/8 MHz | 1 8-bitowy, 1 WDT | 6OT, 8MC, 8P |
| PIC10F222 | 768 (512) | 23 | 4 | 2 x 8-bitowy | – | 4/8 MHz | 1 8-bitowy, 1 WDT | 6OT, 8MC, 8P |
| PIC12F508 | 768 (512) | 25 | 6 | – | – | 4 Mhz | 1 8-bitowy, 1 WDT | 8MC, 8MS, 8P, 8SN |
| PIC12F509 | 1536 (1024) | 41 | 6 | – | – | 4 MHz | 1 8-bitowy, 1 WDT | 8MC, 8MS, 8P, 8SN |
| PIC12F510 | 1536 (1024) | 38 | 6 | 3 x 8-bitowy | 1 | 4/8 MHz | 1-8-bitowy, 1 WDT | 8MC, 8MS, 8P, 8SN |
| PIC16F505 | 1536 (1024) | 72 | 12 | – | – | 4 MHz | 1 8-bitowy, 1 WDT | 14P, 14SL, 14ST |
| PIC16F506 | 1536 (1024) | 67 | 12 | 3 x 8-bitowy | 2 | 4/8 MHz | 1 8-bitowy, 1 WDT | 14P, 14SL, 14ST |
| PIC16F54 | 768 (512) | 25 | 12 | – | – | 4 MHz | 1 8-bitowy, 1 WDT | 18P, 18SO, 20SS |
| PIC16F57 | 3072 (2048) | 72 | 20 | – | – | 4 MHz | 1 8-bitowy, 1 WDT | 28P, 28SO, 28SS |
| PIC16F59 | 3072 (2048) | 134 | 32 | – | – | 4 MHz | 1 8-bitowy, 1 WDT | 40P, 44PT |
| Symbole obudów: | MC = 2x3 DFN (8-lead) MS = MSOP OT = SOT-23 P = PDIP PT = TQFP SL = SOIC (.150″), SN (.150″) SO = SOIC SS = SSOP ST = TSSOP |
| b11 | b10 | b09 | b08 | b07 | b06 | b05 | b04 | b03 | b02 | b01 | b00 |
Pamięć programu zorganizowana jest w słowa 12-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,5, aby otrzymać liczbę słów. Na przykład producent podaje, iż mikrokontroler PIC16F506 posiada 1536 bajtów FLASH. Liczymy:

Otrzymujemy wynik 1024 słów, czyli program dla tego mikroprocesora może składać się z maksymalnie 1024 instrukcji.
Rodzinę podstawową PIC (ang. base-line PIC family) reprezentują mikrokontrolery z serii PIC10, jak również niektóre z serii PIC12 i PIC16. Występują one w obudowach od 6- do 40-nóżkowych. Posiadają 32-bajtowy zestaw rejestrów (ang. register file) oraz mały, dwupoziomowy stos dla adresów powrotnych z podprogramów.
Zwykle pierwsze 7...9 bajtów zestawu rejestrów przeznaczone jest na rejestry o specjalnej funkcji, a pozostałe bajty są pamięcią RAM ogólnego przeznaczenia. Wskaźniki są zaimplementowane przy użyciu pary rejestrów: po zapisaniu adresu do FSR (ang. file select register – rejestr wyboru zestawu), rejestr INDF (ang. indirect f – pośredni rejestr f) staje się odpowiednikiem zaadresowanego w FSR rejestru. Jeśli w mikrokontrolerze zaimplementowana jest pamięć RAM w bankach, to numer banku jest wybierany przez 3 najstarsze bity w FSR. Wpływa to na rejestry 16–31; rejestry 0–15 są globalne i nie wpływają na nie bity wyboru banku.
Z powodu bardzo ograniczonej przestrzeni rejestrów (5 bitów), 4 rzadko odczytywane rejestry nie posiadają przydzielonych adresów, lecz są zapisywane przy pomocy specjalnych instrukcji (OPTION i TRIS).
Przestrzeń adresowa ROM ma rozmiar 512 słów 12-bitowych i może zostać rozszerzona do 2058 słów za pomocą banków. Instrukcje CALL (wywołanie podprogramu) i GOTO (skok w nowe miejsce w programie) określają dolne 9 bitów nowego adresu kodu: dodatkowe górne bity są pobierane z rejestru stanu. Zwróć uwagę, iż instrukcja CALL zawiera tylko 8 bitów adresu i może określić jedynie adresy w pierwszej połowie każdej 512-słowowej stronie pamięci programu.
Instrukcje maszynowe mikrokontrolera PIC rodziny podstawowej posiadają trzy główne formaty:
| d = 0, przeznaczeniem jest rejestr W d = 1, przeznaczeniem jest rejestr f f = 5-bitowy adres rejestru (0...31) |
Operacje bitowe na rejestrach
| b = 3-bitowy numer bitu (0...7) f = 5-bitowy adres rejestru (0...31) |
Operacje sterujące i operacje ze stałą
(z wyjątkiem GOTO)
| k = 8-bitowa stała (0...255) |
instrukcja GOTO
| k = 9-bitowa stała (0...511) |
Poniższa tabelka przedstawia zestaw instrukcji PIC w rodzinie podstawowej. 5-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, 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).
| Bity instrukcji | Mnemonik | C? | Z? | Cykle roz. |
Opis | |||||||||||
| 11 | 10 | 09 | 08 | 07 | 06 | 05 | 04 | 03 | 02 | 01 | 01 | |||||
| Kod Operacji | Instrukcje różne | |||||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | NOP | 1 | Instrukcja pusta (MOVW 0,0) | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | OPTION | 1 | Kopiowanie W do rejestru OPTION | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | SLEEP | 1 | Przejście w tryb uśpienia | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | CLRWDT | 1 | Zerowanie licznika zegarowego | ||
| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | f | TRIS f | 1 | Kopiowanie W do rejestru TRIS (f = 5, 6 lub 7) | ||||
| Kod Operacji | d | Rejestr | Operacje arytmetyczne/logiczne w JAL: dest ← operacja(f,W) | |||||||||||||
| 0 | 0 | 0 | 0 | 0 | 0 | 1 | f | MOVWF f | 1 | f ← W | ||||||
| 0 | 0 | 0 | 0 | 0 | 1 | d | f | CLR f,d | Z | 1 | dest ← 0, zwykle zapisywane jako CLRW lub CLRF f | |||||
| 0 | 0 | 0 | 0 | 1 | 0 | d | f | SUBWF f,d | C | Z | 1 | dest ← f − W (dest ← f+~W+1) | ||||
| 0 | 0 | 0 | 0 | 1 | 1 | d | f | DECF f,d | Z | 1 | dest ← f − 1 | |||||
| 0 | 0 | 0 | 1 | 0 | 0 | d | f | IORWF f,d | Z | 1 | dest ← f | W, alternatywa bitowa | |||||
| 0 | 0 | 0 | 1 | 0 | 1 | d | f | ANDWF f,d | Z | 1 | dest ← f & W, koniunkcja bitowa | |||||
| 0 | 0 | 0 | 1 | 1 | 0 | d | f | XORWF f,d | Z | 1 | dest ← f ^ W, bitowa suma modulo 2 | |||||
| 0 | 0 | 0 | 1 | 1 | 1 | d | f | ADDWF f,d | C | Z | 1 | dest ← f + W | ||||
| 0 | 0 | 1 | 0 | 0 | 0 | d | f | MOVF f,d | Z | 1 | dest ← f | |||||
| 0 | 0 | 1 | 0 | 0 | 1 | d | f | COMF f,d | Z | 1 | dest ← ~f, negacja bitów | |||||
| 0 | 0 | 1 | 0 | 1 | 0 | d | f | INCF f,d | Z | 1 | dest ← f + 1 | |||||
| 0 | 0 | 1 | 0 | 1 | 1 | d | f | DECFSZ f,d | 1/2 | dest ← f − 1, następnie pomijanie kolejnej instrukcji, jeśli zero | ||||||
| 0 | 0 | 1 | 1 | 0 | 0 | d | f | RRF f,d | C | 1 | dest ← CARRY<<7 | f>>1, obrót bitów w
prawo poprzez przeniesienie
|
|||||
| 0 | 0 | 1 | 1 | 0 | 1 | d | f | RLF f,d | C | 1 | dest ← F<<1 | CARRY, obrót bitów w lewo
poprzez przeniesienie
|
|||||
| 0 | 0 | 1 | 1 | 1 | 0 | d | f | SWAPF f,d | 1 | dest ← f << 4 | f >> 4, zamiana czwórek bitów | ||||||
| 0 | 0 | 1 | 1 | 1 | 1 | d | f | INCFSZ f,d | 1/2 | dest ← f + 1, następnie pomijanie kolejnej instrukcji, jeśli zero | ||||||
| Kod Op. | Nr Bitu | Rejestr | Operacje bitowe | |||||||||||||
| 0 | 1 | 0 | 0 | b | f | BCF f,b | 1 | Zerowanie bitu b w f | ||||||||
| 0 | 1 | 0 | 1 | b | f | BSF f,b | 1 | Ustawienie na 1 bitu b w f | ||||||||
| 0 | 1 | 1 | 0 | b | f | BTFSC f,b | 1/2 | Pominięcie następnej instrukcji, jeśli bit b w f jest wyzerowany | ||||||||
| 0 | 1 | 1 | 1 | b | f | BTFSS f,b | 1/2 | Pominięcie następnej instrukcji, jeśli bit b w f jest ustawiony na 1 | ||||||||
| Kod Op. | Stała | Instrukcje skoków | ||||||||||||||
| 1 | 0 | 0 | 0 | k | RETLW k | 2 | Ustawienie W ← k, a następnie wykonanie powrotu z podprogramu | |||||||||
| 1 | 0 | 0 | 1 | k | CALL k | 2 | Wywołanie podprogramu o 8-bitowym adresie k | |||||||||
| 1 | 0 | 1 | k | GOTO k | 2 | Skok pod 9-bitowy adres k | ||||||||||
| Kod Op. | Stała | Operacje ze stałą k nad W: W ← OP(k,W) | ||||||||||||||
| 1 | 1 | 0 | 0 | k | MOVLW k | 1 | W ← k | |||||||||
| 1 | 1 | 0 | 1 | k | IORLW k | Z | 1 | W ← k | W, alternatywa bitowa | ||||||||
| 1 | 1 | 1 | 0 | k | ANDLW k | Z | 1 | W ← k & W, koniunkcja bitowa | ||||||||
| 1 | 1 | 1 | 1 | k | XORLW | Z | 1 | W ← k ^ W, bitowa suma modulo 2 | ||||||||
| 11 | 10 | 09 | 08 | 07 | 06 | 05 | 04 | 03 | 02 | 01 | 00 | Mnemonik | C? | Z? | Takty | Opis |
| Symbol | Opis |
| f | Numer rejestru w zestawie |
| W | Rejestr roboczy (akumulator) |
| b | Numer bitu w rejestrze |
| k | Wartość stała |
| 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 |
| WDT | Timer licznika zegarowego |
| C | Znacznik przeniesienia |
| Z | Znacznik zera |
| TO | Bit oznaczający przekroczenie czasu |
| PD | Bit oznaczający wyłączenie zasilania |
| [ ] | Pole bitowe |
| ← | Przesłanie wyniku operacji |
Składnia: ADDWF f,d
Argumenty: f = 0...31, d = 0...1
Kod: 0001 11df ffff
Operacja: dest ← W + f
Modyfikowane znaczniki stanu: C, DC, Z
Opis: Dodanie zawartości rejestru roboczego W (akumulatora) i rejestru f. Jeśli d jest równe 0, to wynik dodawania zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.
Składnia: ANDLW k
Argumenty: k = 0...255
Kod: 1110 kkkk kkkk
Operacja: W ← W & k
Modyfikowane znaczniki stanu: Z
Opis: Zawartość akumulatora W zostaje poddana bitowej operacji koniunkcji logicznej z 8-bitową stałą k. Wynik jest umieszczany w akumulatorze W.
Składnia: ANDWF f,d
Argumenty: f = 0...31, d = 0...1
Kod: 0001 01df ffff
Operacja: dest ← W & f
Modyfikowane znaczniki stanu: Z
Opis: Zawartość akumulatora W zostaje poddana bitowej operacji koniunkcji logicznej 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.
Składnia: BCF f,b
Argumenty: f = 0...31, b = 0...7
Kod: 0100 bbbf ffff
Operacja: f[b] ← 0
Modyfikowane znaczniki stanu: żaden
Opis: Bit b w rejestrze f jest zerowany.
Składnia: BSF f,b
Argumenty: f = 0...31, b = 0...7
Kod: 0101 bbbf ffff
Operacja: f[b] ← 1
Modyfikowane znaczniki stanu: żaden
Opis: Bit b w rejestrze f jest ustawiany na 1.
Składnia: BTFSC f,b
Argumenty: f = 0...31, b = 0...7
Kod: 0110 bbbf ffff
Operacja: pominięcie następnej instrukcji, jeśli f[b] = 0
Modyfikowane znaczniki stanu: żaden
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.
Składnia: BTFSS f,b
Argumenty: f = 0...31, b = 0...7
Kod: 0111 bbbf ffff
Operacja: pominięcie następnej instrukcji, jeśli f[b] = 1
Modyfikowane znaczniki stanu: żaden
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.
Składnia: CALL k
Argumenty: k = 0...255
Kod: 1001 kkkk kkkk
Operacja:
TOS ← PC + 1
PC[7:0] ← k
PC[10:9] ← STATUS[6:5]
PC[8] ← 0
Modyfikowane znaczniki stanu: żaden
Opis: Wywołanie podprogramu. Najpierw na stosie zostaje umieszczony adres powrotny (PC + 1). 8-bitowy adres bezpośredni zostaje załadowany do ośmiu najmłodszych bitów licznika programu (P[7:0]). Górne bity PC[10:9] są ładowane z bitów rejestru stanu STATUS[6:5], bit PC[8] jest zerowany. Wynika z tego, iż podprogram może znajdować się tylko w pierwszej połówce 512-słowowej strony pamięci programu. Instrukcja CALL zajmuje 2 cykle rozkazowe.
Składnia: CLR f,d
Argumenty: f = 0...31, d = 0...1
Kod: 0000 01df ffff
Operacja:
dest ← 00h
Z ← 1
Modyfikowane znaczniki stanu: Z
Opis: Bity rejestru docelowego zostają wyzerowane i jest ustawiany znacznik zera Z. Jeśli d = 0, to zerowany jest rejestr akumulatora W. Jeśli d = 1, to zerowany jest rejestr f.
Składnia: CLRF f
Argumenty: f = 0...31
Kod: 0000 011f ffff
Operacja:
f ←
00h
Z ← 1
Modyfikowane znaczniki stanu: Z
Opis: Bity rejestru f zostają wyzerowane i jest ustawiany znacznik zera Z.
Składnia: CLRW
Argumenty: brak
Kod: 0000 0100 0000
Operacja:
W ←
00h
Z ← 1
Modyfikowane znaczniki stanu: Z
Opis: Bity akumulatora W zostają wyzerowane i jest ustawiany znacznik zera Z.
Instrukcje CLRF i CLRW są tą samą instrukcją CLR f,d. Gdy d = 0, zerowany jest akumulator W. Gdy d = 1, zerowany jest rejestr f.
Składnia: CLRWDT
Argumenty: brak
Kod: 0000 0000 0100
Operacja:
WDT ←
00h
TO ← 1
PD ← 1
Modyfikowane znaczniki stanu: TO, PD
Opis: Instrukcja CLRWDT resetuje licznik zegarowy. Jeśli preskaler został przydzielony do licznika zegarowego, a nie do timera 0, to jest on również resetowany. Ustawiane są znaczniki stanu TO i PD (TO – Time-Out – znacznik sygnalizujący zakończenie czasu zliczania; PD – Power-Down – znacznik sygnalizujący wyłączenie zasilania).
Składnia: COMF f,d
Argumenty: f = 0...31, d = 0...1
Kod: 0010 01df ffff
Operacja: dest ← f
Modyfikowane znaczniki stanu: Z
Opis: Wartość bitowa rejestru f zostaje zanegowana. 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.
Składnia: DECF f,d
Argumenty: f = 0...31, d = 0...1
Kod: 0000 11df ffff
Operacja: dest ← f - 1
Modyfikowane znaczniki stanu: Z
Opis: Wartość rejestru f jest zmniejszana o 1. 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.
Składnia: DECFSZ f,d
Argumenty: f = 0...31, d = 0...1
Kod: 0010 11df ffff
Operacja: dest ← f - 1, pominięcie następnej instrukcji przy wyniku zero
Modyfikowane znaczniki stanu: żaden
Opis: Wartość rejestru f jest zmniejszana o 1. 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 zerowy, to zostaje pominięta następna instrukcja, czyli następna instrukcja pobrana w czasie wykonywania instrukcji bieżącej (nakładkowanie) jest usuwana z kolejki i zamiast niej mikroprocesor wykonuje instrukcję pustą NOP, co powoduje, iż instrukcja DECFSZ zajmuje w tym przypadku 2 cykle rozkazowe.
Składnia: GOTO k
Argumenty: k = 0...511
Kod: 101k kkkk kkkk
Operacja:
PC[8:0] ← k
PC[10:9] ← STATUS[6:5]
Modyfikowane znaczniki stanu: żaden
Opis: Instrukcja GOTO jest skokiem bezwarunkowym do nowego miejsca w programie. 9-bitowy adres natychmiastowy zostaje załadowany do dziewięciu najmłodszych bitów rejestru licznika programu PC[8:0]. Górne bity PC są ładowane z bitów rejestru stanu STATUS[6:5]. Instrukcja GOTO zajmuje dwa cykle rozkazowe.
Składnia: DINCF f,d
Argumenty: f = 0...31, d = 0...1
Kod: 0010 10df ffff
Operacja: dest ← f + 1
Modyfikowane znaczniki stanu: Z
Opis: Wartość rejestru f jest zwiększana o 1. 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.
Składnia: INCFSZ f,d
Argumenty: f = 0...31, d = 0...1
Kod: 0011 11df ffff
Operacja: dest ← f + 1, pominięcie następnej instrukcji przy wyniku zero
Modyfikowane znaczniki stanu: żaden
Opis: Wartość rejestru f jest zwiększana o 1. 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 zerowy, to zostaje pominięta następna instrukcja, czyli następna instrukcja pobrana w czasie wykonywania instrukcji bieżącej (nakładkowanie) jest usuwana z kolejki i zamiast niej mikroprocesor wykonuje instrukcję pustą NOP, co powoduje, iż instrukcja INCFSZ zajmuje w tym przypadku 2 takty zegara.
Składnia: IORLW k
Argumenty: k = 0...255
Kod: 1101 kkkk kkkk
Operacja: W ← W | k
Modyfikowane znaczniki stanu: Z
Opis: Zawartość akumulatora W zostaje poddana bitowej operacji alternatywy logicznej z 8-bitową stałą k. Wynik jest umieszczany w akumulatorze W.
Składnia: IORWF f,d
Argumenty: f = 0...31, d = 0...1
Kod: 0001 00df ffff
Operacja: dest ← W | f
Modyfikowane znaczniki stanu: Z
Opis: Wartość akumulatora W zostaje poddana bitowej alternatywie logicznej 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.
Składnia: MOVF f,d
Argumenty: f = 0...31, d = 0...1
Kod: 0010 00df ffff
Operacja: dest ← f
Modyfikowane znaczniki stanu: Z
Opis: Zawartość rejestru f jest kopiowana do rejestru przeznaczenia. Jeśli d jest równe 0, to rejestrem przeznaczenia jest akumulator W. Jeśli d jest równe 1, to rejestrem przeznaczenia jest rejestr f. Opcja d = 1 jest wykorzystywana do sprawdzania stanu rejestru f, ponieważ jest ustawiany znacznik zera Z.
Składnia: MOVLW k
Argumenty: k = 0...255
Kod: 1100 kkkk kkkk
Operacja: W ← k
Modyfikowane znaczniki stanu: żaden
Opis: 8-bitowa stała jest ładowana do rejestru akumulatora W.
Składnia: MOVLW k
Argumenty: k = 0...255
Kod: 0000 001f ffff
Operacja: f ← W
Modyfikowane znaczniki stanu: żaden
Opis: Umieszczenie danych W w rejestrze f.
Składnia: NOP
Argumenty: brak
Kod:
0000 0000 0000
Operacja: brak
Modyfikowane znaczniki stanu: żaden
Opis: Instrukcja nie wykonuje żadnej operacji. Zajmuje jeden takt zegara. W rzeczywistości jest to instrukcja MOVWF 0,0, która umieszcza W w W.
Składnia: OPTION
Argumenty: brak
Kod:
0000 0000 0010
Operacja: Option ← W
Modyfikowane znaczniki stanu: żaden
Opis: Zawartość rejestru W jest ładowana do rejestru OPTION.
Składnia: RETLW k
Argumenty: k = 0...255
Kod: 1000 kkkk kkkk
Operacja:
W ← k
PC ← TOS
Modyfikowane znaczniki stanu: żaden
Opis: Do rejestru akumulatora W zostaje załadowana 8-bitowa stała k. Do rejestru licznika programu zostaje załadowany adres powrotny ze szczytu stosu. Instrukcja zajmuje 2 cykle rozkazowe.
Składnia: RLF f,d
Argumenty: f = 0...31, d = 0...1
Kod: 0011 01df ffff
Operacja:
Modyfikowane znaczniki stanu: C
Opis: Zawartość rejestru f jest obracana bitowo w lewo poprzez znacznik przeniesienia. 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.
Składnia: RRF f,d
Argumenty: f = 0...31, d = 0...1
Kod: 0011 00df ffff
Operacja:
Modyfikowane znaczniki stanu: C
Opis: Zawartość rejestru f jest obracana bitowo w prawo poprzez znacznik przeniesienia. 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.
Składnia: SLEEP
Argumenty: brak
Kod: 0000 0000 0011
Operacja:
WDT ← 00h
Preskaler WDT ← 0
TO ← 1
PD ← 0
Modyfikowane znaczniki stanu: TO, PD, RBWUF
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.
Składnia: SUBWF f,d
Argumenty: f = 0...31, d = 0...1
Kod: 0000 10df ffff
Operacja: dest ← f - W
Modyfikowane znaczniki stanu: C, DC, Z
Opis: Odejmowanie (metodą uzupełnień do 2) rejestru akumulatora W od rejestru f. Jeśli d jest równe 0, to wynik odejmowania zostanie umieszczony w akumulatorze W. Jeśli d jest równe 1, to wynik zostanie z powrotem umieszczony w rejestrze f.
Składnia: SWAPF f,d
Argumenty: f = 0...31, d = 0...1
Kod: 0011 10df ffff
Operacja:
dest[7:4] ← f[3:0]
dest[3:0] ← f[7:4]
Modyfikowane znaczniki stanu: żadne
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.
Składnia: TRIS f
Argumenty: f = 5...7
Kod: 0000 0000 0fff
Operacja: rejestr TRIS f ← W
Modyfikowane znaczniki stanu: żadne
Opis: Wybrany rejestr TRIS f zostaje załadowany zawartością akumulatora W. Zakres f zależy od typu mikrokontrolera. Sprawdź to w instrukcji wybranego modelu.
Składnia: XORLW k
Argumenty: k = 0...255
Kod: 1111 kkkk kkkk
Operacja: W ← k ^ W
Modyfikowane znaczniki stanu: Z
Opis: Zawartość rejestru akumulatora W zostaje poddana operacji sumy modulo 2 ze stałą k. Wynik jest umieszczany w rejestrze W.
Składnia: XORWF f,d
Argumenty: f = 0...31, d = 0...1
Kod: 0001 10df ffff
Operacja: dest ← W ^ f
Modyfikowane znaczniki stanu: Z
Opis: Zawartość rejestru 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.
![]() |
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.