A base modulban az assembly nyelvü PIC-es programok irását moegkönnyitő
defineok és alapvető makrok vannak definiálva. Minden programsablon
használja ezt a modult, és minden további modulban is használom az itt
definiált dolgokat.
Megjegyzés a Bank kiválasztó utasitásokhoz:
Programozás során azt az elvet
követem, hogy mindig a 0. file regiszter bank az aktiv, és csak akkor
váltok át másikra, ha az tényleg szükséges. Utána pedig rögtön vissza,
igy a legtöbb esetben elég az RP0 állitgatása a Bank 0 és 1 váltása
között. Ha nem definiált, hogy melyik bank van kiválasztva, akkor
a bankLO es bank0 együttes használatával lehet a 0. bankot kiválasztani.
Tehát a bank0 valójában vagy a 0. vagy a 2. bankot válassza ki az RP1
állása szerint, de mivel defaultban az RP1 az én programjaimban 0,
ezert a 0. Bank-ot választja ki. Sok bankváltás esetén ezzel a módszerrel
memóriát lehet megsporolni.
Megjegyzés a jxx ugróutasításokhoz:
További ugróutasitások találhatóak a MATH modulban, az összehasonlitások
eredményének értékeléséhez.
Megjegyzés a többlapos (page) memóriát tartalmazó kontrollerekhez:
A MULTIPAGE makróval adhatjuk meg a program elején, hogy hány db, és mekkora
méretü Page-böl áll a programmemória. A default az 1 page 2048 Word.
Ezek után a programunkban használhatjuk a NUMBER_OF_PAGE define-t,
es a BANKSIZE_BITS változót. Ez utobbi a Page méretének megfelelő
bitszámot tartalmaz. (2048-nál 11) Használhatjuk továbbá az fcall és
fgoto utasitásokat, amelyek kontrollertől függően 1,2 vagy 3 byte-os
utasításra forditódnak, es nem kell foglalkoznunk továbbiakban a Page-ekkel.
Név |
Eredeti utasitás |
Leirás |
bank0 |
bcf STATUS, RP0 |
0-ás (2-es) file regiszter bank kiválasztása (lasd meg a fenti leirást) |
bank1 |
bsf STATUS, RP0 |
1-es (3-as) file regiszter bank kiválasztása (lasd meg a fenti leirást) |
bankLO |
bcf STATUS, RP1 |
Az alsó 256 file regiszter kiválasztása (0. es 1. bank) |
bankHI |
bsf STATUS, RP1 |
Az felső 256 file regiszter kiválasztása (2. es 3. bank) |
ibankLO |
bcf STATUS, RP1 |
Az alsó 256 file regiszter kiválasztása indirekt cimzéshez (0. es 1. bank) |
ibankHI |
bsf STATUS, RP1 |
Az felső 256 file regiszter kiválasztása indirekt cimzéshez (2. es 3. bank) |
skipz |
btfss STATUS, Z |
A következő utasítást nem hajtja végre, ha a Zero Flag=1 |
skipnz |
btfsc STATUS, Z |
A következő utasítást nem hajtja végre, ha a Zero Flag=0 |
skipc |
btfss STATUS, C |
A következő utasítást nem hajtja végre, ha a Carry Flag=1 |
skipnc |
btfsc STATUS, C |
A következő utasítást nem hajtja végre, ha a Carry Flag=0 |
skipdc |
btfss STATUS, DC |
A következő utasítást nem hajtja végre, ha a Digit Carry Flag=1 |
skipndc |
btfsc STATUS, DC |
A következő utasítást nem hajtja végre, ha a Digit Carry Flag=0 |
jz <label> |
btfsc STATUS, Z goto <label> |
A <label>-re ugrik, ha Zero Flag=1 |
jnz <label> |
btfss STATUS, Z goto <label> |
A <label>-re ugrik, ha Zero Flag=0 |
jc <label> |
btfsc STATUS, C goto <label> |
A <label>-re ugrik, ha Carry Flag=1 |
jnc <label> |
btfss STATUS, C goto <label> |
A <label>-re ugrik, ha Carry Flag=0 |
jdc <label> |
btfsc STATUS, DC goto <label> |
A <label>-re ugrik, ha Digit Carry Flag=1 |
jndc <label> |
btfss STATUS, DC goto <label> |
A <label>-re ugrik, ha Digit Carry Flag=0 |
testf <filereg> |
tstf <filereg> |
Ha a <filereg> tartalma nulla, beállitja a Zero Flag-et. |
testw |
xorlw 0 |
Ha a W tartalma nulla, beállitja a Zero Flag-et. |
decw |
addlw -1 |
W tartalmát 1-el csökkenti. |
incw |
addlw 1 |
W tartalmát 1-el növeli. |
clrw |
movlw 0 |
W tartalmát nullázza. |
clrz |
bcf STATUS, Z |
Zero Flag-et nullázza. (Z=0) |
setz |
bsf STATUS, Z |
Zero Flag-et beállítja. (Z=1) |
clrc |
bcf STATUS, C |
Carry Flag-et nullázza. (C=0) |
setc |
bsf STATUS, C |
Carry Flag-et beállítja. (C=1) |
clrdc |
bcf STATUS, DC |
digit Carry Flag-et nullázza. (DC=0) |
setdc |
bsf STATUS, DC |
Digit Carry Flag-et beállítja. (DC=1) |
fcall <label> |
call <label> vagy lcall <label> |
Távoli függvényhivás (A program memória PAGE-ek számától függően call-t
vagy lcall-t fordit helyette.) |
fgoto <label> |
goto <label> vagy lgoto <label> |
Távoli ugrás (A program memória PAGE-ek számától függően goto-t
vagy lgoto-t fordit helyette.) |
Név |
Paraméter |
Leirás |
nop2 |
2 ciklus hosszú nop utasitás (késleltetéshez)
|
MULTIPAGE numofpage, pagesize |
A program memória Page-ek számának és méretének beállítása
(Lásd még a leirást fent.)
|
numofpage |
Page-ek száma. (pl.: 16f872=1, 16f877=4) |
pagesize |
Page-ek mérete (pl.: 12f509=512, 16f877=2048) |
EXPAND_MACROS mode |
A makrók kifejtésének módját lehet beállitani.
Ennek a müködéséhez bizonyos szabályokat be kell tartani a
makrók irása közben. A makrók irásáról és a szabályokról a
modul sablonoknál olvashatsz többet. feltételek kifejtésnél
csak az EXP és NOEXP közötti részeket fejti ki, igy a programunk
olvasható, debuggolható marad.
|
mode |
kifejrés módja: EXP_NONE - nem fejt ki semmit
EXP_COND - feltételes kifejtés
EXP_ALL - mindent kifejt. |
XCHGW file1 |
A W tartalmát felcseréli a file1 tartalmával.
|
XCHG file1, file2 |
A file tartalmát felcseréli a file2 tartalmával.
|
MEM_CLEAR addr, count |
File regiszter tömb törlésére szolgál.
|
addr |
Kezdőcim (000h - 1FFh) |
count |
Kinullázandó tömb hossza |
GOTO_IF_0 filereg, bit, label |
A label-re ugrik, ha a filereg bit-je nulla.
Példa: GOTO_IF_0 PIR1, RCIF, tovabb
|
filereg |
file regiszter |
bit |
bit sorszama 0..7 |
label |
ugrasi cim |
GOTO_IF_1 filereg, bit, label |
A label-re ugrik, ha a filereg bit-je egy.
Példa: GOTO_IF_1 PIR1, RCIF, tovabb
|
filereg |
file regiszter |
bit |
bit sorszama 0..7 |
label |
ugrasi cim |
RETURN_IF_0 filereg, bit |
Visszatér a szubrutinból, ha a filereg bit-je nulla.
Példa: RETURN_IF_0 PIR1, RCIF
|
filereg |
file regiszter |
bit |
bit sorszama 0..7 |
RETURN_IF_1 filereg, bit |
Visszatér a szubrutinból, ha a filereg bit-je egy.
Példa: RETURN_IF_1 PIR1, RCIF
|
filereg |
file regiszter |
bit |
bit sorszama 0..7 |
IT_ENABLE |
Interrupt engedélyezése
|
IT_DISABLE |
Interrupt letíltása
|
LOAD_ADDRESS addr |
Indirekt címet tölt be a FSR-be, és beállítja az IRP bitet is.
Példa: LOAD_ADDRESS buffer movf INDF,w
|
addr |
file regiszter cime (0...1FFh) |
BANK0 |
0. bank kiválasztása
|
BANK1 |
1. bank kiválasztása
|
BANK2 |
3. bank kiválasztása
|
BANK3 |
3. bank kiválasztása
|
BIT_SET filereg, bit |
bit 1-re állítása
|
BIT_CLEAR filereg, bit |
bit 0-re állítása
|
BIT_TOGGLE filereg, bit |
bit állapot átváltása (0->1 ill. 1->0)
|
BIT_TOGGLEW filereg, bit |
bit állapot átváltása (0->1 ill. 1->0) a W regiszter hasznalataval (rövidebb, gyorsabb)
|
BIT_COPY destfilereg, destbit, srcfilereg, srcbit |
bit masolása egy fileregiszterböl egy masikba
|
BIT_INVCOPY destfilereg, destbit, srcfilereg, srcbit |
bit invertálva masolása egy fileregiszterböl egy masikba
|
TABLE_READ table_address, indexreg |
tabla egy elemének kiolvasása
Példa: TABLE_READ version, index
version dt "Kütyü 1.00"
|