PIC18 utasításkészlete

Link külső forrásra, ahol a PIC18 utasításkészlete található: itt 

Nagyon jó és magyar!!! : https://www.picnick.hu/mplab/assembly_programozas.pdf  

Jó link asm-hez: http://www.islavici.ro/cursuriold/conducere%20sist%20cu%20calculatorul/PICbook/3_chapter.htm

Táblázatosan gépi kódok formájában is: https://en.wikipedia.org/wiki/PIC_instruction_listings

Példaprojekt amiből sokat lehet tanulni: Itt!  

Microchip termékek kiválasztása: Kereső itt!   Konkrét rendelhető termékek: http://www.microchipdirect.com/


Mnemonik
CSS underlined Operandus
Leírás   Ciklus Állított
jelzőbitek 
Megjegyzés
BÁJT ORIENTÁLT, FÁJLREGISZTERES UTASÍTÁSOK
ADDWF   f,d,a WREG és f összeadása 
ADD WREG to F
Info
 
1 C,DC,Z,OV,N  1,2 
ADDWFC f,d,a  W, f és az átvitelbit összeadása  Info 1 C,DC,Z,OV,N  1,2 
ANDWF  f,d,a W és f  ÉS kapcsolata  Info 1 Z,N 1,2 
CLRF   f,a f  törlése  Info 1 Z 2
COMF   f,d,a f komplementálása  Info 1 Z,N 1*,2*
CPFSEQ   f,a WREG és f összehasonlítása, átlép ha =  Info 1 (2 v.3) nincs 4
CPFSGT  f,a WREG és f összehasonlítása, átlép ha f>  Info 1 (2 v.3) nincs 4
CPFSLT   f,a WREG és f összehasonlítása, átlép ha f<  Info 1 (2 v.3) nincs 4
DECF   f,d,a f csökkentése 1-el Info 1 C,DC,Z,OV,N 1,2,3,4 
DECFSZ f,d,a f csökkentése, átlép ha 0  Info 1 (2 v.3) nincs 1,2,3,4 
DCFSNZ f,d,a  f csökkentése, átlép ha nem 0  Info 1 (2 v.3) nincs 1,2
INCF   f,d,a f növelése  Info 1 C,DC,Z,OV,N 1,2,3,4 
INCFSZ f,d,a f növelése, átlép ha 0  Info 1 (2 v.3) nincs 4
INFSNZ   f,d,a f növelése, átlép ha nem 0 Info 1 (2 v.3) nincs 1,2
IORWF   f,d,a WREG és f VAGY kapcsolata  Info 1 Z,N 1,2
MOVF  f,d,a f mozgatása  Info 1 Z,N 1
MOVFF   f, f első f  (forrás)mozgatása második f -be  (cél)               info 2 nincs  
MOVWF   f,a WREG mozgatása f-be  Info 1 nincs  
MULWF   f,a WREG és f összeszorzása  Info 1 nincs  
NEGF   f,a f kettes komplemensének képzése  Info 1 C,DC,Z,OV,N  1,2
RLCF   f,d,a f forgatása balra átvitelbiten keresztül Info 1 C,Z,N   
RLNCF   f,d,a f forgatása balra átvitelbit kihagyásával Info 1 Z,N  1,2
RRCF   f,d,a f forgatása jobbra átvitelbiten keresztül Info 1 C,Z,N   
RRNCF  f,d,a f forgatása jobbra átvitelbit kihagyásával  Info 1 Z,N   
SET f minden bitjének 1-be állítása  Info 1 nincs  
SUBFWB f,d,a f kivonása a WREG-ből áthozattal  Info 1 C,DC,Z,OV,N  1,2
SUBWF   f,d,a WREG kivonása f-ből  Info 1 C,DC,Z,OV,N   
SUBWFB   f,d,a WREG kivonása f-ből áthozattal  Info 1 C,DC,Z,OV,N  1,2
SWAPF   f,d,a f alsó és felső 4 bitjének felcserélése Info 1 nincs 4
TSTFSZ   f,a f tesztelése és átlépés, ha 0  Info 1 (2 v.3)  nincs 1,2
XORWF   f,d,a WREG és az f kizáró-VAGY kapcsolata Info 1 Z,N  
 
BIT ORIENTÁLT, FÁJLREGISZTERES UTASÍTÁSOK 
BCF  f,b,a f adott bitjének törlése  Info 1   1,2 
BSF   f,b,a f adott bitjének 1-be állítása  Info 1   1,2 
BTFSC   f,b,a f adott bitjének tesztelése és átlép, ha 0  Info 1 (2 v.3)    3,4 
BTFSS   f,b,a f adott bitjének tesztelése és átlép, ha 1  Info 1 (2 v.3)    3,4 
BTG f,b,a f adott bitjének invertálása  Info 1   1,2 
 
LITERAL (KONSTANS) KEZELŐ ÉS VEZÉRLŐ UTASÍTÁSOK
ADDLW k Konstans hozzáadása a WREG-hez 
ADD literal WREG
Info 1 C,DC,Z,OV,N -
ANDLW k Konstans illetve a WREG ÉS kapcsolata 
AND literal with WREG
Info 1 Z,N -
IORLW k Konstans és a WREG VAGY kapcsolata 
Inclusive OR literal with WREG
Info 1 Z,N -
LFSR f,k FSR feltöltése egy (12 bit) konstanssal 
Move literal (12 bit) to FSRx
Info 2 nincs -
MOVLB k BSR feltöltése egy konstanssal <3:0> 
Move literal to BSR <3:0>
Info 1 nincs  
MOVLW k Konstans betöltése a WREG-be 
Move literal to Wreg 
Info 1 nincs  
MULLW k Konstans és a WREG összeszorzása
Multiply literal with WREG
Info 1 nincs  
RETLW k Visszatérés a WREG-ben egy konstanssal 
Return With literal in WREG
Info 2 nincs  
SUBLW k WREG kivonása a konstansból 
Subtract WREG from literal
Info 1 C,DC,Z,OV,N  
XORLW k WREG és a konstans kizáró-VAGY kapcsolata 
Exclusive OR literal with WREG
Info 1 Z,N  
 
VEZÉRLŐ UTASÍTÁSOK
BC n Ugrás, ha az átvitelbit 1 
Branch if Carry
Info 1 (2) nincs  
BN n Ugrás, ha az előjelbit 1 
Branch if negative
Info 1 (2) nincs  
BNC n Ugrás, ha az átvitelbit 0 
Branch if Not Carry 
Info 1 (2) nincs  
BNN - Ugrás, ha az előjelbit 0 
Branch if not Negative
Info 1 (2) nincs  
BNOV - Ugrás, ha túlcsordulásbit 0 
Branch if Not Overflow
Info 1 (2) nincs  
BNZ - Ugrás, ha a zéróbit 0 
Branch if Not Zero
Info 2 nincs  
BOV - Ugrás, ha túlcsordulásbit 1 
Branch if Overfow
Info 1 (2) nincs  
BRA - Feltétel nélküli ugrás
Branch Unconditionally
Info 1 (2) nincs  
BZ n Ugrás, ha a zéróbit 1 
Branch if Zero
Info 1 (2) nincs  
CALL n,s Szubrutin hívás (1. szó, 2. szó)
Call suroutine
Info 2 nincs  
CLRWDT - Watchdog Timer törlése 
Clear Watchdog Timer
Info 1 __  __
TO,PD
 
DAW - WREG decimális korrekciója
Decimal Adjust WREG
Info 1 C  
GOTO - Feltétel nélküli ugrás (1. szó, 2. szó)
Go to address
Info 2 nincs(1. szó, 2. szó)  
NOP - Nincs kijelölt műveletvégzés 
No Operation
Info 1 nincs  
POP - Kivétel a veremből 
Pop to of return stack (TOS)
Info 1 nincs  
PUSH - Beírás a verembe 
Push to of return stack (TOS)
Info 1 nincs  
RCALL n Relatív szubrutin hívása 
Relative Call
Info 2 nincs  
RESET - Szoftveres reszet
Software device RESET
Info 1 mindegyik  
RETFIE s Visszatérés megszakítás engedélyezéssel
Return from interrupt enable
Info 2 GIE/GIEH
PEIE/GIEL
 
RETLW k Visszatérés a WREG-ben egy konstanssal 
Return with literal in WREG
Info 2 nincs  
RETURN s Visszatérés a szubrutinból 
Return of Subroutine
Info 2 nincs  
SLEEP - Szundi üzemmód 
Go into standby mode
Info 1 __  __
TO,PD
 
 
ADATMEMÓRIA <--> PROGRAMMEMÓRIA ADATCSERÉT MEGVALÓSÍTÓ UTASÍTÁSOK
TBLRD* Tábla olvasás 
Table Read 
Info 2 nincs  
TBLRD*+ Tábla olvasás utólagos növelésse
Table Read with post-increment
Info 2 nincs  
TBLRD*- Tábla olvasás utólagos csökkentéssel 
Table Read post-decrement
Info 2 nincs  
TBLRD+* Table Read pre-increment Info 2 nincs  
TBLWT* Tábla írás
Table Writ
Info 2 (5) nincs  
TBLWT*+ Tábla írás utólagos növeléssel 
Table Write post-increment
Info 2 (5) nincs  
TBLWT*- Tábla írás utólagos csökkentéssel 
Table Write post-decrement
Info 2 (5) nincs  
TBLWT+* Tábla írás előzetes növelésse
Table Write pre-increment
Info 2 (5) nincs  

 

Mező Leírás
a RAM hozzáférési bit
a=0: a RAM terület az ún. „Access” RAM-ban van (a BSR-t nem kell figyelembe venni) (asm-ben 0 vagy ACCESS)
a=1: a RAM bankot a BSR jelöli ki  (asm-ben 1 vagy BANKED )
bbb Bit cím a 8 bites fájlregiszterben 
d Célkiválasztó bit (dest):
d=0(W): az eredmény a WREG-be kerül
d=1(F): az eredmény a fájlregiszterbe (f) kerül 
f 8 bites fájlregiszter neve (pl PORTB) v. címe(0xFF) 
fs 12 fájlregiszter címe (0x000-0xFFF). A forráscím tkp. 
fd 12 fájlregiszter címe (0x000-0xFFF). A célcím tkp. 
k Konstans mező, konstans adat, vagy címke (8, 16, ill. 20 bites lehet) 
label Címke neve. Max. ha jól tudom 32 karakter. 
mm
*
*+
*-
+* 
A TBLPTR regiszter kezelésének módja tábla íráskor és olvasáskor: 
Nem változik a TBLPTR értéke (se íráskor, se olvasáskor)
Az olvasás vagy írás után 1-gyel növekszik a TBLPTR 
Az olvasás vagy írás után 1-gyel csökken a TBLPTR
Az olvasás vagy írás előtt 1-gyel növekszik a TBLPTR
n Relatív cím (2-es komplemensben adott szám) a feltételes elágaztató utasításoknál, vagy közvetlen cím szubrutin hívásnál, visszatéréskor, ugráskor. 
PRODH A szorzás eredményének felső bájtja 
PRODL A szorzás eredményének alsó bájtja 
s Fast call/return módot kiválasztó bit
s=0: nincs mentés az árnyékregiszterekbe
s=4: mentés/töltés az árnyékregiszterekbe (fast módus) 
u Nem használt, vagy nem változik 
WREG Munkaregiszter (akkumulátor)
x Figyelmen kívül hagyható (0 v. 1)
A fordító nullát generál. Ez a többi Microchip szoftverrel való kompatíbilitáshoz szükséges. 
TBLPTR 21 bites táblamutató (egy programmemória beli címre mutat) 
TABLAT A táblából kiolvasott értéket tárolja 
TOS TOP OF STACK, a verem teteje
PC Programszámláló
PCL Programszámláló alsó bájtj
PCH Programszámláló felső bájtja
PCLATH Programszámláló felső bájtját tároló regiszte
PCLATU Programszámláló legfelső bájtját tároló regiszte
GIE Általános megszakítás engedélyezés
WDT Watchdog Timer 
__
TO
Time-out bit
__
PD
Power-down bit 
C, DC, Z, OV, N  Az ALU státuszbitjei: átvitelbit, fél átvitel, zéróbit, túlcsordulásbit, előjelbit 
[ ]  Feltételes
( ) Tartalom
Hozzárendelés
< > Bitterület a regiszterben 
Halmaz eleme
Dőlt betű A felhasználó által definiált 

 

 

 

BÁJT ORIENTÁLT, FÁJLREGISZTERES UTASÍTÁSOK


ADDWF

Vissza
 példaWFC



ADDWFC

 Vissza



ANDWF

 Vissza



CLRF

 Vissza
 



COMF

 Vissza
 



CPFSEQ

 Vissza



CPFSGT

 Vissza



CPFSLT

Vissza



DECF

Vissza



DECFSZ

Vissza



DCFSNZ

Vissza



INCF

Vissza



INCFSZ

Vissza


INFSNZ

Vissza



IORWF

Vissza



MOVF

Vissza



MOVFF

Vissza



MOVWF

Vissza



MULWF

Vissza



NEGF

Vissza



RLCF

Vissza



RLNCF
Vissza



RRCF

Vissza



RRNCF
Vissza



SET
Vissza



SUBFWB
Vissza



SUBWF
Vissza



SUBWFB
Vissza



SWAPF
Vissza



TSTFSZ
Vissza



XORWF
Vissza


 

BIT ORIENTÁLT, FÁJLREGISZTERES UTASÍTÁSOK


Vezérlőutasítások: http://www.t-es-t.hu/elokep/pic/felhkk/kk/sz110514.htm



BCF
Vissza



BSF
Vissza



BTFSC
Vissza



BTFSS
Vissza



BTG
Vissza


 

LITERAL (KONSTANS) KEZELŐ ÉS VEZÉRLŐ UTASÍTÁSOK



ADDLW
Vissza



ANDLW
Vissza



IORLW
Vissza



LFSR
Vissza



MOVLB
Vissza



MOVLW
Vissza



MULLW
Vissza



RETLW
Vissza



SUBLW
Vissza



XORLW
Vissza


 

VEZÉRLŐ UTASÍTÁSOK



BC
Vissza



BN
Vissza



BNC
Vissza



BNN
Vissza



BNOV
Vissza



BNZ
Vissza



BOV
Vissza


BRA
Vissza



BZ
Vissza



CALL
Vissza



CLRWDT
Vissza



DAW
;                 Unsigned BCD Addition
 ;
 ;       This routine performs a 2 Digit Unsigned BCD Addition
 ; It is assumed that the two BCD numbers to be added are in
 ; locations Num1 & Num2. The result is the sum of Num1+Num2
 ; and is stored in location Num2 and the overflow carry is returned
 ; in location Num1
 ;*******************************************************************;
 ;
 BCDAdd
     movff   Num1,WREG
     addwf   Num2,W                ; perform binary addition
     daw            ; adjust for BCD addition
     movff    WREG,Num2              ; BCD Result to Num2
     clrf    Num1
     rlcf       Num1              ; set Num1 = carry bit
     return ;

-----------------------------------------------------------------------------------

Example 1: Add two packed BCD numbers 99+99
                             (0x99 + 0x99)

OPCODE           Register   Value      DC  C
---------------  --------   ---------  --  -
                WREG       1001 1001
                FileX      1001 1001
                                       x  0
ADDWFC  FileX,W
                WREG       0011 0010   1  1
DAW
                WREG       1001 1000   1  0
                                          ^
                Note the carry -----------^


Example 2: Add two packed BCD numbers 70+70
                             (0x70 + 0x70)

OPCODE           Register   Value      DC  C
---------------  --------   ---------  --  -
                WREG       0111 0000
                FileX      0111 0000
                                       x  0
ADDWFC  FileX,W
                WREG       1110 0000   1  1
DAW
                WREG       0100 1000   0  1
                                          ^
                Note the carry -----------^


Vissza



GOTO
Vissza



NOP
Vissza



POP
Vissza



PUSH
Vissza



RCALL
Vissza



RESET
Vissza



RETFIE
Vissza



RETLW
Vissza



RETURN
Vissza



SLEEP
Vissza

 

ADATMEMÓRIA <--> PROGRAMMEMÓRIA ADATCSERÉT MEGVALÓSÍTÓ UTASÍTÁSOK



TBLRD*
Vissza



TBLRD*+
Vissza



TBLRD*-
Vissza



TBLRD+*
Vissza



TBLWT*
Vissza



TBLWT*+
Info



TBLWT*-
Vissza



TBLWT+*
Vissza

 

file:///C:/Pic_mikrokontrollerek/PIC18_utasitaskeszlet.pdf

A PIC 18xxx mikrovezérlők kiterjesztett utasításkészlettel rendelkeznek.  A legtöbb utasítás egyszavas (16 bit), de létezik 3 kétszavas utasítás is. Mindegyik egyszavas utasítás egy műveleti kódból (MK) – amely megadja az utasítás típusát – és egy vagy két operandusból – amelyre a művelet vonatkozik – áll. Az utasításkészlet 4 alapkategóriára osztható:  Bájt orientált művelet  Bit orientált művelet  Konstans művelet  Vezérlő utasítás A bájt orientált utasítások operandus mezője 3 részből áll: 1. Fájlregiszter (jele: f) 2. Az eredmény helye (jele: d) 3. „Acces” memória (jele: a) A fájlregisztert leíró „f” azt a regisztert jelenti, amire at utasítás irányul. A cél leíró (d) a művelet eredményének helyét adja meg. Amennyiben a d=0 (vagy d=W) az eredmény a WREG-ben keletkezik, amikor pedig a d=1 (vagy d=F) akkor abban a fájlregiszterben, amire az utasítás vonatkozik. A bit orientált utasítások operandus mezője is 3 részből áll: 1. Fájlregiszter (jele: f) 2. A fájlregiszter egy bitje (jele: b) 3. „Access” memória (jele: a) A bitet megadó „b” azonosító a fájlregiszteren belül annak a bitnek a sorszáma, amire a művelet vonatkozik. A konstans műveletek operandus mezője a következő részekből  áll:  A konstans értéke, amit a fájlregiszterbe töltünk (jele: k)  A felhasznált FSR regiszter, amibe a konstanst töltjük (jele: f)  Nincs operandus (jele: -) A vezérlő utasítások operandus mezője pedig a következő részekből áll:  Programmemória cím (jele: n)  A CALL vagy a RETURN utasítás módja (jele: s) 

 Tábla írás és olvasás módja (jele: m)  Nincs operandus (jele: -) A kétszavas utasítások 32 bitből állnak. A második szó felső 4 bitje 1-es. Amennyiben az első szó is utasításként értelmezett, akkor NOP hajtódik végre. Az egyszavas utasítások 1 gépi ciklus alatt hajtódnak végre, kivéve azokat az elágaztató utasításokat, amelyeknél a PC tartalma módosul. A kétszavas utasítás két gépi ciklus alatt hajtódik végre. Minden utasítás 4 oszcillátor periódust igényel. Ez azt jelenti, ha 4MHz a oszcillátor frekvenciája, akkor 1 utasítás 1µs alatt hajtódik végre. Feltételes ugró utasítás esetén amikor a PC tartalma módosul az utasítás végrehajtásához 2µs szükséges. Kétszavas elágaztató utasításoknál, ha a feltétel teljesül a végrehajtási idő 3µs lesz.  A példákban használt formátum „nnnh” hexadecimális számot jelent, ahol a „h” hexát jelent.

 

Soros adatátvitel: http://www.tankonyvtar.hu/hu/tartalom/tamop412A/2010-0017_41_mikrovezerlok_alkalmazasa/ch15s04.html

Pic24 asm: https://books.google.hu/books?id=ndALAAAAQBAJ&printsec=frontcover&hl=hu#v=onepage&q&f=false

https://books.google.hu/books?id=ndALAAAAQBAJ&printsec=frontcover&hl=hu#v=onepage&q&f=false

http://www.microchipdirect.com/ 

Kapacitív tasztatúra: http://shop.tavir.hu/product_info.php/gomb-billentyuzet-joystick-4x4-kap...
http://shop.tavir.hu/index.php/szenzor-gomb-billentyuzet-joystick-c-32_6...

Világító számítógép billentyűzet: https://www.infolex.hu/termekek/adatlap/18313/revoltec-lightboard-xl3-hu...