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