|
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
Każda instrukcja mikrokontrolera PIC12F629/675 jest 14-bitowym słowem podzielonym na pole kodu operacji (ang. opcode), które określa typ instrukcji, oraz na jedno lub więcej pól argumentów, które dalej określają działanie tej instrukcji. Formaty instrukcji każdej kategorii przedstawiają poniższe rysunki oraz podsumowuje je tabelka.
| Pole | Opis |
| f | Adres rejestru plikowego (0x00 ... 0x7F). |
| W | Rejestr roboczy (akumulator). |
| b | Adres bitu wewnątrz 8-bitowego rejestru. |
| k | Pole literału, stałe dane lub etykieta. |
| x | Pole o nieistotnej zawartości (0 lub 1). Asembler wstawi w takie pole zero. Jest to zalecane dla kompatybilności z przyszłymi narzędziami Microchip'a. |
| d | Wybór miejsca docelowego: d = 0 (wynik trafi do W). d = 1 (wynik trafi do rejestru plikowego f). Standardem jest d = 1. |
| PC | Licznik programu (ang. Program Counter) |
| TO | Bit przekroczenia czasu (ang. time-out) |
| PD | Bit wyłączenia zasilania (ang. Power-down) |
Zorientowane bajtowo operacje na zestawie
rejestrów
Zorientowane bitowo operacje na zestawie
rejestrów
Operacje ze stałymi i operacje sterujące
Następna tabela wymienia instrukcje rozpoznawane przez asembler MPASMTM.
| Mnemonik, argumenty |
Opis | Cykle roz. |
14-bitowe słowo instrukcji | Zmieniane znaczniki |
Uwagi |
| MSB... ...LSB | |||||
| Operacje bajtowe na rejestrach | |||||
| ADDWF f,d | Dodanie W i f | 1 | 00 0111 dfff ffff |
C, DC,Z | 1,2 |
| ANDWF f,d | Koniunkcja bitowa W i f | 1 | 00 0101 dfff ffff |
Z | 1,2 |
| CLRF f | Zerowanie f | 1 | 00 0001 1fff ffff |
Z | 2 |
| CLRW | Zerowanie W | 1 | 00 0001 0xxx xxxx |
Z | |
| COMF f,d | Zaprzeczenie f | 1 | 00 1001 dfff ffff |
Z | 1,2 |
| DECF f,d | Zmniejszenie o 1 f | 1 | 00 0011 dfff ffff |
Z | 1,2 |
| DECFSZ f,d | Zmniejszenie o 1 f, pominięcie przy zerze | 1/2 | 00 1011 dfff ffff |
– | 1,2,3 |
| INCF f,d | Zwiększenie o 1 f | 1 | 00 1010 dfff ffff |
Z | 1,2 |
| INCFSZ f,d | Zwiększenie o 1 f, pominięcie przy zerze | 1/2 | 00 1111 dfff ffff |
– | 1,2,3 |
| IORWF f,d | Alternatywa bitowa W z f | 1 | 00 0100 dfff ffff |
Z | 1,2 |
| MOVF f,d | Przesłanie f | 1 | 00 1000 dfff ffff |
Z | 1,2 |
| 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 | 1,2 |
| RRF f,d | Obrót bitów f w prawo przez znacznik C
|
1 | 00 1100 dfff ffff |
C | 1,2 |
| SUBWF f,d | Odjęcie W od f | 1 | 00 0010 dfff ffff |
C, DC, Z | 1,2 |
| SWAPF f,d | Zamiana połówek f | 1 | 00 0111 dfff ffff |
– | 1,2 |
| XORWF f,d | Bitowa suma modulo 2 W z f | 1 | 00 0110 dfff ffff |
Z | 1,2 |
| Operacje bitowe na rejestrach | |||||
| BCF f,b | Zerowanie bitu b w f | 1 | 01 00bb bfff ffff |
– | 1,2 |
| BSF f,b | Ustawianie bitu b w f | 1 | 01 01bb bfff ffff |
– | 1,2 |
| BTFSC f,b | Testowanie bitu b w f, pominięcie przy wyzerowanym | 1/2 | 01 10bb bfff ffff |
– | 3 |
| BTFSS f,b | Testowanie bitu b w f, pominięcie przy ustawionym | 1/2 | 01 11bb bfff ffff |
– | 3 |
| 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 | |
Więcej informacji na temat każdej instrukcji znajdziesz w rozdziale "Instrukcje maszynowe PIC – Rodzina średnia".
W instrukcjach zorientowanych bajtowo 'f' reprezentuje desygnator rejestru plikowego, a 'd' reprezentuje desygnator docelowy. Desygnator rejestru plikowego określa, który rejestr plikowy jest używany przez daną instrukcję. Desygnator docelowy określa, gdzie zostanie umieszczony wynik operacji. Jeśli 'd' ma wartość zero, to wynik trafia do rejestru akumulatora W. Jeśli 'd' jest równe jeden, to wynik zostanie umieszczony w rejestrze plikowym określonym w instrukcji.
W instrukcjach zorientowanych bitowo 'b' reprezentuje desygnator pola
bitowego, który wybiera bit przetwarzany przez operację, natomiast 'f'
reprezentuje adres pliku, w którym ten bit się znajduje.
W operacjach literałowych i sterujących 'k' reprezentuje stałą 8- lub 11-bitową,
albo wartość literału.
Jeden cykl rozkazowy składa się z czterech taktów oscylatora, co przy szybkości oscylatora równej 4 MHz daje normalny czas wykonania instrukcji 1 ms. Wszystkie instrukcje są wykonywane w pojedynczym cyklu rozkazowym, chyba że prawdziwy jest test warunkowy lub zmieniany jest licznik programu jako wynik instrukcji. Gdy to wystąpi, wykonanie zajmuje dwa cykle rozkazowe, a drugi cykl wykonywany jest jako NOP.
Składnia: ADDLW k
Argumenty: k = 0...255
Operacja: W ← W + k
Modyfikowane znaczniki stanu: C, DC, Z
Opis: Zawartość akumulatora W zostaje dodana do 8-bitowej stałej k. Wynik jest umieszczany w akumulatorze W.
Składnia: ADDWF f,d
Argumenty: f = 0...127, d = 0...1
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 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
Operacja: W ← W & k
Modyfikowane znaczniki stanu: Z
Opis: Zawartość akumulatora W zostaje poddana operacji koniunkcji bitowej z 8-bitową stałą k. Wynik jest umieszczany w akumulatorze W.
Składnia: ANDWF f,d
Argumenty: f = 0...127, d = 0...1
Operacja: dest ← W & f
Modyfikowane znaczniki stanu: Z
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.
Składnia: BCF f,b
Argumenty: f = 0...127, b = 0...7
Operacja: f[b] ← 0
Modyfikowane znaczniki stanu: żaden
Opis: Bit b rejestru f zostaje wyzerowany.
Składnia: BSF f,b
Argumenty: f = 0...127, b = 0...7
Operacja: f[b] ← 1
Modyfikowane znaczniki stanu: żaden
Opis: Bit b rejestru f zostaje ustawiony na 1.
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
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...127, b = 0...7
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...2047
Operacja:
TOS ← PC + 1
PC[10:0] ← k
PC[12:11] ← PCLATH[4:3]
Modyfikowane znaczniki stanu: żaden
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.
Składnia: CLRF f
Argumenty: f = 0...127
Operacja:
f ← 00h
Z ← 1
Modyfikowane znaczniki stanu: Z
Opis: Zawartość rejestru f jest zerowana a znacznik zera Z jest ustawiany. W rzeczywistości jest to instrukcja CLR f,1.
Składnia: CLRW
Argumenty: brak
Operacja:
W ← 00h
Z ← 1
Modyfikowane znaczniki stanu: Z
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.
Składnia: CLRWDT
Argumenty: brak
Operacja:
WDT ← 00h
preskaler WDT ← 0
TO ← 1
PD ← 1
Modyfikowane znaczniki stanu: TO, PD
Opis: Instrukcja CLRWDT zeruje timer licznika zegarowego oraz licznik jego preskalera. Ustawiane są bity stanu TO i PD.
Składnia: COMF f,d
Argumenty: f = 0...127, d = 0...1
Operacja: dest ← f
Modyfikowane znaczniki stanu: Z
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.
Składnia: DECF f,d
Argumenty: f = 0...127, d = 0...1
Operacja: dest ← f - 1
Modyfikowane znaczniki stanu: Z
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.
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
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.
Składnia: CALL k
Argumenty: k = 0...2047
Operacja:
PC[10:0] ← k
PC[12:11] ← PCLATH[4:3]
Modyfikowane znaczniki stanu: żaden
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.
Składnia: INCF f,d
Argumenty: f = 0...127, d = 0...1
Operacja: dest ← f + 1
Modyfikowane znaczniki stanu: Z
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.
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
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.
Składnia: IORLW k
Argumenty: k = 0...255
Operacja: W ← W | k
Modyfikowane znaczniki stanu: Z
Opis: Zawartość akumulatora W zostaje poddana operacji alternatywy bitowej z 8-bitową stałą k. Wynik jest umieszczany w akumulatorze W.
Składnia: IORWF f,d
Argumenty: f = 0...127, d = 0...1
Operacja: dest ← W | f
Modyfikowane znaczniki stanu: Z
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.
Składnia: MOVLW k
Argumenty: k = 0...255
Operacja: W ← k
Modyfikowane znaczniki stanu: żaden
Opis: 8-bitowa stała k zostaje umieszczona w akumulatorze W.
Składnia: MOVF f,d
Argumenty: f = 0...127, d = 0...1
Operacja: dest ← f
Modyfikowane znaczniki stanu: Z
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.
Składnia: MOVWF f
Argumenty: f = 0...127
Operacja: f ← W
Modyfikowane znaczniki stanu: żaden
Opis: Dane z rejestru W zostają umieszczone w rejestrze f.
Składnia: NOP
Argumenty: brak
Operacja: brak działania
Modyfikowane znaczniki stanu: żaden
Opis: Instrukcja pusta, brak operacji.
Składnia: RETFIE
Argumenty: brak
Operacja:
PC ← TOS
GIE ← 1
Modyfikowane znaczniki stanu: żaden
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.
Składnia: RETLW k
Argumenty: k = 0...255
Operacja:
W ← k
PC ← TOS
Modyfikowane znaczniki stanu: żaden
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.
Składnia: RETURN
Argumenty: brak
Operacja: PC ← TOS
Modyfikowane znaczniki stanu: żaden
Opis: Powrót z podprogramu. Licznik programu PC zostaje załadowany 13-bitowym adresem ze szczytu stosu TOS. Instrukcja zajmuje 2 cykle rozkazowe.
Składnia: RLF f,d
Argumenty: f = 0...127, d = 0...1
Operacja: Zobacz na opis poniżej.
Modyfikowane znaczniki stanu: C
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.
Składnia: RRF f,d
Argumenty: f = 0...127, d = 0...1
Operacja: Zobacz na opis poniżej.
Modyfikowane znaczniki stanu: C
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.
Składnia: SLEEP
Argumenty: brak
Operacja:
WDT ← 00h
Preskaler WDT ← 0
TO ← 1
PD ← 0
Modyfikowane znaczniki stanu: TO, PD
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.
Składnia: SUBLW k
Argumenty: k = 0...255
Operacja: W ← k - W
Modyfikowane znaczniki stanu: C, DC, Z
Opis: Zawartość akumulatora W zostaje odjęta od 8-bitowej stałej k (metodą uzupełnień do 2). Wynik jest umieszczany w akumulatorze W.
Składnia: SUBWF f,d
Argumenty: f = 0...127, d = 0...1
Operacja: dest ← f - W
Modyfikowane znaczniki stanu: C, DC, Z
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.
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
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: XORLW k
Argumenty: k = 0...255
Operacja: W ← W ^ k
Modyfikowane znaczniki stanu: Z
Opis: Zawartość akumulatora W zostaje poddana operacji sumy modulo 2 z 8-bitową stałą k. Wynik jest umieszczany w akumulatorze W.
Składnia: XORWF f,d
Argumenty: f = 0...127, d = 0...1
Operacja: dest ← W ^ f
Modyfikowane znaczniki stanu: Z
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.
![]() |
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.