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.