Serwis Edukacyjny
w I-LO w Tarnowie
obrazek

Materiały dla uczniów liceum

  Wyjście       Spis treści       Wstecz       Dalej  

obrazek

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

©2023 mgr Jerzy Wałaszek
I LO w Tarnowie

obrazek

Instrukcje maszynowe PIC

Rodzina podstawowa
(ang. Baseline family)

obrazek

Educational and Non-Profit Use of Copyrighted Material:

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

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

SPIS TREŚCI
Podrozdziały

obrazek

Wprowadzenie

Przez wiele lat mikrokontrolery PIC z rodziny podstawowej były 8-bitowymi mikrokontrolerami preferowanymi na całym świecie przez inżynierów-elektroników w olbrzymiej liczbie zastosowań. Są one oparte o podstawową architekturę opracowaną przez firmę Microchip i wykorzystują 12-bitowe słowa instrukcji dostarczając niezbędnych cech i opcji, które minimalizują wydatki i umożliwiają właściwą realizację podjętego zadania. Mając dostępne tak wiele opcji, wybranie właściwego mikrokontrolera PIC z rodziny podstawowej dla danej aplikacji jest szybkie i łatwe. Rodzina podstawowa udostępnia mikrokontrolery PIC o różnej liczbie końcówek z podstawową funkcjonalnością cyfrową jak również z cyfrową inteligencją zawierającą zintegrowane z mikrokontrolerem analogowe moduły peryferyjne. Układy PIC10F200, PIC10F202, PIC12F508, PIC12F509 i PIC16F505 oferują podstawową funkcjonalność cyfrową, posiadając od 6 do 14 końcówek. Te układy są czysto cyfrowe z 4 MHz wewnętrznym oscylatorem i tworzą najprostszą gałąź rodziny podstawowej, dostarczając taniej metody wyposażenia twojego projektu w cyfrową inteligencję. Układy PIC10F204, PIC10F206, PIC10F220, PIC10F222, PIC12F510 i PIC16F506 stanowią wyższy poziom funkcjonalności wraz ze zintegrowanymi modułami analogowymi. Umieszczone w obudowach albo 2x3 DFN, albo 6-nóżkowych SOT-23 mikrokontrolery PIC10F204 i PIC10F206 posiadają 4 MHz oscylator wewnętrzny wraz z wbudowanym komparatorem analogowym. PIC10F220 i PIC10F222 posiadają 8-bitowy przetwornik A/C  oraz oscylator wewnętrzny o zwiększonej do 8 MHz częstotliwości pracy, jak również ulepszony timer resetowania mikrokontrolera (ang. enhanced Device Reset Timer, DRT) o czasie startu równym 1,125 ms.

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ą.

Cechy

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
Na początek:  podrozdziału   strony 

Budowa instrukcji PIC

Mikrokontrolery PIC z rodziny podstawowej używają zestawu 33 instrukcji maszynowych o długości 12-bitów:
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.

PIC16F506 | Microchip Technology

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:

Operacje bajtowe na zestawie rejestrów

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
Na początek:  podrozdziału   strony 

Opis instrukcji

W opisach instrukcji stosowane są następujące oznaczenia:
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

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

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.


ANDLW (ang. AND Literal with W – Koniunkcja bitowa stałej z W)

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.


ANDWF (ang. AND W with f – Koniunkcja bitowa W z f)

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.


BCF (ang. Bit Clear f – Zerowanie bitu w 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.


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

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.


BTFSC (ang. Bit Test f, Skip if Clear – Test bitu w f, pominięcie następnej instrukcji, jeśli jest wyzerowany)

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.


BTFSS (ang. Bit Test f, Skip if Set – Test bitu w f, pominięcie następnej instrukcji, jeśli jest ustawiony)

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.


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

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.


CLR (ang. Clear destination – Zerowanie rejestru docelowego)

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.


CLRF (ang. Clear f – Zerowanie 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.


CLRW (ang. Clear W – Zerowanie W)

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.


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

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).


COMF (ang. Compliment f – Negacja f)

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.


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

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.


DECFSZ (ang. Decrement f, Skip if 0 – Zmniejszenie f o 1, pominięcie następnej instrukcji, jeśli zero)

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.


GOTO (ang. Unconditional Branch – Skok bezwarunkowy)

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.


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

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.


INCFSZ (ang. Increment f, Skip if 0 – Zwiększenie f o 1, pominięcie następnej instrukcji, jeśli zero)

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.


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

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.


IORWF (ang. Inclusive OR W with f – Alternatywa bitowa W z f)

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.


MOVF (ang. Move f – Przesłanie 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.


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

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.


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

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.


NOP (ang. No Operation – Instrukcja pusta)

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.


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

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.


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

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.


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

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.


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

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.


SLEEP (ang. Enter SLEEP Mode – Wejście w tryb uśpienia)

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.


SUBWF (ang. Subtract W from f – Odejmowanie W od f)

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.


SWAPF (ang. Swap Nibbles in f – Zamiana ze sobą połówek 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.


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

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.


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

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.


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

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.

Na początek:  podrozdziału   strony 

Zespół Przedmiotowy
Chemii-Fizyki-Informatyki

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

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

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

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

Informacje dodatkowe.