BASE modul


      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.

Utasitás helyettesitések

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

Makrók

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"