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.