Choď na obsah Choď na menu
 

PIC4

Škola programování PIC 4

Seznam a popis dostupných příkazů.

Před začátkem programování je nutné ještě znát dostupné příkazy. Není nutné je znát nazpaměť (při používání se je naučíte sami), ale je dobré alespoň vědět co máme k dispozici.
Dostupné příkazy spolu s podrobným popisem jsou v následující tabulce. V úvodu jsem sice zmínil že jich je 35, ale příkaz CLRW (maže registr W) se nepoužívá a v simulátoru nefunguje, tak jsem ho ani do této tabulky nezařazoval.

BYTOVÉ INSTRUKCE

kód

popis

cykly

ovlivňuje

ADDWF f,d algebraitský součet W a f uložit podle d

1

C,DC,Z

136 + 152 = 288

ANDWF f,d logický součin W a f podle d

1

Z

11010

1100

1000

CLRF f nulování f

1

Z

COMF f,d komplement f podle d

1

Z

   vytvoří opačné bity z f a uloží podle d

11010 -- 00101

DECF f,d dekrement f [-1]

1

Z

   odečte jedničku
DECFSZ f,d dekrement f [-1], když je výsledek nula,

1 (2)

-

následující instrukce se přeskočí
INCF f,d inkrement f [+1]

1

Z

   přičte jedničku
INCFSZ f,d inkrement f [+1], když je výsledek nula,

1 (2)

-

následující instrukce se přeskočí
IORWF f logický součet W a f

1

Z

W - 11010

f - 01100

100110 - W

MOVF f,d přesun registru f podle d

1

Z

MOVWF f přesun W do f

1

-

MOVLW k přesun čísla k do W

1

-

NOP

bezvýznamná instrukce (čeká 1 cyklus)

1

 

používá se na zpoždění procesoru
RLF f,d rotace f vlevo přes C

1

C

C -- D7,D6,D5,D4,D3,D2,D1,D0 -- C

RRF f,d rotace f vpravo přes C

1

C

C -- D7,D6,D5,D4,D3,D2,D1,D0 -- C

SUBWF f,d rozdíl f a W

1

C,DC,Z

f - W = d

C = 1 - výsledek byl kladný
C = 0 - výsledek byl záporný
SWAPF f,d výměna čtveřice bitů v f

1

-

11110000 -- 00001111

XORWF f,d exklusivní součet W a f podle d

1

Z

1010

1100

1001

BITOVÉ INSTRUKCE

kód

popis

cykly

ovlivňuje

BCF f,b nulování bitu b registru f - 0

1

-

BSF f,b nastavení bitu b registru f - 1

1

-

BTFSC f,b test bitu b v f, skok když je 0

1 (2)

-

BTFSS f,b test bitu b v f, skok když je 1

1 (2)

-

OSTATNÍ INSTRUKCE

kód

popis

cykly

ovlivňuje

ADDLW k algebraitský součet  k a W, výsledek do W

1

C,DC,Z

136 + 152 = 288 -- W

ANDLW k logický součin k a W, výsledek do W

1

Z

11010

1100

1000

CALL k volání podprogramu

2

-

CLRWDT nulování WDT

1

TO,PD

GOTO k skok na návěstí k

2

-

IORLW k logický součet k a W, výsledek do W

1

Z

11010

1100

100110

RETFIE návrat z přerušení

2

-

RETLW k návrat z podprogramu, k se uloží do W

2

-

RETURN návrat z podprogramu

2

-

SLEEP uspí procesor

1

TO,PD

   návrat přerušením nebo resetem
SUBLW k rozdíl k a W, výsledek do W

1

C,DC,Z

k - W = W

C = 1 - výsledek byl kladný
C = 0 - výsledek byl záporný
XORLW k exklusivní součet k a W, výsledek do W

1

Z

11010

1100

1001

       
Vysvětlivky:    
  f - název (adresa) registru    
  k - číslo, název návěstí    
  d - kam uložit výsledek    
 

1 - výsledek do f

   
 

0 - výsledek do W

   
  C , DC , Z , TO , PD - bity v registru STATUS    
  b - pozice bitu v registru (počítáno zprava)    
  7 , 6 , 5 , 4 , 3 , 2 , 1 , 0    

Jak je také vidět, většina příkazů potřebuje jen jeden strojový cyklus (OSC / 4). 2 strojové cykly potřebují ty příkazy, které způsobí skok v programu. Je to logické, procesor má již připraven následující příkaz, ale pokud má skočit někam jinam, musí načíst nový. Stejně tak je to u příkazů, které mají uvedeno 1(2), například BTFSC. Pokud po něm program pokračuje dál, stačí mu jeden, pokud ale má někam skočit, potřebuje dva.