assembly programozas

of 82 /82
Tartalomjegyzék Bevezetés ..............................................................................................................................................2 Egycímes számítógép ......................................................................................................................2 Harvard architektúra ........................................................................................................................5 RISC jelleg .......................................................................................................................................6 Az assembly nyelv megjelenése, létjogosultsága ............................................................................6 Az assembly nyelv felépítése ...........................................................................................................7 PIC mikrovezérlő utasításkészlete (16-os sorozat) .............................................................................10 Az utasítások részletes leírása ........................................................................................................11 Új utasítások és funkcióik .............................................................................................................31 MPASM belső makrói ........................................................................................................................57 MPASM direktívák .............................................................................................................................59 Vezérlő direktívák ..........................................................................................................................61 Feltételes fordítás direktívái ...........................................................................................................65 Adat direktívák ..............................................................................................................................67 Jegyzék direktívák .........................................................................................................................71 Makró direktívák ............................................................................................................................74 Tárgy fájl direktívái .......................................................................................................................76 Programozás .......................................................................................................................................79 1/82

Author: vilanpastor

Post on 15-Jun-2015

2.231 views

Category:

Documents


7 download

Embed Size (px)

DESCRIPTION

progranozás

TRANSCRIPT

TartalomjegyzkBevezets..............................................................................................................................................2 Egycmes szmtgp......................................................................................................................2 Harvard architektra........................................................................................................................5 RISC jelleg.......................................................................................................................................6 Az assembly nyelv megjelense, ltjogosultsga............................................................................6 Az assembly nyelv felptse...........................................................................................................7 PIC mikrovezrl utastskszlete (16-os sorozat).............................................................................10 Az utastsok rszletes lersa........................................................................................................11 j utastsok s funkciik.............................................................................................................31 MPASM bels makri........................................................................................................................57 MPASM direktvk.............................................................................................................................59 Vezrl direktvk..........................................................................................................................61 Feltteles fordts direktvi...........................................................................................................65 Adat direktvk..............................................................................................................................67 Jegyzk direktvk.........................................................................................................................71 Makr direktvk............................................................................................................................74 Trgy fjl direktvi.......................................................................................................................76 Programozs.......................................................................................................................................79

1/82

Bevezets "Amit nem lehet Pascal-ban megrni, azt C/C++-ban meg lehet. Amit nem lehet C/C++-ban megrni, azt Assembly-ben meg lehet. Amit nem lehet Assembly-ben megrni, azt nem lehet megrni!" Az igazi programoz nem fl a GOTO-tl

II. szm mellklet Mikrovezrl programozsa assembly nyelven

Bevezetsgy rzem a fenti cm egy kis magyarzatra szorul. Mikor ezt a szakdolgozat tmt vlasztottam tbben is felvetettk, hogy mirt assembly nyelven szeretnm megrni az egyes perifria lekezelseket, s az egsz projekt mirt assemblyben van? Sokat gondolkoztam rajta, hogy taln tnyleg egyszerbb lenne egy magas szint nyelv segtsgvel kezelni a perifrikat. Szakmmbl addan azonban elssorban a hardver fell tudok megkzelteni egy adott programozsi problmt a leg-hardverkzelibb nyelv pedig minden ktsget kizran az assembly (teljesen egyenrtk a gpi kddal, de kicsit emszthetbb forma). Termszetesen ez mg nem lenne elegend ok, hiszen a szakdolgozat elssorban nem az n rmmre kszl sokkal inkbb ms kollgknak segtsg, tmutats, az rdeklds felkeltse gyannt. Vlemnyem szerint egy mikroprocesszoros rendszert a leghatkonyabban assembly nyelven tudunk programozni s kijelenthetjk, hogy ezen nyelv segtsgvel tudjuk nem csak a hardver, de sajt kpessgeinket is a legteljesebb mrtkben kihasznlni. Vizsgljuk meg a mikrovezrl felptst, architektrjt, hogy az elbbi megllapts bizonytst nyerjen. A PIC mikrovezrl egy egycmes, harvard architektrra pl, vezrlsre optimalizlt RISC processzort tartalmaz mikroszmtgp.

Egycmes szmtgpAhhoz, hogy egy szmtgp mveleteket hajtson egyms utn vgre (program fusson), minden utastsnak ngy cmet kell tartalmaznia ezek a kvetkezk:

Els operandus cme Msodik operandus (amennyiben van) cme Eredmny cme Kvetkez utasts cme I. Operandus cme II. Operandus cme Kvetkez utasts cme

Mveleti kd OP. COD

Eredmny cme

Ngy cmes architektrt sehol a vilgon nem alkalmaztak, s nem is alkalmaznak. Gondoljunk bele, minden utastshoz ngy cmet le kellene trolni, tl hossz lenne egy utasts arrl nem is beszlve, hogy mindez komolyan htrltatn a programoz munkjt is. 2/82

Bevezets Prbljuk reduklni a szksges cmeket. Els lpsknt hasznljuk ki a kvetkez Neumann alapelvet: A szmtgp legyen soros utasts-vgrehajts. Amennyiben az utastsokat egyms utn sorban hajtjuk vgre, akkor nincs ms teendnk, mint a memriba is ugyanebbe a sorrendbe berni ket. A kvetkez utasts cmhez felhasznlunk egy egyszer szmllt, mely reset esetn nullzdik, s minden utasts vgrehajts sorn eggyel nvekszik. Ennek a szmllnak a neve PC (Program Counter - Program szmll), vagy IP (Instruction Pointer Utasts mutat). PIC mikrovezrlknl kvetkezetesen PC-nek nevezzk. Ezen kitntetett szmll segtsgvel megalkottuk a hromcmes architektrt.

Mveleti kd OP. COD

I. Operandus cme

II. Operandus cme

Eredmny cme

Mveleteink jelents hnyadnl az elvgzs utn nincs szksg mindkt operandusra, ezrt az eredmnyt rjuk vissza a msodik operandus cmre. Ezzel eljutottunk a ktcmes architektrhoz azonban szksges egy j utastst alkotnunk: MOVE (mozgat) utasts, mely segtsgvel a msodik operandusunkat is le tudjuk krdezni a mvelet elvgzse utn.

Mveleti kd OP. COD

I. Operandus cme

II. Operandus s Eredmny cme

A PIC mikrovezrlk a mai szmtgpek tbbsgvel egyetemben az egycmes struktrt alkalmazzk, ahhoz hogy ezt ltre tudjuk hozni szksg van egy tmeneti regiszterre, ahol az egyik operandust letroljuk a mvelet elvgzse eltt. Ez egy kitntetett regiszter - a szakirodalom akkumultor (ACC-accumulator), vagy munkaregiszter (W-Work) nven ismeri. Mi a W jellst fogjuk hasznlni.

Mveleti kd OP. COD

I. Operandus cme

Az itt ismertetett architektrn minden ktoperandus mvelet csakis az akkumultoron keresztl valsulhat meg. Elszr az els operandust lehvjuk a W regiszterbe (LOAD), majd elvgezzk a mveletet (OPERATION), s kirjuk az eredmny (STORE)

3/82

Bevezets Mikroszmtgpek mvelet-vgrehajtsnak folyamata: I. Operandus cme W-regiszter

F L A G

ALU Aritmetikai s Logikai Egysg

PIC mikrovezrlk mvelet-vgrehajtsa:

I. Operandus cme

W-regiszter

S T A T U S

ALU Aritmetikai s Logikai Egysg

DEMUX

d

PIC mikrovezrl esetn a Flag-regisztert sttusz (STATUS) regiszternek nevezzk, valamint az eredmnyt nem csak a W regiszterbe, hanem az els operandust tartalmaz file regiszterbe is visszarhatjuk, erre hasznljuk a destination (cl) bitet. Az eddig lertakat figyelembe vve egy sszeads a kvetkezkppen nz ki a fenti architektrn: MOVLW ADDWF 20 PORTA,0 ;'20'h betltse az akkumultorba (1. operandus) ;PORTA-hoz 20h hozzadsa, eredmny: akkumultor

Az MPLAB fordtja lehetsget nyjt a W s F szimblumok hasznlatra is ilyenkor d=W esetn a munkaregiszterbe, d=F esetn a fjlregiszterbe kerl az eredmny. Ahhoz, hogy ez a programozstechnikai eljrs mkdjn a gyri include fjlt hozz kell adnunk a forrshoz. Fontos megjegyezni, hogy amennyiben a cl egyrtelmen megllapthat a mveleti kdbl (pl. konstanssal vgzett mvelet) a destination bitnek nincs rtelme, a fordt a hasznlatt hibnak fogja rtelmezni. 4/82

Bevezets

Harvard architektraTekintsk t elszr a Neumann elveket1 (a legtbb mai szmtgp is tbb kevsb alkalmazza ezeket az elveket, br a felhasznlstl fggen esetleg nem mindegyiket):

A szmtgp legyen binris (hasznlja a kettes szmrendszert) A szmtgp legyen teljesen elektronikus Az utasts-vgrehajts legyen soros (egyszerre csak egy utastst hajtson vgre) Legyen univerzlis Turing-gp (brmely aritmetikai s logikai mveletet vgre tudjon hajtani az alapmveletek vges szm ismtlsvel) A trolt program elve - vagyis rendelkezzen bels trral, az utastsok s az adatok a memriban egymstl megklnbztethetetlen mdon legyenek trolva.

A Harvard architektra az itt felsorolt elvek kzl az utolst rja t, mikor kimondja: Az adat s a programmemria hardveresen klnljn el. Ezltal klnbz hosszsg lehet az utasts s az adat. Pldakppen a 16F84-es mikrovezrlnl 8 bites adatok mellett 14 bites utastsokkal tudunk dolgozni gy el tudjuk rni, hogy minden utastsunk egy szavas legyen. Fontos azonban megemlteni, hogy a Harvard architektra ltjogosultsga igencsak behatrolt. Hasznlata csak clszmtgpek, specilis alkalmazsra gyrtott mikrogpek esetn lehetsges. Egy mikrovezrlt nevbl addan vezrlsi feladatokra fejlesztettek ki. Statisztikailag bizonythat, hogy vezrlsi feladatok esetn kevs tmeneti adattal, s sok vezrl utastssal kell dolgoznunk, gy elre meg tudjuk tervezni az adat- s programmemria relatv viszonyt. Neumann elv szmtgp felptse:

IO egysgHarvard architektrs gp felptse:

CPU

Memria

Adatmemria IO egysg CPU Program memria

1 Az itt felsorolt elvek csak a mkdsre vonatkoznak. Neumann Jnos megadta a megfelel hardverfelptst is (ALU, CU, MEM) melyet mind a mai napig alkalmaznak a digitlis szmtgp esetben.

5/82

Bevezets

RISC jellegA RISC mozaiksz jelentse: Reduced Instruction Set Computer Cskkentett utastskszlet szmtgp. Jellemzi:

Egyszer, kevs szm utasts Minden utasts (lehetleg) egy gpi ciklus alatt hajtdjon vgre Egyszerstett cmzsi md Minden utasts egyszavas Nagyszm ltalnos cl regiszter

Egy RISC processzor nem kpes bonyolult (tbb mveletbl ll) utastsokat vgrehajtani, azonban az utastskszlete minden mvelet elvgzst lehetv teszi mgpedig sebessgre optimalizlva. A RISC s CISC processzorok kztti verseny a mai napig tart. A mai korszer CISC mikroprocesszorok mr RISC magra plnek gy gyorstva a mkdst. sszefoglalva: ahhoz, hogy kihasznljuk az architektra elnyeit a gp nyelvn kell programoznunk. Erre alkalmazhatjuk a binris, a hexa (gpi) kdolst, ill. az ezek elnyeit megtart, de az ember szmra emszthetbb mnemonikus kdolst - vagyis az assembly programnyelvet. Feladatra orientlt nyelvek hasznlata (C; BASIC; stb.) a kdunkat nagyon redundnss teszi, ezltal vannak feladatok, amiket nem, vagy csak nehzkesen tudunk megoldani (pl. sebessgre rzkeny mveletek).

Az assembly nyelv megjelense, ltjogosultsgaA hskorban a szmtgpek processzorait binris kdban, ksbb a valamivel knnyebben megjegyezhet hexadecimlis kdban rtk. Hamar kiderlt ezen programozs korltozottsga. Az emberi agy nehezen jegyez meg szmokat, mg nehezebben kapcsolja ssze ket klnbz fogalmakkal ahhoz, hogy egy adott processzor gpi kdjban programozi jrtassgra tegynk szert, igen hossz id s sok gyakorls szksgeltetik. Meg kell mg emlteni, hogy ha ttrnk egy msik processzorra, annak gpi kdja szmunkra ismeretlen lesz, kezdhetjk a tanulst ellrl. Gondot okoz mg a cmszmts, ill. a ksbbi programmdosts is. Aki programozott mr processzort gpi kdban, tisztban van az egy sor utasts, t sor NOP (No OPeration nincs mvelet) szabllyal erre azrt van szksg, hogy ha ksbb be knyszerlnk szrni egy, vagy kt utastst, ne kelljen az sszes ugrst a programban jra kiszmtani. Ezen ldatlan llapoton prblt meg segteni az assembly nyelv. Ez a programnyelv a ksbbi feladatorientlt, ill. objektumorientlt nyelvekkel szemben nem vezetett be j (n. virtulis) utastsokat (absztrakcit), csupn a meglvekhez rendelt egy rvid emlkeztett n. mnemonikot. Termszetesen egyetlen processzor sem ismeri az assembly nyelvet, szksgnk van egy fordtra, ami az ltalunk hasznlt mnemonikokat visszaalaktja gpi kdra. Az talakts nem redundns - vagyis az assemblyben megrt program ugyanolyan hatkony lesz, mintha gpi kdban programoztunk volna. A RISC jelleg processzor miatt a PIC mikrovezrlk assembly nyelve egy kicsit eltr a sokak ltal ismert Intel filozfitl. 6/82

Bevezets

Az assembly nyelv felptseAz assembly nyelv alapegysge a sor. Egy sorban egy s csak egy utasts helyezkedhet el. Utasts: Az adott mikroprocesszor gpi kdjt reprezentl szimblumkszlet, kiegsztve nhny fordt fgg - knyelmi szolgltatssal.

CmkeCmke:

Mnemonic

Operandos(ok)

Megjegyzs

Cmhivatkozsi szimblum. A gpi kddal ellenttben az assembly nyelv megszabadt minket a fradalmas cmszmtsoktl. Az elgazsok sorn alkalmazott belpsi pontokat sajt szimblumokkal lthatjuk el. A cmke szablyosan ':'-tal zrdik az MPASM elfogadja nlkle is. Amennyiben 8 karakternl hosszabb cmkt szeretnnk alkalmazni hasznljuk az '_' karaktert elvlasztsra. Lehetsg szerint hasznljunk beszdes cmkket. Cmke nllan is llhat egy sorban ekkor a kvetkez assembly sort jelkpezi (figyelem, ez lehet direktva is). A mveleti kdot jelkpez emlkeztet. A mvelet elvgzshez szksges konstans, program- vagy adatmemria cm. A konstanst megadhatjuk a fordt ltal preferlt szmformtumokban (binris, oktlis, decimlis, hexadecimlis), vagy ASCII kdban aposztrfok kztt (pl. 'A'). A cmkkkel hivatkozhatunk a programmemria cmre. Direktvk segtsgvel szimblumokat rendelhetnk az adatmemria cmeihez is. Termszetesen mindkt memriacmet megadhatjuk a fent emltett szmformtumokban is. Az operandusok megadsa sorn szksgnk lehet egyszer szmtsi mveletekre ahhoz, hogy ezeket ne neknk kelljen elvgezni hasznlhatunk opertorokat. Fontos azonban, hogy ezek a fordtnak szlnak. Tipikus hiba, hogy egy memriarekeszben lv rtkhez hozz szeretnnk adni egy szmot, s ezt opertorok segtsgvel akarjuk megoldani. Az elgondols hibs! Az sszeads opertor hasznlatval ezt nem tudjuk vgrehajtani csak az sszeads utastssal. MOVF TRISB+5,W ;az utasts hatsra nem a TRISB 5-tel ;megnvelt rtke kerl az ;akkumultorba, hanem a 11-es ;memriarekeszben lv INTCON ;regiszter rtke (TRISB cme: 6; a ;radix: 16). PIC16F84-es tpus esetn.

Mnemonik: Operandusok:

7/82

Bevezets Opertorok:

+ * / % ( ) > ! ^ | & && || > < >= ComPare File with wreg Skip if < Decimal Adjust W DeCrement File Skip if Not Zero Fjlregiszter b bitjnek invertlsa Fjlregiszter kettes komplemensnek kpzse Forgats a biteken balra, tvitelbiten keresztl Forgats a biteken balra Forgats a biteken jobbra, tvitelbiten keresztl Forgats a biteken jobbra Fjlregiszter feltltse FFh rtkkel Vezrlstad utastsok Ugrs, ha az tvitel bit rtke 1 Ugrs, ha az eljel bit rtke 1 Ugrs, ha az tvitel bit rtke 0 Ugrs, ha az eljel bit rtke 0 Ugrs, ha a tlcsorduls bit rtke 0 Ugrs, ha a zr bit rtke 0 Ugrs, ha a tlcsorduls bit rtke 1 Felttel nlkli elgazs Ugrs, ha a zr bit rtke 1 Fjlregiszter s W sszehasonltsa s ugrs, ha egyenlek Fjlregiszter s W sszehasonltsa s ugrs, ha a fjlregiszter nagyobb Fjlregiszter s W sszehasonltsa s ugrs, ha a fjlregiszter kisebb W decimlis korrekcija Fjlregiszter cskkentse, ugrs ha nem nulla 1 (2) 1 (2) 1 (2) 1 (2) 1 (2) 1 (2) 1 (2) 2 1 (2) 1 (2,3) 1 (2,3) 1 (2,3) 1 1 (2,3) C 1 1 1 1 1 1 1 C,DC, Z,OV, N C,Z,N Z,N C,Z,N Z,N -

INcrement File Skip 1 Fjlregiszter nvelse, ugrs ha nem nulla if Not Zero (2,3) 32/82

PIC mikrovezrl utastskszlete (16-os sorozat) POP PUSH RCALL n RESET TSTFSZ f,a Megjegyzs: BSR: Bank Select Register (Bankvlaszt regiszter) RAM hozzfrs bit: a = 0: A hely az azonnali hozzfrs RAM-ban (BSR regiszter kihagysa) a = 1: Helyt a BSR regiszter segtsgvel kell meghatrozni POP top of return stack (TOS) PUSH top of return stack (TOS) Relative CALL Software device RESET TeST fjl Skip if Zero A verem tetejn lv rtk eldobsa PC rtknek mentse a verem tetejre Rvid szubrutinhvs Szoftveres reszet Fjlregiszter tesztelse, ugrs ha nulla 1 1 2 1 1 (2,3) All -

33/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: LFSR [cmke] 0f2 0 k 4095 k FSRf Nincs 1110 1111 1110 00ff 0000 k7kk k11kkk kkkk (1. sz) (2. sz) LFSR f,k

Megjegyzs: Sz: Ciklus: Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs: MOVLB

A 12 bites konstans rtket betltjk az FSRf regiszterbe 2 2

[cmke] 0 k 255 k BSR Nincs

MOVLB

k

0000 0001 kkkk kkkk 8-bites konstans betltse a BSR (Bank Select Register) regiszterbe. A BSR bitek mindig nullk maradnak, tekintet nlkl a k bitekre. 1 1

Sz: Ciklus:

34/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: MOVFF [cmke] 0 fs 4095 0 fd 4095 (fs) fd Nincs 1100 ffff 1111 ffff ffff ffff ffffs ffffd (1. sz) (2. sz) MOVFF fs,fd

Megjegyzs:

A forrs fjlregiszter (fs) rtkt a cl fjlregiszter-be (fd) tltjk. Mind a forrs, mind a cl lehet a W. Clregiszterknt nem hasznlhatjuk a PCL, TOSU, TOSH, TOSL regisztereket. 2 2(3) TBLRD* [cmke] Nincs (Prog mem (TBLPTR)) TABLAT Nincs 0000 0000 0000 0000 A tblamutat (TBLPTR) ltal mutatott programmemriarekesz tartalma a TABLAT regiszterbe kerl. A tblamutat rtke nem vltozik. 1 2 TBLRD*

Sz: Ciklus: Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs:

Sz: Ciklus:

35/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs: TBLRD*+ [cmke] Nincs (Prog mem (TBLPTR)) TABLAT (TBLPTR) +1 TBLPTR Nincs 0000 0000 0000 0001 A tblamutat (TBLPTR) ltal mutatott programmemriarekesz tartalma a TABLAT regiszterbe kerl ezutn a tblamutat rtkt megnveljk eggyel. 1 2 TBLRD*[cmke] Nincs (Prog mem (TBLPTR)) TABLAT. (TBLPTR) 1 TBLPTR Nincs 0000 0000 0000 0010 A tblamutat (TBLPTR) ltal mutatott programmemriarekesz tartalma a TABLAT regiszterbe kerl ezutn a tblamutat rtkt cskkentjk eggyel. 1 2 TBLRD*TBLRD*+

Sz: Ciklus: Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs:

Sz: Ciklus:

36/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs: TBLRD+* [cmke] Nincs (TBLPTR) +1 TBLPTR (Prog mem (TBLPTR)) TABLAT Nincs 0000 0000 0000 0011 A tblamutat (TBLPTR) rtkt eggyel megnveljk ezutn a tblamutat ltal kijellt programmemria-rekesz tartalma a TABLAT regiszterbe kerl. 1 2 TBLWT* [cmke] Nincs (TABLAT) (Prog mem (TBLPTR)) Nincs 0000 0000 0000 1100 A TABLAT regiszter rtkt a tblamutat (TBLPTR) ltal kijellt programmemria-rekeszbe mozgatjuk. A tblamutat rtke nem vltozik. 1 2 TBLWT* TBLRD+*

Sz: Ciklus: Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs:

Sz: Ciklus:

37/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs: TBLWT*+ [cmke] Nincs (TABLAT) (Prog mem (TBLPTR)) (TBLPTR) +1 TBLPTR Nincs 0000 0000 0000 1101 A TABLAT regiszter rtkt a tblamutat (TBLPTR) ltal kijellt programmemria-rekeszbe mozgatjuk ezutn a tblamutat rtkt eggyel megnveljk. 1 2 TBLWT*[cmke] Nincs (TABLAT) (Prog mem (TBLPTR)) (TBLPTR) -1 TBLPTR Nincs 0000 0000 0000 1110 A TABLAT regiszter rtkt a tblamutat (TBLPTR) ltal kijellt programmemria-rekeszbe mozgatjuk ezutn a tblamutat rtkt cskkentjk eggyel. 1 2 TBLWT*TBLWT*+

Sz: Ciklus: Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs:

Sz: Ciklus:

38/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs: TBLWT+* [cmke] Nincs (TBLPTR) +1 TBLPTR (TABLAT) (Prog mem (TBLPTR)) Nincs 0000 0000 0000 1111 A tblamutat (TBLPTR) rtkt eggyel megnveljk majd a TABLAT regiszter rtkt a tblamutat ltal kijellt programmemria-rekeszbe mozgatjuk. 1 2 ADDWFC [cmke] 0 f 255 d [0,1] a [ 0,1] (W) + (f) + (C) (cl) N, OV, C, DC, Z 0010 00da ffff ffff Az akkumultor rtkhez az f helyn ll fjlregiszter rtknek, s a Carry bitnek a hozzadsa. Az eredmny d=0 esetn az akkumultorba, d=1 esetn a fjlregiszterbe kerl. 1 1 ADDWFC f{,d {,a}} TBLWT+*

Sz: Ciklus: Mnemonik: Szintaxis: Operandus:

Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs:

Sz: Ciklus:

39/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs: MULLW [cmke] 0 k 255 k x (W) PRODH:PRODL Nincs 0000 1101 kkkk kkkk 8 bites konstans szorzsa az akkumultorral. A 16 bites eredmny a PRODH (fels bjt) s PRODL (als bjt) regiszterbe kerl. Az akkumultor rtke nem vltozik. 1 1 MULWF [cmke] 0 f 255a [ 0,1]

MULLW

k

Sz: Ciklus: Mnemonik: Szintaxis: Operandus:

MULWF

f{,a}

Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs:

(f) x (W) PRODH:PRODL Nincs 0000 001a ffff ffff Fjlregiszter szorzsa az akkumultorral. A 16 bites eredmny a PRODH (fels bjt) s PRODL (als bjt) regiszterbe kerl. Az akkumultor s a fjlregiszter rtke nem vltozik. 1 1

Sz: Ciklus:

40/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: SUBFWB [cmke] 0 f 255 d [0,1] a [ 0,1] (W) (f) (B) cl N, OV, C, DC, Z 0101 01da ffff ffff Az akkumultorbl az f regiszter rtknek, s a Borrow bitnek a kivonsa (PIC mikrovezrlk esetn a Borrow bit a Carry negltja). Az eredmny d=0 esetn az akkumultorban, d=1 esetn a fjlregiszterben kpzdik. 1 1 SUBWFB [cmke] 0 f 255 d [0,1] a [ 0,1] (f) (W) (B) cl N, OV, C, DC, Z 0101 10da ffff ffff Az f regiszterbl az akkumultorbl rtknek, s a Borrow bitnek a kivonsa (PIC mikrovezrlk esetn a Borrow bit a Carry negltja). Az eredmny d=0 esetn az akkumultorban, d=1 esetn a fjlregiszterben kpzdik. 1 1 SUBWFB f{,d{,a}} SUBFWB f{,d{,a}}

Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs:

Sz: Ciklus: Mnemonik: Szintaxis: Operandus:

Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs:

Sz: Ciklus:

41/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: BTG [cmke] 0 f 255 0b7a [ 0,1]

BTG f,b{a}

Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs: Sz: Ciklus: Mnemonik: Szintaxis: Operandus: NEGF

f < b > f Nincs 0111 bbba ffff ffff Az f regiszter b helyn ll bitjnek invertlsa. 1 1[cmke] 0 f 255a [ 0,1]NEGF f{,a}Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs: Sz: Ciklus:f +1 f N, OV, C, DC, Z 0110 110a ffff ffff Az f helyn ll fjlregiszter kettes komplemensnek kpzse. 1 142/82PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: RLCF [cmke] 0 f 255 d [0,1] a [ 0,1] f cl f C C cl C, N, Z 0011 01da ffff ffff Az 'f' helyn ll fjlregiszter bitjein egyet balra forgat a Carry (tvitel) biten keresztl. Az eredmny d=0 esetn a munkaregiszterben, d=1 esetn a fjlregiszterben kerl trolsra. RLCF f{,d{,a}}Szimbolikus jells:lltott llapotbitek: 14 bites kd: Megjegyzs:CFjlregiszterSz: Ciklus: Mnemonik: Szintaxis: Operandus: RLNCF1 1[cmke] 0 f 255 d [0,1] a [ 0,1]RLNCFf{,d{,a}}Szimbolikus jells: lltott llapotbitek: 16 bites kd:f cl f cl N, Z 0100 01da ffff ffff43/82PIC mikrovezrl utastskszlete (16-os sorozat) Megjegyzs: Az 'f' helyn ll fjlregiszter bitjein egyet balra forgat. Az eredmny d=0 esetn a munkaregiszterben, d=1 esetn a fjlregiszterben kerl trolsra.FjlregiszterSz: Ciklus: Mnemonik: Szintaxis: Operandus: RRCF1 1[cmke] 0 f 255 d [0,1] a [ 0,1]RRCF f{,d{,a}}Szimbolikus jells:f cl f C C cl C, N, Z 0011 00da ffff ffff Az 'f' helyn ll fjlregiszter bitjein egyet jobbra forgat a Carry (tvitel) biten keresztl. Az eredmny d=0 esetn a munkaregiszterben, d=1 esetn a fjlregiszterben kerl trolsra.lltott llapotbitek: 14 bites kd: Megjegyzs:CFjlregiszterSz: Ciklus:1 144/82PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: RRNCF [cmke] 0 f 255 d [0,1] a [ 0,1] f cl f cl N, Z 0100 00da ffff ffff Az 'f' helyn ll fjlregiszter bitjein egyet jobbra forgat. Az eredmny d=0 esetn a munkaregiszterben, d=1 esetn a fjlregiszterben kerl trolsra. RRNCF f{,d{,a}}Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs:FjlregiszterSz: Ciklus: Mnemonik: Szintaxis: Operandus: SETF1 1[cmke] 0 f 255a [ 0,1]SETF f{,a}Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs: Sz: Ciklus:FFh f Nincs 0110 100a ffff ffff Az f helyn ll fjlregiszterbe FFh rtket tltnk. 1 1 45/82PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs: BC [cmke] BC n-128 n 127 ha C = 1: (PC) + 2n PC Nincs 1110 0010 nnnn nnnn Feltteles elgazs (relatv ugrssal). Amennyiben a Carry bit rtke 0, akkor a kvetkez utasts hajtdik vgre ebben az esetben egyciklusos utasts. Amennyiben a Carry bit rtke 1, akkor az n rtknek ktszerest hozzadjuk a programszmllhoz kettes komplemensben ha n helyn cmke ll, akkor az adott cmre ugrunk, feltve, hogy a kiindulsi cmtl 127 ciklusra van. Ebben az esetben ktciklusos az utasts. 1 1 (2) BN [cmke] BN nSz: Ciklus: Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs:-128 n 127 ha N = 1: (PC) + 2n PC Nincs 1110 0110 nnnn nnnn Feltteles elgazs (relatv ugrssal). Amennyiben a Negative bit rtke 0, akkor a kvetkez utasts hajtdik vgre ebben az esetben egyciklusos utasts. Amennyiben a Negative bit rtke 1, akkor az n rtknek ktszerest hozzadjuk a programszmllhoz kettes komplemensben ha n helyn cmke ll, akkor az adott cmre ugrunk, feltve, hogy a kiindulsi cmtl 127 ciklusra van. Ebben az esetben ktciklusos az utasts. 1 1 (2) 46/82Sz: Ciklus:PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs: BNC [cmke] BNC n-128 n 127 ha C = 0: (PC) + 2n PC Nincs 1110 0011 nnnn nnnn Feltteles elgazs (relatv ugrssal). Amennyiben a Carry bit rtke 1, akkor a kvetkez utasts hajtdik vgre ebben az esetben egyciklusos utasts. Amennyiben a Carry bit rtke 0, akkor az n rtknek ktszerest hozzadjuk a programszmllhoz kettes komplemensben ha n helyn cmke ll, akkor az adott cmre ugrunk, feltve, hogy a kiindulsi cmtl 127 ciklusra van. Ebben az esetben ktciklusos az utasts. 1 1 (2) BNN [cmke] BNN nSz: Ciklus: Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs:-128 n 127 ha N = 0: (PC) + 2n PC Nincs 1110 0111 nnnn nnnn Feltteles elgazs (relatv ugrssal). Amennyiben a Negative bit rtke 1, akkor a kvetkez utasts hajtdik vgre ebben az esetben egyciklusos utasts. Amennyiben a Negative bit rtke 0, akkor az n rtknek ktszerest hozzadjuk a programszmllhoz kettes komplemensben ha n helyn cmke ll, akkor az adott cmre ugrunk, feltve, hogy a kiindulsi cmtl 127 ciklusra van. Ebben az esetben ktciklusos az utasts. 1 1 (2) 47/82Sz: Ciklus:PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs: BNOV [cmke] BNOV n-128 n 127 ha OV = 0: (PC) + 2n PC Nincs 1110 0101 nnnn nnnn Feltteles elgazs (relatv ugrssal). Amennyiben az OVerflow bit rtke 1, akkor a kvetkez utasts hajtdik vgre ebben az esetben egyciklusos utasts. Amennyiben az OVerflow bit rtke 0, akkor az n rtknek ktszerest hozzadjuk a programszmllhoz kettes komplemensben ha n helyn cmke ll, akkor az adott cmre ugrunk, feltve, hogy a kiindulsi cmtl 127 ciklusra van. Ebben az esetben ktciklusos az utasts. 1 1 (2) BNZ [cmke] BNZ nSz: Ciklus: Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs:-128 n 127 ha Z = 0: (PC) + 2n PC Nincs 1110 0001 nnnn nnnn Feltteles elgazs (relatv ugrssal). Amennyiben az Zero bit rtke 1, akkor a kvetkez utasts hajtdik vgre ebben az esetben egyciklusos utasts. Amennyiben az Zero bit rtke 0, akkor az n rtknek ktszerest hozzadjuk a programszmllhoz kettes komplemensben ha n helyn cmke ll, akkor az adott cmre ugrunk, feltve, hogy a kiindulsi cmtl 127 ciklusra van. Ebben az esetben ktciklusos az utasts. 1 1 (2) 48/82Sz: Ciklus:PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs: BOV [cmke] BOV n-128 n 127 ha OV = 1: (PC) + 2n PC Nincs 1110 0100 nnnn nnnn Feltteles elgazs (relatv ugrssal). Amennyiben az OVerflow bit rtke 0, akkor a kvetkez utasts hajtdik vgre ebben az esetben egyciklusos utasts. Amennyiben az OVerflow bit rtke 1, akkor az n rtknek ktszerest hozzadjuk a programszmllhoz kettes komplemensben ha n helyn cmke ll, akkor az adott cmre ugrunk, feltve, hogy a kiindulsi cmtl 127 ciklusra van. Ebben az esetben ktciklusos az utasts. 1 1 (2) BRA [cmke] BRA nSz: Ciklus: Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs:-1024 n 1023 (PC) + 2n PC Nincs 1101 0nnn nnnn nnnn Felttel nlkli ugrs (relatv). Az n rtknek ktszerest hozzadjuk a programszmllhoz kettes komplemensben ha n helyn cmke ll, akkor az adott cmre ugrunk, feltve, hogy a kiindulsi cmtl 1023 ciklusra van. 1 2Sz: Ciklus:49/82PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs: BZ [cmke] BZ n-128 n 127 ha Z = 1: (PC) + 2n PC Nincs 1110 0000 nnnn nnnn Feltteles elgazs (relatv ugrssal). Amennyiben az Zero bit rtke 0, akkor a kvetkez utasts hajtdik vgre ebben az esetben egyciklusos utasts. Amennyiben az Zero bit rtke 1, akkor az n rtknek ktszerest hozzadjuk a programszmllhoz kettes komplemensben ha n helyn cmke ll, akkor az adott cmre ugrunk, feltve, hogy a kiindulsi cmtl 127 ciklusra van. Ebben az esetben ktciklusos az utasts. 1 1 (2) CPFSEQ [cmke] 0 f 255a [ 0,1]Sz: Ciklus: Mnemonik: Szintaxis: Operandus:CPFSEQ f{,a}Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs:(f) sszehasonlts (W) tlps, ha (f) = (W) Nincs 0110 001a ffff ffff A megadott fjlregiszter s az akkumultor rtknek sszehasonltsa a kvetkez utasts tlpse, ha egyenlek. tlps esetn ktciklusos az utasts, ellenkez esetben egy. Amennyiben 2 szavas utastst kell tlpnnk, akkor ezt csak 3 ciklusbl tudjuk megoldani. 1 1 (2, 3) 50/82Sz: Ciklus:PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: CPFSGT [cmke] 0 f 255a [ 0,1]CPFSGT f{,a}Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs:(f) sszehasonlts (W) tlps, ha (f) > (W) Nincs 0110 010a ffff ffff A megadott fjlregiszter s az akkumultor rtknek sszehasonltsa a kvetkez utasts tlpse, ha a fjlregiszter rtke nagyobb, mint az akkumultor. tlps esetn ktciklusos az utasts, ellenkez esetben egy. Amennyiben 2 szavas utastst kell tlpnnk, akkor ezt csak 3 ciklusbl tudjuk megoldani. 1 1 (2, 3)Sz: Ciklus: Mnemonik: Szintaxis: Operandus: CPFSLT[cmke] 0 f 255a [ 0,1]CPFSLT f{,a}Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs:(f) sszehasonlts (W) tlps, ha (f) < (W) Nincs 0110 000a ffff ffff A megadott fjlregiszter s az akkumultor rtknek sszehasonltsa a kvetkez utasts tlpse, ha a fjlregiszter rtke kisebb mint az akkumultor. tlps esetn ktciklusos az utasts, ellenkez esetben egy. Amennyiben 2 szavas utastst kell tlpnnk, akkor ezt csak 3 ciklusbl tudjuk megoldani.51/82PIC mikrovezrl utastskszlete (16-os sorozat) Sz: Ciklus: Mnemonik: Szintaxis: Operandus: Szimbolikus jells: DAW [cmke] Nincs ha [W > 9] vagy [DC = 1] akkor (W) + 6 W klnben (W) = W; ha [W +DC > 9] vagy [C = 1] akkor (W) + 6 + DC W klnben (W) + DC = W C 0000 0000 0000 0111 Az akkumultor decimlis kiegsztse (BCD szmok esetn hasznlatos). 1 1 DCFSNZ [cmke] 0 f 255d [0,1] a [ 0,1]1 1 (2, 3)DAWlltott llapotbitek: 16 bites kd: Megjegyzs: Sz: Ciklus: Mnemonik: Szintaxis: Operandus:DCFSNZf{,d{,a}}Szimbolikus jells: lltott llapotbitek: 16 bites kd:(f) 1 = cl ugrs, ha az eredmny nem nulla. Nincs 0100 11da ffff ffff52/82PIC mikrovezrl utastskszlete (16-os sorozat) Megjegyzs: Feltteles elgazs. Az utasts cskkenti az 'f' helyen ll fjlregiszter tartalmt eggyel, majd az eredmnyt a clregiszterbe rja. Amennyiben az eredmny egyenl nullval, akkor a kvetkez utasts hajtdik vgre ebben az esetben egyciklusos utasts. Ha az utasts hatsra az eredmny nem egyenl nullval, akkor a kvetkez utastst elhagyjuk s helyette egy NOP utastst hajtunk vgre - ebben az esetben ktciklusos utasts. Ktszavas utasts tlpsre 3 gpi ciklus szksges. 1 1 (2, 3) INFSNZ [cmke] 0 f 255d [0,1] a [ 0,1]Sz: Ciklus: Mnemonik: Szintaxis: Operandus:INFSNZf{,d{,a}}Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs:(f) + 1 = cl ugrs, ha az eredmny nem nulla Nincs 0100 10da ffff ffff Feltteles elgazs. Az utasts nveli az 'f' helyen ll fjlregiszter tartalmt eggyel, majd az eredmnyt a clregiszterbe rja. Amennyiben az eredmny egyenl nullval, akkor a kvetkez utasts hajtdik vgre ebben az esetben egyciklusos utasts. Ha az utasts hatsra az eredmny nem egyenl nullval, akkor a kvetkez utastst elhagyjuk s helyette egy NOP utastst hajtunk vgre - ebben az esetben ktciklusos utasts. Ktszavas utasts tlpsre 3 gpi ciklus szksges. 1 1 (2, 3)Sz: Ciklus:53/82PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs: Sz: Ciklus: Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs: Sz: Ciklus: PUSH [cmke] Nincs PC TOS Nincs 0000 0000 0000 0101 A programszmll rtkt (a kvetkez utasts cmt) a verembe helyezzk. 1 1 PUSH POP [cmke] Nincs TOS kuka Nincs 0000 0000 0000 0110 A verem tetejn lv rtk eldobsa. Az utasts lehetv teszi, hogy a felhasznl szoftveres ton lltsa a vermet. 1 1 POP54/82PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs: RCALL [cmke] RCALL n-1024 n 1023 PC TOS (PC) + 2n PC Nincs 1101 1nnn nnnn nnnn Relatv szubrutinhv utasts. A programszmllt a verem tetejre helyezzk. Az n rtknek ktszerest hozzadjuk a programszmllhoz kettes komplemensben. Amennyiben n helyn cmke ll az utasts mkdse megegyezik a CALL utastssal, de nem ltja t a teljes memriatartomnyt. 1 2 RESET [cmke] Nincs Hatsa megegyezik a Master Clear reszettel. sszes. 0000 0000 1111 1111 Hatsa megegyezik a Master Clear reszettel. 1 1 RESETSz: Ciklus: Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs: Sz: Ciklus:55/82PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: TSTFSZ [cmke] 0 f 255a [ 0,1]TSTFSZ f{,a}Szimbolikus jells: lltott llapotbitek: 16 bites kd: Megjegyzs:tlps, ha f = 0 Nincs 0110 011a ffff ffff Az 'f' helyn ll fjlregiszter rtknek vizsglata. Amennyiben nulla, akkor a kvetkez utasts tlpse (ktciklusos). 1 1 (2, 3)Sz: Ciklus:56/82MPASM bels makriMPASM bels makriAz MPLAB fordtjba integrltak nhny a programozst megknnyt bels makrdefincit. Makr neve ADDCF f,d ADDDCF f,d Bk BC BDC BNC BNDC BNZ BZ CLRC CLRDC CLRZ LCALL k Lers Carry hozzadsa a fjlregiszterhez Digit Carry hozzadsa a fjlregiszterhez Felttel nlkli ugrs Ugrs, ha a Carry 1 Ugrs, ha a Digit Carry 1 Ugrs, ha a Carry 0 Ugrs, ha a Digit Carry 0 Ugrs, ha a ZERO 0 Ugrs, ha a ZERO 1 Carry trlse Digit Carry trlse Zero trlse Hossz szubrutinhvs Makr kifejtse BTFSC STATUS,C INCF f,d BTFSC STATUS,DC INCF f,d GOTO k BTFSC STATUS,C GOTO k BTFSC STATUS,DC GOTO k BTFSS STATUS,C GOTO k BTFSS STATUS,DC GOTO k BTFSS STATUS,Z GOTO k BTFSC STATUS,Z GOTO k BCF STATUS,C BCF STATUS,DC BCF STATUS,Z BCF/BSF PCLATH,3 BCF/BSF PCLATH,4 CALL k BCF/BSF PCLATH,3 BCF/BSF PCLATH,4 GOTO k MOVF f,W COMF f,d INCF f,d BSF STATUS,C BSF STATUS,DC BSF STATUS,Z lltott jelzbitek Z Z -LGOTO k MOVFW f NEGF f,d SETC SETDC SETZHossz ugrs A fjregiszter tartalmnak W-be tltse Fjlregiszter kettes komplemensnek kpzse Carry 1-be lltsa Digit Carry 1-be lltsa Zero 1-be lltsaZ Z -57/82MPASM bels makri SKPC SKPDC SKPNC SKPNDC SKPNZ SKPZ SUBCF f,d SUBDCF f,d TSTF f Kvetkez utasts tugrsa, ha Carry 1 Kvetkez utasts tugrsa, ha Digit Carry 1 Kvetkez utasts tugrsa, ha Carry 0 Kvetkez utasts tugrsa, ha Digit Carry 0 Kvetkez utasts tugrsa, ha Zero 0 Kvetkez utasts tugrsa, ha Zero 1 Carry kivonsa a fjlregiszterbl Digit Carry kivonsa a fjlregiszterbl Fjlregiszter tesztelse, hogy nulla e. BTFSS STATUS,C BTFSS STATUS,DC BTFSC STATUS,C BTFSC STATUS,DC BTFSC STATUS,Z BTFSS STATUS,Z BTFSC STATUS,C DECF f,d BTFSC STATUS,DC DECF f,d MOVF f,F Z Z Z58/82MPASM direktvkMPASM direktvkAz MPLAB fordtja szmos a programozst megknnyt direktvval van elltva ezek kzl itt csak a legfontosabbakat soroljuk fel. Direktvk csoportostsa: Vezrl direktvk: Feltteles fordts direktvi: Adat direktvk: Jegyzkbe vtel (listing) direktvi: Makr direktvk: Trgy (object) fjl direktvi: Megadhatjuk, hogy miknt kerljn lefordtsra a forrskd. Megadhatjuk, hogy a kd egy rsze, vagy egsze bizonyos felttelek teljeslse esetn fordtsra kerljn-e vagy sem. Klnbzclokra lefoglalhatunk helyet az adatmemriban, szimblumokat rendelhetnk az adatmemria cmeihez. Kivlaszthatjuk, hogy milyen lista fjlok keletkezzenek a fordts sorn. Makrk ltrehozshoz, belltshoz s a hozzjuk tartalmaz adatmemria lefoglalshoz szksges direktvk. A trgy fjl ltrehozshoz tartalmaz direktvk.A direktvkat akkor alkalmazzuk, ha valban megknnytik a programozst. A divat kedvrt, vagy csak azrt, hogy bizonytsuk a direktvk tern val jrtassgunkat ne hasznljuk ket. Trekedjnk az tlthatsgra, s a forrs knny rthetsgre.59/82MPASM direktvk Direktvk Vezrl #DEFINE #INCLUDE #UNDEFINE CONSTANT END EQU ORG PROCESSOR RADIX SET VARIABLE Feltteles fordts ELSE ENDIF ENDW IF IFDEF IFNDEF WHILE Adat __BADRAM __BADROM __CONFIG __IDLOCS __MAXRAM __MAXROM CBLOCK DA DATA DB DE DT DW ENDC FILL RES Jegyzk ERROR ERRORLEVEL LIST MESSG NOLIST PAGE SPACE SUBTITLE TITLE Makr ENDM EXITM EXPAND LOCAL MACRO NOEXPAND Trgy fjl ACCESS_OVR BANKISEL BANKSEL CODE CODE_PACK EXTERN GLOBAL IDATA IDATA_ACS PAGESEL PAGESELW UDATA UDATA_ACS UDATA_OVR UDATA_SHR 60/82MPASM direktvkVezrl direktvk#DEFINE: Szveghelyettest cmke megadsa. A #DEFINE direktvval beszdes neveket tudunk konstanshoz, s memriacmekhez rendelni. A fordt a forrsprogramban a definilt neveket helyettesti az elre megadott karakterlnccal. ltalban a mikrovezrlre csatlakoztatott perifrikat szoktuk beszdes cmkvel elltni a segtsgvel. Megadhatunk a programokban elre meghatrozott konstansokat is (BAUD; MAX_SEBESSEG; MIN_HOSSZ; stb.) #DEFINE NV [karakterlnc] #DEFINE LED PORTB,0 #DEFINE SZAM 20 #INCLUDE: ;LED nven tudunk hivatkozni a ;PORTB 0. bitjre ;SZAM helyre 20 fordul beSzintaxis: Plda:Kiegszt forrsfjlt adhatunk meg. Hatsra a megadott fjlban lv forrs is fordtsra kerl. Kln oda kell figyelnnk hogy az elsdleges forrsban s az include fjl(ok)ban megadott memriacmek ne tkzzenek egymssal. A kiegszt forrs is tartalmazhat kiegszt forrst (maximum 5 szint lehet az egymsba gyazs). Egy forrs maximum 255 include fjlt tartalmazhat. Segtsgvel tlthatbb tehetjk forrsprogramunkat. Az ltalunk mr lekezelt perifrikhoz tartoz algoritmusokat clszer include fjlba tenni, ezltal ksbbi fejlesztsekhez is felhasznlhatjuk ezeket. A fordts sorn mindig elszr a kiegszt forrs(ok) kerlnek lefordtsra, az eredeti forrs csak utna kvetkezik. #INCLUDE kiegszt_forrs #INCLUDE kiegszt_forrs #INCLUDE #INCLUDE P16F84.INC #INCLUDE ;Gyri kiegszt forrs ;megadsa ;Sajt kiegszt forrs megadsa ;elrsi ttalSzintaxis:Plda:61/82MPASM direktvk #UNDEFINE: Szveghelyettest cmke feloldsa. Elkpzelhet, hogy a forrs egy rsznl ugyanahhoz a szimblumhoz mr egy msik karakterlncot szeretnnk rendelni pl. klnbz adattviteli sebessgek. Ebben az esetben az #UNDEFINE direktva segtsgvel feloldhatjuk a szveghelyettestt, majd a #DEFINE direktvval egy msik karakterlncot rendelhetnk hozz. #UNDEFINE NV #DEFINE LED PORTB,0 #DEFINE FENY_ERO 90 ;programrsz #UNDEFINE LED #UNDEFINE FENY_ERO #DEFINE LED PORTB,1 #DEFINE FENYERO 50 CONSTANT: ;LED nven tudunk hivatkozni a ;PORTB 0. bitjre ;FENY_ERO helyre 90 kerl ;LED szimblum feloldsa ;FENY_ERO feloldsa ;LED a B port 1. bitjn ;FENY_ERO j rtke 50Szintaxis: Plda:Konstans rtkhez rendelhetnk szimblumot. Ezt a konstanst a ksbbiek sorn nem tudjuk fellrni. A #DEFINE direktvval ellenttben itt egy szimblumhoz rtk, s nem karakterlnc rendeldik hozz. CONSTANT szimblum=konstans [,szimblum=konstans] CONSTANT UT=63 ;UT szimblum helyett a 63 ;konstans fog befordulniSzintaxis: Plda: END:Forrskd vgt jell direktva azt ami utna ll a fordt mr nem veszi figyelembe. Figyelem, ha egy program tbb forrst (pl. include) tartalmaz, akkor is egy s csak egy END szerepelhet benne. Szintaxis: Plda: END ;program ;END ;program vge62/82MPASM direktvk EQU: Segtsgvel szimblumot rendelhetnk egy konstanshoz ez akr egy msik szimblum is lehet. Az adatmemria regisztereit, s bitjeit szoks az EQU direktvval cmkzni. Szintaxis: Plda: szimblum EQU konstans SZAM EQU 0X20 ;az adatmemria 20h cmn ;elhelyezked regiszterre ezentl ;tudunk a SZAM szimblummal ;hivatkozni IRANYB EQU TRISB ;A B port irnyregiszterre ;tudunk hivatkozni az IRANYB ;szimblum segtsgvel ;megjegyzs: az SFR regiszterszimblumait nem illik trni! Meghatrozhatjuk, hogy a programmemria mely cmtl kezdve legyen befordtva a kd. Szintaxis: Plda: ORG memriacm ORG 0 GOTO START ORG 4 RETFIE ;reszet vektor definilsa ;reszet esetn ugrs start ;megszaktsi vektor ;vissza a megszaktsblORG:PROCESSOR: Szintaxis: Plda: RADIX:Processzor tpusnak meghatrozsa. PROCESSOR processzor_tpus PROCESSOR 16F84 ;16F84 mikrovezrl belltsaBellthatjuk hogy milyen szmformtumot hasznlunk a forrskdban. Megadhat oktlis (OCT), decimlis (DEC) s hexadecimlis (HEX) paramter. Amennyiben nem hasznljuk, az alaprtelmezett szmformtum a hexadecimlis (16). A ksbbi kdols minden szmot a belltott, vagy alaprtelmezett szmformtum szerint rtelmez a fordt ha ettl el akarunk trni, akkor hasznljuk a kvetkez szintaxist: B'10001111'; O'257'; D'100'; H'A2'. A jellsek: Binary (kettes); Octal (nyolcas); Decimal (tzes); Hexa (tizenhatos). Az MPASM fordtja decimlisknt rtelmezi azt a szmot, mely eltt a '.' karakter ll. RADIX szmformtumSzintaxis:63/82MPASM direktvk Plda: RADIX DEC MOVLW 10 ;programrsz MOVLW B'10001111' SET: ;az alaprtelmezett ;szmformtum decimlis ;10d betltse az akkumultorba ;10001111b betltse a W-beSzimblumot tudunk egy vltoz rtk konstanshoz rendelni. Funkcijt tekintve megegyezik az EQU direktvval, ezt azonban ksbb fell tudjuk rni. Hasznlhat ciklusvltozknt. Szintaxis: Plda: szimblum SET konstans SET LOOP 15 ;ciklus SET LOOP 35 ;ciklus ;LOOP helyett 15 fordul be ;LOOP helyre 35 fordul be Vltozk definilsra alkalmas direktva. Fontos tisztzni, hogy ez nem futs idben trtn vltozsra utal, arra csak az adatmemria regisztereit, vagy a programmemrit hasznlhatjuk. Minden direktva hatsa mr a fordts sorn implementldik a kdba! A VARIABLE direktvval megadott szimblumot a forrskdban ksbb fellrhatjuk ebben klnbzik a CONSTANS szimblumtl. Clszeren ott lehet hasznlni, ahol egy adott szimblumhoz attl fggen hogy a forrskd mely rszn hivatkozunk r, ms konstans tartozik pl. kt soros portot hasznlunk klnbz sebessgekkel, de gy szeretnnk megrni a forrst, hogy mindegyiknl a BAUD szimblummal tudjuk hivatkozni az adattviteli sebessgre. VARIABLE NV szimblum=konstans [,szimblum=konstans] VARIABLE BAUD=D'9600' ;Soros port1 inicializlsa VARIABLE BAUD=D'14400 ' ;Soros port2 inicializlsa ;BAUD rtke 9600d ;BAUD rtke 14400dVARIABLE:Szintaxis: Plda:64/82MPASM direktvkFeltteles fordts direktviELSE: Szintaxis: Plda: ELSE IF ELSE MOVLW .XXX MOVWF BRG ENDIF: Szintaxis: Plda: ENDIF IF ENDIF ENDW: Szintaxis: Plda: IF: ENDW l. WHILE Feltteles fordts kezdete. Segtsgvel univerzlis programokat tudunk rni. Az tlthatsgot azonban cskkenti. Csak mkd kiprblt programok esetn tancsos alkalmazni. Ktelezen ENDIF-el zrdik Szintaxis: Plda: IF kifejezs IF ENDIF IFDEF: SZAM>1 INCF PORTB,F ;ha a SZAM szimblum rtke ;nagyobb, mint 1, akkor ;megnveljk PORTB rtkt SZAM>1 INCF PORTB,F ;ha a SZAM szimblum rtke ;nagyobb, mint 1, akkor ;megnveljk PORTB rtkt ;klnben YYY betltse ;(11400 BAUD) direktva. Eltte BAUD == 9600 MOVLW .XXX MOVWF BRG ;ha a BAUD 9600 ;akkor BRG regiszterbe ;XXX betltse A feltteles fordts klnben ga. Csak az IFENDIF direktvval egytt van rtelme.Feltteles fordts vgt jelz ktelezen IF-nek kell llnia.A WHILE ciklus vgt jelz direktvaAkkor fordul be, ha a megadott szimblum definilva van a forrsban. Tesztelsre, ill. tbb programvltozat esetn alkalmazhat. Elkpzelhet, egy perifrit egy msik alkalmazsban thelyeznk egy msik portra. Ebben az esetben egy szimblum definilsval klnbsget tudunk tenni a kt programvltozat krtt. Ktelezen ENDIF direktvval zrdik. 65/82MPASM direktvk Szintaxis: Plda: IFDEF szimblum #DEFINE SIM 0 IFDEF SIM ;programrsz (pldul regiszterek feltltse kezdrtkkel a ;szimulci elvgzshez) ENDIF Akkor fordul be, ha a megadott szimblum definilva van a forrsban. Hasznlata megegyezik az IFDEF direktvval. IFNDEF l. IFDEF Makrn bell hasznlhat while ciklus. Nem futsi idben mkdik! A WHILE ciklusban a vltoz maximum 255 rtk lehet. A ciklus maximum 100 sort tartalmazhat. Hasznlata kerlend, mert a igen redundns kdot eredmnyez! WHILE kifejezs SR I=0 MACRO REG,N WHILE I