Vissza a főoldalra    Vissza a PIC főoldalra

<< Előző oldal   Vissza a tartalomjegyzékhez   Következő oldal >>

 


11.5.14. A fordításvezérlő utasítások részletes bemutatása


__BADRAM;
BANKISEL;
BANKSEL;
CBLOCK;
CODE;
__CONFIG;
CONSTANT;
DA;
DATA;
DB;
DE;
#DEFINE;
      DT;
DW;
ELSE;
END;
ENDC;
ENDIF;
ENDM;
ENDW;
EQU;
ERROR;
ERRORLEVEL;
EXITM;
      EXPAND;
EXTERN;
FILL;
GLOBAL;
IDATA;
__IDLOCS;
IF;
IFDEF;
IFNDEF;
INCLUDE;
LIST;
LOCAL;
      MACRO;
__MAXRAM;
MESSG;
NOEXPAND;
NOLIST;
ORG;
PAGE;
PAGESEL;
PROCESSOR;
RADIX;
RES;
SET;
      SPACE;
SUBTITLE;
TITLE;
UDATA;
UDATA_ACS;
UDATA_OVR;
UDATA_SHR;
#UNDEFINE;
VARIABLE;
WHILE;



__BADRAM

      A __BADRAM és __MAXRAM fordításvezérlő utasítások együttesen jelzik a fordító- és összefűző programoknak a nem használható adatmemória-területeket, illetve a nem használható adatmemória-címeket.
      A __BADRAM fordításvezérlő utasítással egyes nem használható memóriacímek és címtartományok adhatók meg:

__badram H'07'-H'09', H'0D'-H'1E'
__badram H'87'-H'89', H'8D', H'8F'-H'9E'

      Látható, hogy az egyes címtartományokat és címeket vesszővel kell elválasztani egymástól. A címtartományok első és utolsó címe közé kötőjelet kell tenni. A címek és címtartományok vegyesen is szerepelhetnek az utasításban.
      A __BADRAM utasításban szereplő címek nem lehetnek nagyobbak a __MAXRAM utasítás által meghatározott utolsó memóriahely címénél.
      A nem használható memóriaterület a gyári csatolható deklarációs fájlban (*.inc) is megadásra kerül, amelynek csatolása az INCLUDE fordításvezérlő utasítással végezhető el.

Vissza a lap tetejére


BANKISEL

      A BANKISEL fordításvezérlő utasítás az adatmemória-lapot (Bank) kiválasztó programrész automatikus létrehozását vezérli fordításkor, vagy objektum fájlok összefűzésekor, közvetett címzés esetén.
      A BANKISEL fordításvezérlő utasítást egy adatmemória-hely azonosító címkének kell követnie:

movlw     CIM01
movwf     FSR
bankisel  CIM01
...
...
movwf     INDF

      A példában a CIM01 azonosító egy előzőleg definiált adatmemória-cím (például: CIM01 equ 0x2A). A BANKISEL utasításnak meg kell előznie az indirekt cím által kijelölt adatregiszteren való műveletvégzést, de nem fontos közvetlenül előtte állnia.
      Fordításkor az MPASM fordító program a STATUS regiszterben elhelyezett IRP vezérlő bitet beállító programrészt szúrja bele a kész programba.
      A BANKISEL fordításvezérlő utasításnak nem a hordozható objektum fájl létrehozásakor van szerepe, hanem az objektum fájlok összefűzésekor segíti elő a helyes indirekt címzést. Az MPLINK összefűző program szintén a STATUS regiszterben elhelyezett IRP vezérlő bitet beállító programrészt szúrja bele a kész programba.
      Ha a mikrovezérlő csak két adatmemória-lapot tartalmaz, az utasításnak nincs semmilyen hatása és a fordító program küld egy Message[312] azonosítójú "lapváltás nem szükséges - módosítás nem történt" figyelmeztető üzenetet

Vissza a lap tetejére


BANKSEL

      A BANKSEL fordításvezérlő utasítás az adatmemória-lapot (Bank) kiválasztó programrész automatikus létrehozását vezérli fordításkor, vagy objektum fájlok összefűzésekor, közvetlen címzés esetén.
      A BANKSEL fordításvezérlő utasítást egy adatmemória-hely azonosító címkének kell követnie:

banksel   CIM02
movwf     CIM02

      A példában a CIM02 azonosító egy előzőleg definiált adatmemória-cím (például: CIM02 equ 0x2B). A BANKSEL utasításnak meg kell előznie a kijelölt adatregiszteren való műveletvégzést, de nem fontos közvetlenül előtte állnia.
      Fordításkor az MPASM fordító program a STATUS regiszterben elhelyezett RP0 és RP1 vezérlő biteket beállító programrészt szúrja bele a kész programba. Ha a célregiszter nem a 0. lapon van, a fordító program a biztonság kedvéért küld egy Message[302] azonosítójú "regiszter nem a 0. lapon van - ellenőrizd a lapváltó biteket" figyelmeztető üzenetet.
      A BANKSEL fordításvezérlő utasításnak nem a hordozható objektum fájl létrehozásakor van szerepe, hanem az objektum fájlok összefűzésekor segíti elő a helyes indirekt címzést. Az MPLINK összefűző program szintén a STATUS regiszterben elhelyezett RP0 és RP1 vezérlő biteket beállító programrészt szúrja bele a kész programba.

Vissza a lap tetejére


CBLOCK

      A CBLOCK fordításvezérlő utasítás egy konstans-azonosító blokk kezdetét jelöli, amellyel egymás után következő konstansok egyszerűen definiálhatóak. A vezérlő utasítást követő paraméter a konstans blokk kezdőértékét adja meg.
      Egy hat egymás után következő értékű konstans megadására mutat példát a következő programrészlet:

cblock 0x20
  ADAT1, ADAT2, ADAT3, ADAT4
  ADAT5, ADAT6
endc

      A deklaráció eredménye: ADAT1=0x20, ADAT2=0x21, ADAT3=0x22, ADAT4=0x23, ADAT5=0x24, ADAT6=0x25. Látható, hogy a konstansok értéke egyesével nő.
      A deklarációs részt egy
ENDC fordításvezérlő utasítással kell lezárni. Egy soron belül elhelyezett konstansok azonosítóit vesszővel kell elválasztani egymástól, de azok több sorba is írhatóak.
      Ha a konstansok értékei közötti növekmény nagyobb, mint egy, a deklarációt a következőképpen kell elvégezni:

cblock 0x20
  SZO1, SZO2:2
  SZO3:4, SZO4:2
endc

      A deklaráció eredménye: SZO1=0x20, SZO2=0x22, SZO3=0x26, SZO4=0x28. Látható, hogy a konstansok értékei a megadott növekményekkel eltolva követik egymást. Azt, hogy a megadott konstans értéke mennyivel kövesse az előzőét, egy kettőspont után kell megadni.

      Ha a CBLOCK utasítást nem követi számérték, akkor a kezdőérték az előző blokk utolsó eleme utáni érték lesz:

cblock 0x20
  ADAT1
  ADAT2
endc
cblock
  ADAT3
  ADAT4
endc

      A deklaráció eredménye: ADAT1=0x20, ADAT2=0x21, ADAT3=0x22, ADAT4=0x23.

Vissza a lap tetejére


CODE

      A CODE fordításvezérlő utasítás hordozható objektum fájlok programkód részének kezdetét jelöli. Az utasítás előtt állhat egy azonosító címke is, ami nem kötelező. Egy forráskódban több különálló kódrész is lehet, külön CODE utasításokkal és persze különböző azonosító címkékkel kezdve.
      A CODE fordításvezérlő utasítást követheti egy programmemória-cím, amely a kód kezdetét jelöli ki a programmemóriában:

START   code   H'01FF'
        ...    ...

      Egy objektum fájlon belül a programkód részt abban az esetben is a CODE fordításvezérlő utasítással kell kezdeni, ha nem szükséges megadni azonosító címkét és/vagy kezdőcímet:

       code
...    ...    ...

      Hordozható objektum fájlok készítésére és a CODE fordításvezérlő utasítás használatára mutat példákat a 11.5.9. fejezet.

Vissza a lap tetejére


__CONFIG

      A __CONFIG fordításvezérlő utasítás hatására az MPASM fordító program elhelyezi a mikrovezérlő konfigurációs beállításait a hexadecimális kimeneti fájlban.
      A __CONFIG utasítás használatához szükséges, hogy előzőleg a mikrovezérlő típusa a LIST vagy a PROCESSOR utasítással definiálva legyen:

processor    16f84a
__config     H'01FF'

      Az utasítást a konfigurációs szó megkívánt tartalma követi, amely programozáskor a mikrovezérlőbe íródik.
      A hexadecimális kimeneti fájlban a fenti példa a következőképpen jelenik meg: :02400E00FF01B0. (A 400E-es (bájt-) cím jelöli ki a konfigurációs szó helyét, a H'2007' programmemória-címet.)

      A célmikrovezérlőhöz tartozó *.inc nevű gyári csatolható definíciós fájl csatolása esetén a konfigurációs értékek a következőképpen is megadhatóak:

processor    16f84a
__config     _CP_OFF & _PWRT_ON
__config     _WDT_OFF & _RC_OSC

      A __CONFIG fordításvezérlő utasítást követő azonosítók a csatolt definíciós fájlban vannak deklarálva. Látható az is, hogy az azonosítók több __CONFIG utasításra is oszthatók és az egyes azonosítókat a bitenkénti ÉS-művelet jelével kell összekapcsolni.

Vissza a lap tetejére


CONSTANT

      A CONSTANT fordításvezérlő utasítás segítségével állandók definiálhatók, amelyek a programon belül már nem változtathatóak meg:

constant    HOSSZ=H'20'

      Az utasítás után az állandó azonosítója következik (HOSSZ), majd egyenlőség jel után az állandó értéke (H'20'). A program további részében a HOSSZ azonosító használata egyenértékű a közvetlen H'20' érték szerepeltetésével.
      A CONSTANT fordításvezérlő utasítás az
EQU utasítással egyenértékű; a VARIABLE és SET változó definiáló utasításoktól abban különbözik, hogy az utóbbiak értéke a program további részében megváltozhat. A konstansok és változók vegyesen is használhatóak egy matematikai kifejezésen belül:

constant    REKORDHOSSZ=H'10'
variable    REKORDSZAM=H'08'
...
constant    HELYFOGLALAS=REKORDHOSSZ*REKORDSZAM

Vissza a lap tetejére


DA

      A DA fordításvezérlő utasítás segítségével (a DATA utasításhoz hasonlóan) 14 bites adatok, köztük ASCII szabvány szerint kódolt karakterek és karakterláncok helyezhetők el a mikrovezérlő programmemóriájában. Az utasításban megadott adat az utasítás forrásprogramon belüli helyének megfelelő programmemória-helyre kerül. Így a forrásprogram végén elhelyezett DA utasítás(ok) által megadott adat(ok) az utolsó utasítás utáni memóriahelytől kezdődően kerül(nek) tárolásra. A forrásprogram programsorai között elhelyezett DA utasítás az adatot a mikrovezérlő utasítások közé helyezi el, az utasítás helyének megfelelő helyre. (Az utóbbi eset hibás működést is eredményezhet!)
      Az utasításban megadott számok méretüktől függetlenül 14 biten tárolódnak. A 14-bites memóriahelyen tárolható legnagyobb szám a H'3FFF' érték. Ha az utasításban ennél nagyobb érték kerül megadásra, akkor a fordítás során annak csak az alsó 14 bitje kerül be a hexadecimális kimeneti fájlba. Kisebb számok megadása esetén (például: H'E', H'0') a számok nullákkal egészülnek ki a 14-bites szóhossz eléréséig (H'000E', H'0000').
      Az ASCII kód szerinti karakterláncokat idézőjelek között kell megadni:

da    "abcd"
da    "ab", "cd"

      Az idézőjelek között megadott karakterek ASCII szabványos 7-bites számkódjai kerülnek tárolásra a programmemóriában. Egy memóriahelyre kettő darab 7-bites karakter azonosító kerül az alábbiak szerint összevonva:

11.5.14-1. Táblázat
A tárolandó karakterek a b
A tárolandó ASCII
kód szerinti adat
61h 62h
7-bites bináris érték 110 0001 110 0010
14-bites összevont érték 11 0000 1110 0010
Hexadecimális érték 30E2

      A megadott karakterlánc karakterei párosával kerülnek tárolásra úgy, hogy az első karakter a memóriahely felső hét bitjére kerül, a második karakter pedig az alsó hét bitre. Látható, hogy az egyes karakterláncokat vesszővel kell egymástól elválasztani. A fenti programpélda első sora egy, második sora két karakterláncot tartalmaz, de tárolásuk során mégis ugyanazok a számértékek kerülnek a memóriába (30E2, 31E4).

      Az ASCII karakterek és karakterláncok megadása közötti különbségeket mutatja be a következő programrészlet:

da    "a"    ;tárolva: 11 0000 1000 0000
da    'a'    ;tárolva: 00 0000 0110 0001

      Az első sorban az a betű karakterláncként van megadva, így a 14-bites memóriahely felső 7-bites részébe kerül: H'3080'.
      A második sorban az a betű karakterként van megadva, így a 14-bites memóriahely alsó 7-bites részébe kerül: H'0061'.

      Néhány különböző esetre mutat példát a következő táblázat:

11.5.14-2. Táblázat
Példa A programmemória
tartalma
Megjegyzés
da    B'11011010000111' H'3687' A számadatok bármely alakban megadhatók.
da    O'33207' H'3687'
da    D'13959' H'3687'
da    H'3687' H'3687'
da    H'A2' H'00A2' A megadott számadatok 14-bitesre egészülnek ki.
da    H'21', H'BF' H'0021', H'00BF'
da    H'FFFF' H'3FFF' A H'3FFF'-nél nagyobb számok 14 biten felüli része elveszik.
da    'a' H'0061' A megadott karakterek ASCII kódja az alsó 8 biten tárolódik.
da    'a', 'b' H'0061', H'0062'
da    "a" H'3080' Az egyetlen karakterből álló karakterlánc a felső 7 biten tárolódik, az alsó 7 bitre egy nulla értékű karakter kerül.
da    "ab" H'30E2' Az első karakter a felső, a második az alsó 7 biten tárolódik.
da    "a", "b" H'3080', H'3100' A vesszővel elválasztott következő karakterlánc mindig új memóriahelyen kezdődik.
da    "abc" H'30E2', H'3180' A páratlan számú karaktert tartalmazó karakterláncok utolsó karaktere a felső 7 bitre kerül és egy nulla értékű karakterrel egészül ki.
da    "abcd" H'30E2', H'31E4' -
da    "ab", "cd" H'30E2', H'31E4' -
da    "a", "b", "cd" H'3080', H'3100', H'31E4' -

      A táblázatban a hibás eredményt adó parancssor halványabb színnel van jelölve.

Vissza a lap tetejére


DATA

      A DATA fordításvezérlő utasítás segítségével (a DA utasításhoz hasonlóan) 14 bites adatok, köztük ASCII szabvány szerint kódolt karakterek helyezhetők el a mikrovezérlő programmemóriájában. A különbség az, hogy a DATA utasítás a közepes teljesítményű, 14-bites programmemóriájú mikrovezérlők esetében nem használható karakterláncok tárolására. (Vigyázat! A gyári MPASM kézikönyvben (DS33014G) ez hibásan szerepel.)
      Az utasításban megadott adat az utasítás forrásprogramon belüli helyének megfelelő programmemória-helyre kerül. Így a forrásprogram végén elhelyezett DATA utasítás(ok) által megadott adat(ok) az utolsó utasítás utáni memóriahelytől kezdődően kerül(nek) tárolásra. A forrásprogram programsorai között elhelyezett DATA utasítás az adatot a mikrovezérlő utasítások közé helyezi el, az utasítás helyének megfelelő helyre. (Az utóbbi eset hibás működést is eredményezhet!)
      Az utasításban megadott számok méretüktől függetlenül 14 biten tárolódnak. A 14-bites memóriahelyen tárolható legnagyobb szám a H'3FFF' (16383d) érték. Ha az utasításban ennél nagyobb érték kerül megadásra, akkor a fordítás során annak csak az alsó 14 bitje kerül be a hexadecimális kimeneti fájlba. Kisebb számok megadása esetén (például: H'E', H'0') a számok nullákkal egészülnek ki a 14-bites szóhossz eléréséig (H'000E', H'0000').

      Néhány különböző esetre mutat példát a következő táblázat:

11.5.14-3. Táblázat
Példa A programmemória
tartalma
Megjegyzés
data    B'11011010000111' H'3687' A számadatok bármely alakban megadhatók.
data    O'33207' H'3687'
data    D'13959' H'3687'
data    H'3687' H'3687'
data    H'A2' H'00A2' A megadott számadatok 14-bitesre egészülnek ki.
data    H'21', H'BF' H'0021', H'00BF'
data    H'FFFF' H'3FFF' A H'3FFF'-nél nagyobb számok 14 biten felüli része elveszik.
data    'a' H'0061' A megadott karakterek ASCII kódja az alsó 8 biten tárolódik.
data    'a', 'b' H'0061', H'0062'
data    "a" H'2100' Mivel az utasítás a karaktereket 8-bites hosszban tárolja, minden páratlan karakter értékének első két bitje elveszik, vagyis a páratlan karakterek hibásan tárolódnak.
A közepes teljesítményű, 14-bites programmemóriájú mikrovezérlők esetében a DATA vezérlő utasítás nem használható karakterláncok tárolására!
data    "ab" H'2162'
data    "a", "b" H'2100', H'2200'
data    "abc" H'2162', H'2300'
data    "abcd" H'2162', H'2364'
data    "ab", "cd" H'2162', H'2364'
data    "a", "b", "cd" H'2100', H'2200', H'2364'

      A táblázatban a hibás eredményt adó parancssorok halványabb színnel vannak jelölve.

      Hordozható objektum fájlok készítésekor a DATA utasítás az IDATA utasítással kezdődő értékadásos deklarációs részben 16-bites adatokhoz rendel két 8-bites adatmemóriahelyet:

        idata
SZO1    data   H'1234'
SZO2    data   H'ABCD'
SZAVAK  data   H'1234', H'1235', H'1236'

      A DATA utasítás az előtte levő címke által (az objektum fájlok összefűzésekor) kijelölt adatmemóriahelyekre az utasításban megadott kezdeti érték(ek)et helyezi el. Az első 8-bites helyre az alsó, a következőre pedig a felső bájt kerül.

Vissza a lap tetejére


DB

      Ez az utasítás a közepes teljesítményű, 14-bites programmemóriájú mikrovezérlők esetében a programmemória írására nem használható! Vigyázat! A gyári MPASM kézikönyv (DS33014G) ezt külön nem említi.
      A DB fordításvezérlő utasítás segítségével 8 bites adatok, köztük ASCII szabvány szerint kódolt karakterek és karakterláncok helyezhetők el a nagyteljesítményű, 16-bites programmemóriájú mikrovezérlők programmemóriájában. Egy 16-bites memóriahelyre két 8-bites adat kerül, az első a felső, a második az alsó bájtra.

      Közepes teljesítményű, 14-bites programmemóriájú mikrovezérlőkre fordított esetekre mutat példát a következő táblázat:

11.5.14-4. Táblázat
Példa A programmemória
tartalma
Megjegyzés
db    H'3687' H'0700' A fordító program először a bájton felüli részt H'36', illetve H'FF'-et vágja le, majd a H'8700', illetve H'FF00'-ból a felső két bitet.
db    H'FFFF' H'3F00'
db    H'A2' H'2200' A fordító program a 8-bites számból a felső két bitet levágja.
db    H'BF', H'21' H'3F21' A fordító program az első 8-bites számból a felső két bitet levágja, de a második szám hibátlanul tárolódik.
db    0, H'A2' H'00A2' Ezzel a módszerrel a 8-bites adat(ok) a DA és DATA utasításokhoz hasonlóan hibátlanul tárolható(k).
db    0, H'FF', 0, H'2B' H'00FF', H'002B'
db    'a' H'2100' A fordító program az utasításban levő minden páratlan karakter felső két bitjét levágja.
db    'a', 'a' H'2161'
db    0, 'a' H'0061' Ezzel a módszerrel a karakterek a DA és DATA utasításokhoz hasonlóan hibátlanul tárolhatók.
db    "a" H'2100' A fordító program a karakterlánc minden páratlan karakterének felső két bitjét levágja.
db    "ab" H'2162'

      A táblázatban a hibás eredményt adó parancssorok halványabb színnel vannak jelölve.

      Hordozható objektum fájlok készítésekor a DB utasítás az IDATA utasítással kezdődő értékadásos deklarációs részben 8-bites adatmemóriahelyek hozzárendelésére szolgál:

        idata
ADAT1   db     H'12'
ADAT2   db     H'22'
SOR     db     H'01', H'02', H'03'
SZO     db     "Hello!"

      A DB utasítás az előtte levő címke által (az objektum fájlok összefűzésekor) kijelölt adatmemóriahely(ek)re az utasításban megadott kezdeti érték(ek)et helyezi el.

Vissza a lap tetejére


DE

      A DE fordításvezérlő utasítás segítségével 8 bites adatok, köztük ASCII szabvány szerint kódolt karakterek és karakterláncok helyezhetők el a mikrovezérlő programmemóriájában vagy EEPROM adatmemóriájában.
      Az utasításban megadott adat az utasítás forrásprogramon belüli helyének megfelelő programmemória-helyre kerül. Így a forrásprogram végén elhelyezett DE utasítás(ok) által megadott adat(ok) az utolsó utasítás utáni memóriahelytől kezdődően kerül(nek) tárolásra. A forrásprogram programsorai között elhelyezett DE utasítás az adatot a mikrovezérlő utasítások közé helyezi el, az utasítás helyének megfelelő helyre. (Az utóbbi eset hibás működést is eredményezhet!)
      Az EEPROM területet jelképező memóriahelyek elérésére mutat példát a következő programrészlet:

org   H'2100'    ;az EEPROM terület kiválasztása
de    H'12'
de    H'24'

      Néhány esetre mutat példát a következő táblázat:

11.5.14-5. Táblázat
Példa A programmemória
tartalma
Megjegyzés
de    H'3687' H'0087' A fordító program a bájton felüli részt, H'36'-ot, illetve H'FF'-et, levágja.
de    H'FFFF' H'00FF'
de    H'A2' H'00A2' A 8-bites számok az alsó 8 biten tárolódnak.
de    H'BF', H'21' H'00BF', H'0021' Minden 8-bites szám külön memóriahelyen tárolódik.
de    'a' H'0061' A karakterek ASCII kódja az alsó 7 biten tárolódik.
de    'a', 'b' H'0061', H'0062'
de    "a" H'0061' A karakterlánc minden karaktere külön memóriahelyen tárolódik.
de    "ab" H'0061', H'0062'
de    "abc" H'0061', H'0062', H'0063'

      A táblázatban a hibás eredményt adó parancssorok halványabb színnel vannak jelölve.

Vissza a lap tetejére


#DEFINE

      A #DEFINE fordításvezérlő utasítás segítségével szöveghelyettesítő címkék adhatók meg. A program további részében a címke alkalmazása ugyanazt a fordítási eredményt adja, mintha maga a szöveg lenne ott elhelyezve.
      Néhány egyszerű példa:

#define    cimke szoveg
#define    max H'24'
#define    min H'05'
#define    kimenet01 H'06',0
#define    kimenet02 H'06',1
...
...
movlw      max
bsf        kimenet01

      A #DEFINE utasítást a címke követi, majd egy vagy több szóköz után jön a helyettesítendő szöveg.
      Egy összetettebb alkalmazás, amely túlmegy a szöveghelyettesítésen:

#define    terfogat(a,b,c) (a*b*c)
...
...
movlw      terfogat(1,2,2)

      Ebben a példában a #DEFINE utasítás tulajdonképpen egy hívható függvényt valósít meg. A terfogat(1,2,2) helyére a fordítóprogram az (1*2*2) értéket, azaz 4-et helyettesít be.
      Egy érdekes példa:

#define    bekapcsolas BSF 0x06,0
#define    kikapcsolas BCF 0x06,0
...
...
bekapcsolas
...
kikapcsolas

      A #DEFINE utasítás segítségével akár egy egész utasítássor is helyettesíthető. Ez egy, a makrókhoz hasonló, egyszerűsítő eljárás, amely a programozást könnyíti.

Vissza a lap tetejére


DT

      A DT fordításvezérlő utasítás segítségével 8 bites adatok, köztük ASCII szabvány szerint kódolt karakterek és karakterláncok helyezhetők el a mikrovezérlő programmemóriájában úgy, hogy minden 8-bites érték egy-egy RETLW utasításban legyen elhelyezve. Ezzel megoldható az adattáblázatok tárolása a programemóriában.
      Az utasításban megadott adat az utasítás forrásprogramon belüli helyének megfelelő programmemória-helyre kerül. Így a forrásprogram végén elhelyezett DT utasítás(ok) által megadott adat(ok) az utolsó utasítás utáni memóriahelytől kezdődően kerül(nek) tárolásra. A forrásprogram programsorai között elhelyezett DT utasítás az adatot a mikrovezérlő utasítások közé helyezi el, az utasítás helyének megfelelő helyre. (Az utóbbi eset hibás működést is eredményezhet!)
      Egy adattáblázat elhelyezésére mutat példát a következő programrészlet:

org   H'700'    ;a kezdőcím megadása
dt    H'12'
dt    H'24'
dt    H'20'
dt    H'17'
dt    H'11'
dt    H'1A'
dt    H'05'
dt    H'B4'

      Néhány esetre mutat példát a következő táblázat:

11.5.14-6. Táblázat
Példa A programmemória
tartalma
Megjegyzés
dt    H'3687' H'3487' A fordító program a bájton felüli részt, H'36'-ot, illetve H'FF'-et, levágja.
dt    H'FFFF' H'34FF'
dt    H'A2' H'34A2' A 8-bites számok az alsó 8 biten tárolódnak.
dt    H'BF', H'21' H'34BF', H'3421' Minden 8-bites szám külön memóriahelyen tárolódik.
dt    'a' H'3461' A karakterek ASCII kódja az alsó 7 biten tárolódik.
dt    'a', 'b' H'3461', H'3462'
dt    "a" H'3461' A karakterlánc minden karaktere külön memóriahelyen tárolódik.
dt    "ab" H'3461', H'3462'
dt    "abc" H'3461', H'3462', H'3463'

      A táblázatban a hibás eredményt adó parancssorok halványabb színnel vannak jelölve.

Vissza a lap tetejére


DW

      A DW fordításvezérlő utasítás segítségével maximum 14 bites adatok, köztük ASCII szabvány szerint kódolt karakterek helyezhetők el a mikrovezérlő programmemóriájában.
      Az utasításban megadott adat az utasítás forrásprogramon belüli helyének megfelelő programmemória-helyre kerül. Így a forrásprogram végén elhelyezett DW utasítás(ok) által megadott adat(ok) az utolsó utasítás utáni memóriahelytől kezdődően kerül(nek) tárolásra. A forrásprogram programsorai között elhelyezett DW utasítás az adatot a mikrovezérlő utasítások közé helyezi el, az utasítás helyének megfelelő helyre. (Az utóbbi eset hibás működést is eredményezhet!)
      Néhány esetre mutat példát a következő programrészlet:

dw    H'3FFF'
dw    H'3F15'
dw    A'a'
dw    H'B4'

      További példák:

11.5.14-7. Táblázat
Példa A programmemória
tartalma
Megjegyzés
dw    H'3687' H'3487' A H'3FFF'-nél alacsonyabb értékek helyesen tárolódnak.
dw    H'FFFF' H'3FFF' A fordító program a H'3FFF' érték feletti részt, vagyis a 16. és 15. bitet levágja.
dw    H'A2' H'00A2' A 8-bites számok az alsó 8 biten tárolódnak.
dw    H'BF', H'21' H'00BF', H'0021' Minden szám külön memóriahelyen tárolódik.
dw    'a' H'0061' A karakterek ASCII kódja az alsó 7 biten tárolódik.
dw    'a', 'b' H'0061', H'0062'
dw    "a" H'2100' Mivel az utasítás a karaktereket 2x8=16-bites hosszban tárolja, minden páratlan karakter értékének első két bitje elveszik, vagyis a páratlan karakterek hibásan tárolódnak.
A közepes teljesítményű, 14-bites programmemóriájú mikrovezérlők esetében a DW utasítás nem használható karakterláncok tárolására!
dw    "ab" H'2162'
dw    "abc" H'2162', H'2300'

      A táblázatban a hibás eredményt adó parancssorok halványabb színnel vannak jelölve.

      Hordozható objektum fájlok készítésekor a DW utasítás az IDATA utasítással kezdődő értékadásos deklarációs részben 16-bites adatokhoz rendel két 8-bites adatmemóriahelyet:

        idata
SZO1    dw    H'1234'
SZO2    dw    H'ABCD'
SZAVAK  dw    H'1234', H'1235', H'1236'

      A DW utasítás az előtte levő címke által (az objektum fájlok összefűzésekor) kijelölt adatmemóriahelyekre az utasításban megadott kezdeti érték(ek)et helyezi el. Az első 8-bites helyre az alsó, a következőre pedig a felső bájt kerül.

Vissza a lap tetejére


ELSE

      Az ELSE fordításvezérlő utasítás a feltételes fordítási programszerkezetek egyik alaputasítása. Az ELSE utasítást követő programrész csak abban az esetben fordítódik le, ha a megelőző IF utasításban megadott feltétel nem teljesül. Az utasítás makrón belül is használható.
      A feltételes fordítási programszerkezetet mutatja be a következő programrészlet:

...
if    ADAT=H'FF'
...
...
else
...
...
endif

      Látható, hogy a feltételes fordítási programszerkezetet az ENDIF utasítással kell zárni.
      Az ELSE fordításvezérlő utasítás használata nem kötelező. Ha nincs rá szükség, elhagyható.

Vissza a lap tetejére


END

      Az END fordításvezérlő utasítás a forráskód végét jelzi a fordítóprogramnak. Az END utasításnak utolsó utasításként a program végén kell állnia. Használata kötelező!

processor 16f84a
...
...
end

Vissza a lap tetejére


ENDC

      Az ENDC vezérlő utasítás a CBLOCK utasítás által megadott konstans-azonosító blokk végét jelöli. Használata kötelező.

cblock 0x20
  ADAT1, ADAT2, ADAT3, ADAT4
  ADAT5, ADAT6
endc

Vissza a lap tetejére


ENDIF

      Az IF fordításvezérlő utasítással kezdődő feltételes fordítási programszerkezeteket és az IFDEF vagy IFNDEF utasításokkal kezdődő feltételesen végrehajtódó szerkezeteket minden esetben az ENDIF utasítással kell lezárni.
      Egy feltételes fordítási programszerkezetet mutat be a következő programrészlet:

...
if    ADAT=H'FF'
...
...
else
...
...
endif

Vissza a lap tetejére


ENDM

      A MACRO fordításvezérlő utasítással kezdődő makrókat minden esetben az ENDM utasítással kell lezárni.
      Egy makrót mutat be a következő programrészlet:

atlag    macro    adat1, adat2
         ...
         ...
         endm

Vissza a lap tetejére


ENDW

      A WHILE fordításvezérlő utasítással kezdődő ismétlő ciklusokat minden esetben az ENDW utasítással kell lezárni.
      Egy ismétlő ciklust mutat be a következő programrészlet:

variable cim
...
cim = H'0A'
while cim < H'21'
clrf  cim
cim += 1
endw

Vissza a lap tetejére


EQU

      Az EQU fordításvezérlő utasítás segítségével állandók definiálhatók, amelyek a programon belül már nem változtathatóak meg:

HOSSZ    equ    H'20'

      Az utasítás előtt az állandó azonosítója áll (HOSSZ), utána pedig az állandó értéke (H'20'). A program további részében a HOSSZ azonosító használata egyenértékű a közvetlen H'20' érték szerepeltetésével.
      Az EQU fordításvezérlő utasítás a
CONSTANT utasítással egyenértékű; a VARIABLE és SET változó definiáló utasításoktól abban különbözik, hogy az utóbbiak értéke a program további részében megváltozhat. A konstansok és változók vegyesen is használhatóak egy matematikai kifejezésen belül:

REKORDHOSSZ    equ    H'10'
REKORDSZAM     set    H'04'
...            ...
...            ...
HELYFOGLALAS   equ    REKORDHOSSZ*REKORDSZAM

Vissza a lap tetejére


ERROR

      Az ERROR fordításvezérlő utasítással tetszőleges, 1..80 karakter hosszú (hiba)üzenet íratható ki a fordítási folyamat végén létrehozott fordítási hibafájlba és fordítási lista fájlba.
      Például:

if    adat > H'24'
error "Értéktúllépés!"
endif

      A fenti példa feltételének teljesülése esetén az Error[101] C:\MPLAB\PROBA.ASM 19 : ERROR: (Értéktúllépés!) üzenet jelenik meg, amely az Error[101] "felhasználó által generált hiba" azonosítóval kezdődik, majd a forrásfájl elérési útjával és nevével, a hibaüzenet sorszámával és magával a hibaüzenettel folytatódik.

Vissza a lap tetejére


ERRORLEVEL

      Az ERRORLEVEL fordításvezérlő utasítással a fordítási folyamat végén létrehozott fordítási hibafájlba és fordítási lista fájlba írott hibaüzenetek típusa állítható be.
      Például:

errorlevel 2

      Vagy:

errorlevel 1, -202

      Az utasítás lehetséges paramétereit mutatja be a következő táblázat:

11.5.14-8. Táblázat
Paraméter Jelentés Példa
0 Üzenetek, figyelmeztetések és hibák kiírása. errorlevel 0
1 Figyelmeztetések és hibák kiírása. errorlevel 1
2 Csak a hibák kiírása. errorlevel 2
-hibaazonosító A hibaazonosítóval kijelölt hiba, figyelmeztetés vagy üzenet megjelenésének tiltása. errorlevel -202
+hibaazonosító A hibaazonosítóval kijelölt hiba, figyelmeztetés vagy üzenet megjelenésének engedélyezése. errorlevel +202

Vissza a lap tetejére


EXITM

      Az EXITM fordításvezérlő utasítás egy megkezdett makróból való soron kívüli kilépést valósít meg, még az ENDM makró záró utasítás előtt. Az EXITM és a soron következő ENDM utasítások közötti programrészt a fordító program figyelmen kívül hagyja.
      Egy makróból való soron kívüli kilépést mutat be a következő programrészlet:

atlag    macro    adat1, adat2
         if adat1 > H'7F'
         exitm
         endif
         ...
         ...
         endm

Vissza a lap tetejére


EXPAND

      Az EXPAND fordításvezérlő utasítás engedélyezi a forrásfájlban szereplő makrók hívási helyükre való beillesztését a fordítási lista fájl létrehozásakor. Az utasítás hatására a makróhívások helyére beépül a hívott makró összes utasítássora.
      Az EXPAND utasítás egyenértékű a /m és /m+ parancssori opciókkal.
      Az EXPAND utasítás hatására történő makró listázás kikapcsolható a NOEXPAND fordításvezérlő utasítással.
      Az EXPAND utasítás használata:

...
expand
...

Vissza a lap tetejére


EXTERN

      Az EXTERN fordításvezérlő utasítás hordozható objektum fájlok létrehozásakor lehetővé teszi más objektum fájlokban deklarált címkék használatát. (Például egy másik objektum fájlban elhelyezett szubrutin hívását.)
      Az EXTERN utasításnak a címkére való hivatkozást meg kell előznie.
      Ha az EXTERN utasításban szereplő címke az utasítást tartalmazó objektum fájlban van deklarálva, a fordító program hibaüzenetet küld.
      Egy másik objektum fájlban deklarált szubrutin hívásának bemutatása az EXTERN utasítás használatával:

...
extern osszeg
...
call   osszeg
...

Vissza a lap tetejére


FILL

      A FILL fordításvezérlő utasítás segítségével a mikrovezérlő tetszőleges számú egymás után következő programmemória-helye tölthető fel a kívánt azonos számértékkel, amely lehet bármely 14-bites számkonstans, így egy mikrovezérlő utasítás is.
      A következő példa tizenhat memóriahely konstanssal (H'3FFF') való feltöltését mutatja be:

fill    H'3FFF', H'10'

      A FILL utasítás után szerepel a programmemóriába töltendő, maximum 14-bites érték, majd vesszővel elválasztva a feltölteni kívánt memóriahelyek száma. A feltöltés a FILL utasítás forrásprogramban való elhelyezkedése által megadott memóriahelytől kezdődően történik meg.
      A következő példa a mikrovezérlő maradék memóriahelyeit tölti fel a program első sorára mutató utasításokkal:

fill    (goto H'0000'), H'4A'

      A mikrovezérlő utasításokat zárójelek között kell megadni.
      A feltöltési mennyiség (itt H'4A') az üresen maradt memóriahelyek számától függ.

Vissza a lap tetejére


GLOBAL

      A GLOBAL fordításvezérlő utasítás segítségével egy hordozható objektum fájl bármely, előzőleg már definiált címkéje hozzáférhetővé tehető más objektum fájlok számára. Az utasítás a deklarációs részben és szubrutinokban egyaránt használható.
      A GLOBAL utasítás használatára mutat példát a következő objektum fájl részlet:

        udata
VAR1    res     1
VAR2    res     1
        global  VAR1, VAR2
        ...
        code
SUB1    global  SUB1
        ...
        ...
        return

      Az első részben egy értékadás nélküli adatmemória-hely foglalás látható, ahol a hivatkozási címkék más objektum fájlok számára is hozzáférhetőek.
      A második rész egy más objektum fájlokból is hívható szubrutint mutat be.

Vissza a lap tetejére


IDATA

      Az IDATA fordításvezérlő utasítással kell kezdeni a hordozható objektum fájlok értékadásos deklarációs részét.
      Az IDATA utasítás utáni részben a DATA, DB és DW értékadó utasítások használhatóak.
      Az IDATA utasítás használatára mutat példát a következő objektum fájl részlet:

        idata
ADAT1   db     H'12'
ADAT2   db     H'22'
SOR     db     H'01', H'02', H'03'
SZO     db     "Hello!"
SZO1    dw     H'1234'
SZO2    dw     H'ABCD'
SZAVAK  data   H'1234', H'1235', H'1236'

      A DB utasítás az előtte levő címke által (az objektum fájlok összefűzésekor) kijelölt adatmemóriahely(ek)re az utasításban megadott kezdeti érték(ek)et helyezi el.
      A DATA és DW utasítások az előttük levő címke által (az objektum fájlok összefűzésekor) kijelölt adatmemóriahelyekre az utasításban megadott 16-bites kezdeti érték(ek)et helyezik el. Az első 8-bites helyre az alsó, a következőre pedig a felső bájt kerül.
      Az IDATA utasítás előtt a deklarációs részt azonosító címke is állhat:

I01     idata
ADAT1   db     H'12'
...     ...

      Ha nincs címke megadva, a fordítóprogram a deklarációs részt automatikusan a .idata címkével látja el.
      Az IDATA utasítás után megadható az adatmemória helyfoglalásának kezdőcíme is:

I01     idata  H'20'
ADAT1   db     H'12'
...     ...

      Ha nincs kezdőcím megadva, a kezdőcímet az objektum fájlok összeszerkesztését végző MPLINK összefűző program automatikusan meghatározza.

Vissza a lap tetejére


__IDLOCS

      Az __IDLOCS fordításvezérlő utasítás hatására az MPASM fordító program elhelyezi a mikrovezérlő azonosító adatait a hexadecimális kimeneti fájlban.
      Az __IDLOCS utasítás használatához szükséges, hogy előzőleg a mikrovezérlő típusa a LIST vagy a PROCESSOR utasítással definiálva legyen:

processor    16f84a
__idlocs     H'1234'

      Az MPASM fordító program, az utasításban megadott, maximálisan négyjegyű hexadecimális számot négy egymás után következő azonosító regiszterben helyezi el a programmemória konfigurációs területére. A H'2000' címre kerül az első számjegy (H'1'), a H'2001' címre a második számjegy (H'2'), majd sorban a következő kettő. (Így a 14-bites memórihelyekből csak az alsó 4 bit van felhasználva.)
      A hexadecimális kimeneti fájlban a fenti példa a következőképpen jelenik meg: :084000000100020003000400AE. (A 4000-es (bájt-) cím jelöli ki a H'2000' programmemória-címet.)

Vissza a lap tetejére


IF

      Az IF fordításvezérlő utasítás a feltételes fordítási programszerkezetek egyik kezdőutasítása. Az IF utasítást követő programsorok csak abban az esetben kerülnek fordításra, ha az utasítás után megadott feltétel teljesül.
      Az IF utasítást követő, feltételesen fordításra kerülő programsorokat egy
ENDIF utasítással kell elválasztani a további programsoroktól.
      Egy feltételes fordítási programszerkezetet mutat be a következő programrészlet:

...
if    ADAT=H'FF'
...
...
endif
...

Vissza a lap tetejére


IFDEF

      Az IFDEF fordításvezérlő utasítás a feltételes fordítási programszerkezetek egyik kezdőutasítása. Az IFDEF utasítást követő programsorok csak abban az esetben kerülnek fordításra, ha az utasítás után megadott címke már előzőleg definiálva van.
      Az IFDEF utasítást követő, feltételesen fordításra kerülő programsorokat egy
ENDIF utasítással kell elválasztani a további programsoroktól.
      Egy feltételes fordítási programszerkezetet mutat be a következő programrészlet:

...
ifdef    ADAT
...
...
endif
...

Vissza a lap tetejére


IFNDEF

      Az IFNDEF fordításvezérlő utasítás a feltételes fordítási programszerkezetek egyik kezdőutasítása. Az IFNDEF utasítást követő programsorok csak abban az esetben kerülnek fordításra, ha az utasítás után megadott címke előzőleg még nincs definiálva.
      Az IFNDEF utasítást követő, feltételesen fordításra kerülő programsorokat egy
ENDIF utasítással kell elválasztani a további programsoroktól.
      Egy feltételes fordítási programszerkezetet mutat be a következő programrészlet:

...
ifndef    ADAT
...
...
endif
...

Vissza a lap tetejére


INCLUDE

      A csatolt fájlok a forráskódból hívhatóak be az INCLUDE fordításvezérlő utasítással. A behívott kódrészlet az utasítás helyére fordítódik.
      (Egy fájl csatolása egyenértékű a csatolandó fájl sorainak a forráskód fájl adott helyére másolásával vagy azok közvetlen beírásával.)
      A csatolt fájlokból további csatolt fájlok is hívhatóak, de csak a forráskódtól kezdődő hatodik szintig.
      Példa az INCLUDE utasítás használatára:

include   "p16f84a.inc"

      Vagy:

include   <p16f84a.inc>

      Az utasítás paraméterében elérési út is megadható:

include   "C:\MPLAB\p16f84a.inc"

      Elérési út megadásakor, hiányzó fájl esetén az MPASM fordító program nem végez keresést. Ha nincs elérési út megadva a keresési sorrend: aktuális könyvtár, a forrásfájl könyvtára, az MPASM futtatási könyvtára.

Vissza a lap tetejére


LIST

      A LIST fordításvezérlő utasítással néhány fordítási jellemző és a fordítási folyamat végén létrehozott fordítási lista fájl jellemzői állíthatók be.
      A LIST utasítás lehetséges paramétereit mutatja be a következő táblázat:

11.5.14-9. Táblázat
Paraméter Alapbeállítás Jelentés Példa
b=érték 8 Fordítási lista fájl tabulátorának beállítása. list b=9
c=érték 132 Fordítási lista fájl sorhosszának beállítása. list c=120
f=formátumazonosító INHX32
(régebben INHX8M)
A hexadecimális kimeneti adatfájl típusának beállítása. list f=INHX8M
free fixed Szabad formátumú utasításértelmező. (A régebbi, szabad formátumú programokkal való kompatibilitást biztosítja.) list free
fixed fixed Kötött formátumú utasításértelmező. list fixed
mm=On/Off On Programmemória-térkép kiírása a fordítási lista fájlba. list mm=Off
n=érték 60 A fordítási lista fájl egy oldalán elhelyezett sorok száma. list n=50
p=típusazonosító - A mikrovezérlő típusának megadása. list p=16f84a
r=hex/dec/oct hex Az alapértelmezett számrendszer megadása. list r=dec
st=On/Off On Szimbólumtáblázat kiírása a fordítási lista fájlba. list st=Off
t=On/Off Off A fordítási lista fájl sortöréseinek tiltása. list t=On
w=0/1/2 0 Hibaüzenetek típusának beállítása.
0 - Üzenetek, figyelmeztetése, hibák.
1 - Figyelmeztetések és hibák.
2 - Csak hibák.
list w=2
x=On/Off On A fordítási lista fájl létrehozásakor a makrók sorainak beillesztése a makróhívások helyére. list x=Off

      A LIST fordításvezérlő utasítás használatát mutatja be a következő példa:

list   p=16f84a, f=INHX8M, r=dec

Vissza a lap tetejére


LOCAL

      A LOCAL fordításvezérlő utasítással makrókon belül használt, helyi változók definiálhatók.
      Egy helyi változókat is definiáló makrót mutat be a következő programrészlet:

teszt  macro  ADAT1, ADAT2
       local  SZAMLALO, RESZOSSZEG
       ...
       ...
       endm

      A LOCAL fordításvezérlő utasítással megadott belső változó azonosítója megegyezhet egy, a makrón kívül használt változó azonosítójával. Ha a makró önmagát hívja, akkor sem lép fel változó ütközési hiba.

Vissza a lap tetejére


MACRO

      A MACRO fordításvezérlő utasítás a makrók kezdőutasítása. Az utasítás a makróhívó címke és a makró paraméterei (argumentumai) között helyezkedik el:

teszt  macro  ADAT1, ADAT2
       ...
       ...
       endm

      A makrókat a forráskódban még hívásuk előtt szerepeltetni kell.
      A makrókat az ENDM fordításvezérlő utasítással kell zárni.
      A makrók hívhatók önmagukból vagy más makrókból is, tetszőleges mélységben.

Vissza a lap tetejére


__MAXRAM

      A __MAXRAM és __BADRAM fordításvezérlő utasítások együttesen jelzik a fordító- és összefűző programoknak a nem használható adatmemória-területeket, illetve a nem használható adatmemória-címeket.
      A __MAXRAM fordításvezérlő utasítással az adatmemória-terület utolsó memóriahelyének címe adható meg:

__maxram H'BF'

      Az utasításban szereplő címnek a H'0000'..H'1000' tartományban kell lennie.
      A __MAXRAM utasítás egy forrásfájlon belül többször is használható.
      A nem használható memóriaterület a gyári csatolható deklarációs fájlban (*.inc) is megadásra kerül, amelynek csatolása az INCLUDE vezérlő utasítással végezhető el.

Vissza a lap tetejére


MESSG

      A MESSG fordításvezérlő utasítással tetszőleges, 1..80 karakter hosszú üzenet íratható ki a fordítási folyamat végén létrehozott fordítási hibafájlba és fordítási lista fájlba.
      Például:

messg "A programmemória megtelt!"

      A fenti példa esetén a hibafájlban a Message[301] C:\MPLAB\PROBA.ASM 17 : MESSAGE: (A programmemória megtelt!) üzenet jelenik meg, amely a Message[301] "felhasználó által generált üzenet" azonosítóval kezdődik, majd a forrásfájl elérési útjával és nevével, az üzenet forrásprogramon belüli helyének sorszámával és magával az üzenettel folytatódik.

Vissza a lap tetejére


NOEXPAND

      A NOEXPAND fordításvezérlő utasítás tiltja a forrásfájlban szereplő makrók hívási helyükre való beillesztését a fordítási lista fájl létrehozásakor.
      A NOEXPAND utasítás egyenértékű a /m- parancssori opcióval.
      A NOEXPAND utasítással letiltott makró listázás visszakapcsolható az EXPAND fordításvezérlő utasítással.
      A NOEXPAND utasítás használata:

...
noexpand
...

Vissza a lap tetejére


NOLIST

      A NOLIST fordításvezérlő utasítással letiltható a fordítási folyamat végén a fordítási lista fájl elkészítése.
      Használata:

...
nolist
...

      A NOLIST utasítás egyenértékű a /l- parancssori opcióval.

Vissza a lap tetejére


ORG

      Az ORG fordításvezérlő utasítással egy bizonyos programrész programmemóriában elfoglalt helye állítható be, vagyis beállítható a programrész kezdőcíme.
      Használata:

...
...    org    H'20'
...

      Az ORG utasítás hiányában egy adott programrészlet az első, vagy, ha van megelőző programrész, a soron következő programmemória-címre kerül.

      Vigyázat! Az ORG utasítás hordozható objektum fájlok esetében nem használható.

Vissza a lap tetejére


PAGE

      A PAGE fordításvezérlő utasítás forrásprogramban elfoglalt helyétől egy új lap kezdődik a fordítási lista fájl készítésekor. Ennek célja a fordítási lista áttekinthetőségének növelése, ugyanis így egyes összetartozó programrészek (makrók, szubrutinok, ...) külön lapon kezdve, egyben megtekinthetőek.
      Használata:

...
page
...

Vissza a lap tetejére


PAGESEL

      A PAGESEL fordításvezérlő utasítás a programmemória-lapot kiválasztó programrész automatikus létrehozását vezérli fordításkor, vagy objektum fájlok összefűzésekor.
      A PAGESEL fordításvezérlő utasítást egy programmemória-hely azonosító címkének kell követnie:

pagesel   CIM02
goto      CIM02

      A példában a CIM02 azonosító egy bármely programsor elején álló címke által definiált programmemória-cím. A PAGESEL utasításnak meg kell előznie a kijelölt adatregiszteren való műveletvégzést, de nem fontos közvetlenül előtte állnia.
      Fordításkor az MPASM fordító program a PCLATH regiszter 3. és 4. bitjét beállító programrészt szúrja bele a kész programba. A fordító program az esetleges lapváltásról a biztonság kedvéért küld egy MESSAGE[306] azonosítójú "lapváltás történt - ellenőrizd a lapváltó biteket" figyelmeztető üzenetet.
      A PAGESEL fordításvezérlő utasításnak nem a hordozható objektum fájl létrehozásakor van szerepe, hanem az objektum fájlok összefűzésekor segíti elő a helyes címzést. Az MPLINK összefűző program szintén a PCLATH regiszter 3. és 4. bitjét beállító programrészt szúrja bele a kész programba.
      Az utasítás hatása (az objektum fájlok kivételével) az LCALL és LGOTO MPASM utasításokkal megegyező.
      Ha a mikrovezérlő csak egyetlen programmemória-lapot tartalmaz, az utasításnak nincs semmilyen hatása.

Vissza a lap tetejére


PROCESSOR

      A PROCESSOR fordításvezérlő utasítás segítségével lehet megadni a fordító programnak a mikrovezérlő típusát, amelyre a program íródott.
      Az utasításnak az első utasítást tartalmazó programsor előtt kell elhelyezkednie.
      Egy példa a PROCESSOR utasítás használatára:

processor  16f84a

      A PROCESSOR utasítás a LIST utasítás p= opciójával egyenértékű.

Vissza a lap tetejére


RADIX

      A RADIX fordításvezérlő utasítás segítségével lehet megadni a fordító programnak az alapértelmezett számrendszert. Az alapértelmezett a hexadecimális számrendszer (hex), beállíthatók még a decimális (dec) és oktális (oct) számrendszerek. Ha egy szám előtt nincs formátum azonosító, amely meghatározza annak számrendszerét, akkor minden esetben a beállított számrendszernek megfelelően kerül értelmezésre.
      Az utasításnak az első deklarációt tartalmazó programsor előtt kell elhelyezkednie.
      Egy példa a RADIX utasítás használatára:

radix   dec

      A RADIX utasítás a LIST utasítás r= opciójával egyenértékű.

Vissza a lap tetejére


RES

      A RES fordításvezérlő utasítás adott számú, soron következő 14-bites programmemória-helyet foglal le.
      Az utasítás
hordozható objektum fájlok esetében is használható helyfoglalásra az UDATA utasításon belül.
      Egy példa a RES utasítás használatára:

TABLAZAT  res    H'20'

      A RES utasítás előtt állhat a lefoglalni kívánt memóriarész első elemére mutató címke azonosítója, utána áll a lefoglalni kívánt 14-bites programmemória-helyek száma.

      Memóriaterület lefoglalása egy adott címtől kezdődően:

          org    H'1FF'
TABLAZAT  res    D'32'

Vissza a lap tetejére


SET

      A SET fordításvezérlő utasítás segítségével változók definiálhatók, amelyek a programon belül ugyanezzel az utasítással többször is újradefiniálhatóak:

HOSSZ    set    H'12'

      Az utasítás előtt a változó azonosítója áll (HOSSZ), utána pedig a változó értéke (H'12'). A program további részében a HOSSZ azonosító használata egyenértékű a közvetlen H'12' érték szerepeltetésével.
      Az újradefiniálásra mutat példát a következő programrészlet:

HOSSZ    set    H'12'
SZAM     equ    H'05'
NAGYSAG  set    HOSSZ*SZAM
HOSSZ    set    HOSSZ+1

      A SET fordításvezérlő utasítás a VARIABLE utasítással egyenértékű; a CONSTANT és EQU változó definiáló utasításoktól abban különbözik, hogy az utóbbiak értéke a továbbiakban már nem változtatható meg. A konstansok és változók vegyesen is használhatóak egy matematikai kifejezésen belül:

REKORDHOSSZ    equ    H'10'
REKORDSZAM     set    H'04'
...            ...
...            ...
HELYFOGLALAS   equ    REKORDHOSSZ*REKORDSZAM

Vissza a lap tetejére


SPACE

      A SPACE fordításvezérlő utasítás a fordítási lista fájlba üres sorokat szúr be a forrásprogramban elfoglalt helyének megfelelő helyre.
      Az alábbi utasítás két üres sort szúr be:

...
space    2
...

Vissza a lap tetejére


SUBTITLE

      A SUBTITLE fordításvezérlő utasítás a fordítási lista fájlba egy 1..60 karakter hosszú alcímet szúr be a lapok tetejére. Az alcím csak az utasítást követő lapokra kerül fel.
      Például:

...
subtitle    "Szubrutinok:"
...

Vissza a lap tetejére


TITLE

      A TITLE fordításvezérlő utasítás a fordítási lista fájlba egy 1..60 karakter hosszú címet szúr be a lapok tetejére. A cím csak az utasítást követő lapokra kerül fel.
      Például:

...
title    "Letöltő program"
...

Vissza a lap tetejére


UDATA

      Az UDATA fordításvezérlő utasítással kell kezdeni a hordozható objektum fájlok értékadás nélküli deklarációs részét.
      Az UDATA utasítás utáni részben csak a RES értékadó utasítás használható.
      Az UDATA utasítás használatára mutat példát a következő objektum fájl részlet:

        udata
ADAT1   res   1
ADAT2   res   1
SZO     res   2
SZO1    res   2
SZO2    res   2

      A RES utasítás előtt a lefoglalni kívánt memóriahely(ek)et azonosító címke áll, amely csak az összefűzés után kap konkrét értéket. Az utasítás után a lefoglalni kívánt 8-bites adatmemória-helyek száma áll.
      Az UDATA utasítás előtt a deklarációs részt azonosító címke is állhat:

D01:    udata
ADAT1   res    1
...     ...

      Ha nincs címke megadva, a fordítóprogram a deklarációs részt automatikusan a .udata címkével látja el, de egy forrásprogramon belül nem állhat két azonos címkével azonosított deklarációs rész.
      Az UDATA utasítás után megadható az adatmemória helyfoglalásának kezdőcíme is:

DA1:    udata  H'20'
ADAT1   res    1
...     ...

      Ha nincs kezdőcím megadva, a kezdőcímet az objektum fájlok összeszerkesztését végző MPLINK összefűző program automatikusan meghatározza.

Vissza a lap tetejére


UDATA_ACS

      Az UDATA_ACS fordításvezérlő utasításnak a közepes teljesítményű, 14-bites programmemóriájú mikrovezérlők programozásakor nincs szerepe. Csak a PIC18x mikrovezérlőknél használható!

Vissza a lap tetejére


UDATA_OVR

      Az UDATA_OVR fordításvezérlő utasítással kell kezdeni a hordozható objektum fájlok értékadás nélküli deklarációs részét, ha felülírható adatmemória-hely azonosítók alkalmazása szükséges. Ez az utasítás teszi lehetővé, hogy egy adott memóriahely a program működése során több változó-azonosítóhoz is hozzárendelhető legyen. A program egyes működési szakaszaiban más és más azonosítóval lehet hivatkozni ugyanarra a memóriahelyre. Ehhez meg kell valósulnia annak a feltételnek, hogy az egyik azonosító alkalmazásának ideje alatt egy másik azonosítóval ne történjen műveletvégzés.
      Az UDATA_OVR utasítás utáni részben csak a RES értékadó utasítás használható.
      Az UDATA_OVR utasítás használatára mutat példát a következő objektum fájl részlet:

ADATOK   udata_ovr
ADAT1    res    1
ADAT2    res    1
SZAMOK   udata_ovr
SZAM1    res    1
SZAM2    res    1

      A RES utasítás előtt a lefoglalni kívánt memóriahely(ek)et azonosító címke áll, amely csak az összefűzés után kap konkrét értéket. Az utasítás után a lefoglalni kívánt 8-bites adatmemória-helyek száma áll.
      A példából látható, hogy az UDATA_OVR utasítás előtt a deklarációs részt azonosító címke is állhat. Ha nincs címke megadva, a fordítóprogram a deklarációs részt automatikusan a .udata_ovr címkével látja el. Itt természetesen egy forrásprogramon belül több azonos címkével azonosított deklarációs rész is lehet. Sőt! Az azonos memóriahelyekre helyezendő változó-csoportok deklarációs részének azonos címkéjűnek kell lenniük.
      Az UDATA utasítás után megadható az adatmemória helyfoglalásának kezdőcíme is:

DA1:    udata_ovr H'20'
ADAT1   res       1
...     ...

      Ha nincs kezdőcím megadva, a kezdőcímet az objektum fájlok összeszerkesztését végző MPLINK összefűző program automatikusan meghatározza.

Vissza a lap tetejére


UDATA_SHR

      Az UDATA_SHR fordításvezérlő utasítással kell kezdeni a hordozható objektum fájlok értékadás nélküli deklarációs részét, ha az egyes mikrovezérlőkben jelen levő megosztott (bármely lapról elérhető) adatmemória-helyek kezelése szükséges.
      Az UDATA_SHR utasítás utáni részben csak a RES értékadó utasítás használható.
      Az UDATA_SHR utasítás használatára mutat példát a következő objektum fájl részlet:

        udata_shr
ADAT1   res       1
ADAT2   res       1

      A RES utasítás előtt a lefoglalni kívánt memóriahely(ek)et azonosító címke áll, amely csak az összefűzés után kap konkrét értéket. Az utasítás után a lefoglalni kívánt 8-bites adatmemória-helyek száma áll.
      Az UDATA_SHR utasítás előtt a deklarációs részt azonosító címke is állhat:

D01:    udata_shr
ADAT1   res        1
...     ...

      Ha nincs címke megadva, a fordítóprogram a deklarációs részt automatikusan a .udata_shr címkével látja el, de egy forrásprogramon belül nem állhat két azonos címkével azonosított deklarációs rész.
      Az UDATA_SHR utasítás után megadható az adatmemória helyfoglalásának kezdőcíme is:

DA1:    udata_shr H'20'
ADAT1   res       1
...     ...

      Ha nincs kezdőcím megadva, a kezdőcímet az objektum fájlok összeszerkesztését végző MPLINK összefűző program automatikusan meghatározza.

Vissza a lap tetejére


#UNDEFINE

      A #DEFINE utasítás által definiált helyettesítő címke az #UNDEFINE fordításvezérlő utasítással törölhető. (Így a címke újradefiniálható.)
      Az #UNDEFINE utasítás használatára mutat példát a következő programrészlet:

#define     kimenet H'06',3
...
#undefine   kimenet
...

Vissza a lap tetejére


VARIABLE

      A VARIABLE fordításvezérlő utasítás segítségével változók definiálhatók, amelyek a programon belül ugyanezzel az utasítással többször is újradefiniálhatóak:

variable    HOSSZ=H'12'

      Az utasítás előtt a változó azonosítója áll (HOSSZ), utána pedig a változó értéke (H'12'). A program további részében a HOSSZ azonosító használata egyenértékű a közvetlen H'12' érték szerepeltetésével.
      Az újradefiniálásra mutat példát a következő programrészlet:

HOSSZ    set    H'12'
SZAM     equ    H'05'
NAGYSAG  set    HOSSZ*SZAM
HOSSZ    set    HOSSZ+1

      A SET fordításvezérlő utasítás a VARIABLE utasítással egyenértékű; a CONSTANT és EQU változó definiáló utasításoktól abban különbözik, hogy az utóbbiak értéke a továbbiakban már nem változtatható meg. A konstansok és változók vegyesen is használhatóak egy matematikai kifejezésen belül:

REKORDHOSSZ    equ    H'10'
REKORDSZAM     set    H'04'
...            ...
...            ...
HELYFOGLALAS   equ    REKORDHOSSZ*REKORDSZAM

Vissza a lap tetejére


WHILE

      A WHILE fordításvezérlő utasítás olyan ismétlődő utasítássorok vagy programrészletek megírásának egyszerűsítésére szolgál, amelyek csak egy vagy néhány változóban térnek el egymástól. (Például nagyobb memóriaterületek nullázása, értékkel való feltöltése.)
      A WHILE utasítással kezdődő ismétlő ciklusokat minden esetben az
ENDW utasítással kell lezárni.
      Egy ismétlő ciklust mutat be a következő programrészlet:

variable cim
...
cim = H'0A'
while cim < H'21'
clrf  cim
cim += 1
endw

      Amely a következő programrészlettel helyetesíthető, illetve annak helyettesítésére szolgál:

clrf H'0A'
clrf H'0B'
clrf H'0C'
clrf H'0D'
clrf H'0E'
clrf H'0F'
clrf H'10'
clrf H'11'
clrf H'12'
clrf H'13'
clrf H'14'
clrf H'15'
clrf H'16'
clrf H'17'
clrf H'18'
clrf H'19'
clrf H'1A'
clrf H'1B'
clrf H'1C'
clrf H'1D'
clrf H'1E'
clrf H'1F'
clrf H'20'

 

  Tudomány és Technika (test@t-es-t.hu)


 

<< Előző oldal   Vissza a tartalomjegyzékhez   Vissza a lap tetejére   Következő oldal >>

Vissza a főoldalra    Vissza a PIC főoldalra