You are on page 1of 82

Tartalomjegyzk

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

Bevezets
gy 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 szmtgp
Ahhoz, 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

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 architektra
Tekintsk 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 egysg
Harvard 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 jelleg
A 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, ltjogosultsga


A 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 felptse


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

Cmke
Cmke:

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:

+ * / % ( ) << >> ! ^ | & && || > < >= <= == != ~ $ LOW HIGH UPPER stb.

sszeads kivons (vagy kettes komplemens) szorzs oszts maradkos oszts, az eredmny a maradk bal zrjel mveletek csoportostsra jobb zrjel mveletek csoportostsra balra lptets a biteken jobbra lptets a biteken logikai komplemens bitenknti KIZR-VAGY kapcsolat bitenknti VAGY kapcsolat bitenknti S kapcsolat logikai S kapcsolat logikai VAGY kapcsolat nagyobb? kisebb? nagyobb, vagy egyenl? kisebb, vagy egyenl? egyenl? nem egyenl? aritmetikai komplemens aktulis cmmutat (PC) als bjt (0:7) fels bjt (8:15) fels bjt (16:21)

8/82

Bevezets Megjegyzs: A programoz ltal az utastsokhoz rt komment. Az assembly nyelven rt programban nagyon fontos a megjegyzs kdunk igen hosszra nylhat, radsul els rnzsre elg nehz eligazodni rajta. A programdokumentci szerves rsze az egyes utastsok, modulok, forrsok megfelel eligazodsi segtsggel val elltsa. A megjegyzs egy klnleges karakterrel a ';'-tal kezddik. Minden ami ez utn van kommentnek szmt, s a fordt mr nem veszi figyelembe. Teljes sor(ok) is lehetnek megjegyzs(ek). Clszer gy elkszteni ezt az elzetes dokumentcit, mintha egy msik szakembernek ksztennk tmutatt. A sajt magunknak rt megjegyzsek gyakran nagyon felletesek, s egy-kt hnap elteltvel mr magunk sem igazodunk ki rajtuk. A magyarzatok ne a nyilvnval tnyekre hvjk fel a figyelmet (pl. az akkumultorba 15h-t tltnk) inkbb a rutin, modul, program lnyegt prbljuk megfogni, s szemantikai megjegyzseket tegynk.

Direktva:

A fordtnak szl specilis utasts a programoztl. A direktvk nem kerlnek lefordtsra br hatsaik megjelennek a trgyprogramban.

Direktva szimbluma

Mdost rsz

Mdost rsz

Gyakori hiba programozs sorn a direktvval egy sorba cmkt tenni ez a legtbb direktva esetn tilos! A direktva nem fordul be a kdba, ezrt nincs is rtelme az cmre hivatkoz szimblumnak a fordt hibt fog jelezni. Amennyiben direktvt szeretnnk megjellni belpsi pontknt a cmkt rjuk egy sorral a direktva fl egy nll sorba (valjban nem a direktva fog erre a cmkre val ugrs sorn vgrehajtdni hiszen ez mr csak mkds kzben trtnik meg - csak az ltala jelkpezett hatsok). Megjegyzs: A szmok szmmal s csakis szmmal, mg a szimblumok betvel s csakis betvel kezddhetnek egy assembly programban. A kvetkezkben megismerkednk a PIC mikrovezrlk utastsaival s az MPASM direktvival majd rviden sszefoglaljuk a fejleszts menett.

9/82

PIC mikrovezrl utastskszlete (16-os sorozat)


lltott jelz bitek

Mnemonik

Jelents

Funkci Adatmozgat utastsok

Gpi ciklus

MOVLW k MOVWF f MOVF f,d

MOVe Literal to W MOVe W to File MOVe File

konstans mozgatsa W-be W mozgatsa fjlregiszterbe Fjlregiszter mozgatsa

1 1 1 Z

Aritmetikai utastsok
ADDLW k ADDWF f SUBLW k SUBWF f,d INCF f,d DECF f,d ADD Literal and W ADD W and File SUBtract W from Literal SUBtract W from File INCrement File DECrement File Konstans hozzadsa W-hez W hozzadsa fjlregiszterhez W kivonsa konstansbl W kivonsa fjlregiszterbl Fjlregiszter nvelse Fjlregiszter cskkentse 1 1 1 1 1 1 C,DC,Z C,DC,Z C,DC,Z C,DC,Z Z Z

Logikai utastsok
ANDLW k ANDWF f,d IORLW k IORWF f,d XORLW k XORWF f,d COMF f,d SWAPF f,d RLF f,d RRF f,d BCF f,b BSF f,b CLRF f CLRW CLRWDT AND Literal with W AND W with File Inclusive OR Literal with W Inclusive OR W with File eXclusive OR Literal with W eXclusive OR W with File COMplement File SWAP nibbles in File Rotate Left File through carry Rotate Left File through carry Bit Clear File Bit Set File CLeaR File CLeaR W CLeaR Watch Dog Timer Konstans s W S kapcsolata W s fjlregiszter S kapcsolata Konstans s W VAGY kapcsolata W s fjlregiszter VAGY kapcsolata Konstans s W kizr-vagy kapcsolata W s regiszter kizr-vagy kapcsolata Fjlregiszter bitjeinek invertlsa Regiszter als-fels 4 bitjnek cserje Forgats balra az tvitelbiten keresztl Forgats jobbra az tvitelbiten keresztl Fjlregiszter bitjnek trlse Fjlregiszter bitjnek egybe lltsa Fjlregiszter trlse W trlse WDT trlse 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Z Z Z Z Z Z Z C C Z Z

TO , PD
-

Vezrlstad utastsok
GOTO k BTFSC f,b BTFSS f,b INCFSZ f DECFSZ f CALL k RETURN RETLW k RETFIE SLEEP NOP GO TO address Bit Test File, Skip if Clear Bit Test File, Skip if Set INCrement File, Skip if Zero DECrement File, Skip if Zero CALL Subrutine RETURN from subrutine RETurn From Interrupt SLEEP (Go into standby mode) No OPeration Felttel nlkli ugrs Bit tesztelse s ugrs, ha 0 Bit tesztelse s ugrs, ha 1 Fjlregiszter nvelse s ugrs, ha 0 Fjlregiszter cskkentse s ugrs, ha 0 Szubrutin meghvsa Visszatrs szubrutinbl Visszatrs megszaktsbl Alv md Nincs mvelet 2 1,2 1,2 1,2 1,2 2 2 2 2 1 1 -

RETurn from subrutine with Literal in W Visszatrs szubrutinbl konstans w-ben

TO , PD
-

PIC mikrovezrl utastskszlete (16-os sorozat) A tblzatban szerepl jellsek:


k: b: f: d: -: Z: C: DC: TO: PD :

konstans (literl) bitcm egy 8 bites regiszterben fjlregiszter destination (cl) nincs operandus Zero bit Carry (tvitel) bit Digit Carry bit Time Out bit Power Down bit

Az utastsok rszletes lersa


Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 14 bites kd: Megjegyzs: Sz: Ciklus: Plda: MOVLW [cmke] 0 k 255 k (W) Nincs 11 00xx kkkk kkkk 8 bites konstans rtket tudunk betlteni a munkaregiszterbe. A nem meghatrozott bitek rtke: 0. 1 1 MOVLW .6 ;az akkumultor 6-tal val feltltse MOVLW k

11/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 14 bites kd: Megjegyzs: Sz: Ciklus: Plda: Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 14 bites kd: Megjegyzs: MOVF [cmke] 0 f 127 d [0,1] (f) (cl) Z 00 1000 dfff fff Regiszterben trolt adat mozgatsa a clbit fggvnyben. D=0 esetn az adat a munkaregiszterbe kerl, d=1 esetn az adat a fjlregiszterbe kerl. Az nmagba mozgats utn tesztelhetjk a zr bitet - gy el tudjuk dnteni egy szmrl, hogy nulla-e. 1 1 MOVF PORTA,W ;porta rtke az akkumultorba MOVFf,d MOVWF [cmke] 0 f 127 (W) (f) Nincs 00 0000 1fff ffff Adat betltse a munkaregiszterbl egy fjlregiszterbe (az adatmemria meghatrozott memriarekeszbe). 1 1 MOVWF PORTB ;akkumultor rtke a portb-be MOVWF f

Sz: Ciklus: Plda:

12/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 14 bites kd: Megjegyzs: Sz: Ciklus: Plda: Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 14 bites kd: Megjegyzs: ADDWF [cmke] 0 f 127 d [0,1] (W) + (f) (cl) C, DC, Z 00 0111 dfff ffff Az 'f' helyn ll fjlregiszter tartalmt hozzadjuk a munkaregiszterhez. Az eredmnyt a destination bit hatrozza meg ('d'=0 W, 'd'=1 f ). 1 1 ADDWF COUNT,F ;count regiszterhez akkumultor ;hozzadsa, eredmny a count;ban ADDWF f,d ADDLW [cmke] 0 k 255 (W) + k (W) C, DC, Z 11 111x kkkk kkkk 8 bites konstans rtk hozzadsa a munkaregiszterhez, az eredmny a munkaregiszterben kpzdik. 1 1 ADDLW 9 ;9 hozzadsa az akkumultorhoz ADDLW k

Sz: Ciklus: Plda:

13/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 14 bites kd: Megjegyzs: SUBLW [cmke] SUBLW 0 k 255 k - (W) (W) C, DC, Z 11 110x kkkk kkkk A munkaregiszter kivonsa (kettes komplemens segtsgvel) egy 8 bites konstans rtkbl. Az eredmny a munkaregiszterben kpzdik. 1 1 SUBLW SUBWF [cmke] SUBWF 0 f 127 d [0,1] f (W) (cl) C, DC, Z 00 0010 dfff ffff A munkaregiszter kivonsa (kettes komplemens segtsgvel) az 'f' helyn ll fjlregiszterbl. Az eredmny a clbit fggvnye ('d'=0 W, 'd'=1 f). 1 1 SUBWF COUNT,F ;count-bl az akkumultor ;kivonsa az eredmny a ;countban f,d 5 ;5-bl az akkumultor kivonsa k

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

Sz: Ciklus: Plda:

14/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 14 bites kd: Megjegyzs: INCF [cmke] INCF f,d 0 f 127 d [0,1] (f) + 1 (cl) Z 00 1010 dfff ffff Az 'f' helyn ll fjlregiszter eggyel trtn nvelse (ha az eredeti rtk 255 volt, az eredmny 0 lesz - aminek helyt a clbit hatrozza meg: d=0 W, d=1 f). 1 1 INCF PORTA,W DECF [cmke] 0 f 127 d [0,1] (f) 1 (cl) Z 00 0011 dfff ffff Az 'f' helyn ll fjlregiszter eggyel trtn cskkentse (ha az eredeti rtk 0 volt, az eredmny 255 lesz - aminek helyt a clbit hatrozza meg: d=0 W, d=1 f) 1 1 DECF COUNT,F ;count eggyel val cskkentse, az ;eredmny a countban DECF f,d ;PORTA eggyel val megnvelse az ;eredmny az akkumultorban

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

Sz: Ciklus: Plda:

15/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 14 bites kd: Megjegyzs: ANDLW [cmke] 0 k 255 (W) AND k (W) Z 11 1001 kkkk kkkk A munkaregiszter s egy 8 bites konstans logikai S kapcsolatt adja eredmnyl. Az eredmny a munkaregiszterben kpzdik. 1 1 ANDLW ANDWF [cmke] 0 f 127 d [0,1] (W) AND (f) (cl) Z 00 0101 dfff ffff Logikai S kapcsolat a munkaregiszter s az 'f' helyn ll fjlregiszter kztt az eredmny d=0 esetn a munkaregiszterben, d=1 esetn a fjlregiszterben kerl trolsra. 1 1 ANDWF PORTA,W ;porta s az akkumultor S ;kapcsolata, eredmny az ;akkumultorban ANDWF f,d 7 ;7 s az akkumultor S kapcsolata ANDLW k

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

Sz: Ciklus: Plda:

16/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 14 bites kd: Megjegyzs: IORLW [cmke] 0 k 255 (W) VAGY k (W) Z 11 1000 kkkk kkkk A munkaregiszter s egy 8 bites konstans logikai VAGY kapcsolatt adja eredmnyl. Az eredmny a munkaregiszterben kpzdik. 1 1 IORLW IORWF [cmke] 0 f 127 d [0,1] (W) VAGY (f) (cl) Z 00 0100 dfff ffff Logikai VAGY kapcsolat a munkaregiszter s az 'f' helyn ll fjlregiszter kztt az eredmny d=0 esetn a munkaregiszterben, d=1 esetn a fjlregiszterben kerl trolsra. 1 1 IORWF PORTA,W ;porta, s az akkumultor VAGY ;kapcsolata eredmny az ;akkumultorban IORWF f,d 7 ; 7 s az akkumultor VAGY kapcsolata IORLW k

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

Sz: Ciklus: Plda:

17/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 14 bites kd: Megjegyzs: Sz: Ciklus: Plda: Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 14 bites kd: Megjegyzs: XORWF [cmke] 0 f 127 d [0,1] (W) KIZR-VAGY (f) (cl) Z 00 0110 dfff ffff KIZR-VAGY kapcsolat a munkaregiszter s az 'f' helyn ll fjlregiszter kztt az eredmnyt d=0 esetn a munkaregiszterben troljuk, d=1 esetn pedig visszarjuk a fjlregiszterbe. 1 1 XORWF PORTB,W ; portb s az akkumultor ;KIZR VAGY kapcsolata az ;eredmny az akkumultorban XORWF f,d XORLW [cmke] 0 k 255 (W) KIZR-VAGY k (W) Z 11 1010 kkkk kkkk A munkaregiszter s egy 8 bites konstans KIZR-VAGY kapcsolata. Az eredmny a munkaregiszterben kpzdik. 1 1 XORLW 8 ;8 s az akkumultor KIZR-VAGY ;kapcsolata XORLW k

Sz: Ciklus: Plda:

18/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 14 bites kd: Megjegyzs: Z 00 1001 dfff ffff Az 'f' helyn ll fjlregiszter egyes komplemenst adja eredmnyl (invertlja a fjlregiszter tartalmt). Az eredmny d=0 esetn a W regiszterbe, d=1 esetn a fjlregiszterbe kerl. 1 1 COMF SWAPF [cmke] 0 f 127 d [0,1] (f <3:0>) (cl<7:4>) (f <7:4>) (cl<3:0>) Nincs 00 1110 dfff ffff Az 'f' helyn ll fjlregiszterben megcserli az als s a fels 4 bitet. Az eredmny d=0 esetn a munkaregiszterben, d=1 esetn a fjlregiszterben kerl trolsra. 1 1 SWAPF STATUS,W ;status regiszter als s fels ;ngy bitjnek cserje, eredmny ;az akkumultorban SWAPF f,d PORTB,F ;portb-n minden bit invertlsa COMF [cmke] 0 f 127 d [0,1] f (cl) COMF f,d

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

Sz: Ciklus: Plda:

19/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 14 bites kd: Megjegyzs: RLF [cmke] 0 f 127 d [0,1] Lsd a megjegyzsben C 00 1101 dfff 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. RLF f,d

Fjlregiszter

Sz: Ciklus: Plda:

1 1 RLF COUNT,F ;bitforgats a count regiszteren balra, az ;MSB a Carry bitbe kerl, eredmny a ;countban

Mnemonik: Szintaxis: Operandus:

RRF [cmke] 0 f 127 d [0,1] f<n> cl<n-1> f<0> C C cl<7> C 00 1100 dfff ffff RRF f,d

Szimbolikus jells:

lltott llapotbitek: 14 bites kd:

20/82

PIC mikrovezrl utastskszlete (16-os sorozat) Megjegyzs: 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.

Fjlregiszter

Sz: Ciklus: Plda:

1 1 RRF COUNT,F ;bitforgats a count regiszteren jobbra, ;az LSB a Carry bitbe kerl, eredmny a ;countban

Mnemonik: Szintaxis: Operandus:

BCF [cmke] 0 f 127 0b7 0 (f<b>) Nincs 01 00bb bfff ffff Az 'f' helyen ll fjlregiszter 'b' bitjnek trlse (nullba lltsa). 1 1 BCF PORTA,0 ;porta nulladik bitje:0 BCF f,b

Szimbolikus jells: lltott llapotbitek: 14 bites kd: Megjegyzs: Sz: Ciklus: Plda:

21/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 14 bites kd: Megjegyzs: Sz: Ciklus: Plda: Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 14 bites kd: Megjegyzs: Sz: Ciklus: Plda: CLRF [cmke] 0 f 127 0 (f) 1 (Z) Z 00 0001 1fff ffff Az 'f' helyen ll fjlregiszter trlse (mind a 8 bit kinullzsa) s a zr bit egybe lltsa. 1 1 CLRF COUNT ;count regiszter trlse CLRF f BSF [cmke] 0 f 127 0b7 1 f(<b>) Nincs 01 01bb bfff ffff Az 'f' helyen ll fjlregiszter 'b' bitjnek egybe lltsa. 1 1 BSF PORTA,0 ;porta nulladik bitje:1 BSF f,b

22/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 14 bites kd: Megjegyzs: Sz: Ciklus: Plda: Mnemonik: Szintaxis: Operandus: Szimbolikus jells: CLRWDT [cmke] Nincs 0 WDT 0 WDT eloszt 1 TO 1 PD TO , PD 00 0000 0110 0100 A Watch Dog Timer s a hozz tartoz eloszt trlse. TO , PD bitek egybe lltsa 1 1 CLRWDT ;Watch Dog Timer trlse CLRWDT 0 (W) 1Z Z 00 0001 0xxx xxxx A munkaregiszter trlse (mind a 8 bit kinullzsa) s a zr bit egybe lltsa. 1 1 CLRW ;akkumultor trlse CLRW [cmke] CLRW

lltott llapotbitek: 14 bites kd: Megjegyzs: Sz: Ciklus: Plda:

23/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 14 bites kd: Megjegyzs: GOTO [cmke] 0 k 2047 k PC<10:0> PCLATH<4:3> PC<12:11> Nincs 10 1kkk kkkk kkkk Felttel nlkli elgazs. A 'k' helyen megadott 11 bites kzvetlen cmet betlti a PC-be (PC<10:1>). A fels biteket a PCLATH <4:3> bitjeibl tlti be. Ktciklusos utasts. 1 2 GOTO BTFSC [cmke] 0 f 127 0b7 tlps, ha (f<b>) = 0 Nincs 01 10bb bfff ffff Feltteles elgazs. Amennyiben az 'f' ltal jellt fjlregiszter 'b' bitje 1 rtk, akkor a kvetkez utasts hajtdik vgre ebben az esetben egyciklusos utasts. Amennyiben az 'f' ltal jellt fjlregiszter 'b' bitje 0 rtk, akkor a kvetkez utastst elhagyjuk s helyette egy NOP utastst hajtunk vgre - ebben az esetben ktciklusos utasts. BTFSC f,b CIKLUS ;CIKLUS cmkvel elltott ;programrszre trtn ugrs GOTO k

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

24/82

PIC mikrovezrl utastskszlete (16-os sorozat) Sz: Ciklus: Plda: 1 1,2 BTFSC STATUS,C ;Carry bit tesztelse, ha 0 a ;kvetkez utasts tugrsa

Mnemonik: Szintaxis: Operandus:

BTFSS [cmke] 0 f 127 0b7 tlps ha f(<b>) = 0 Nincs 01 11bb bfff ffff Feltteles elgazs. Amennyiben az 'f' ltal jellt fjlregiszter 'b' bitje 0 rtk, akkor a kvetkez utasts hajtdik vgre ebben az esetben egyciklusos utasts. Amennyiben az 'f' ltal jellt fjlregiszter 'b' bitje 1 rtk, akkor a kvetkez utastst elhagyjuk s helyette egy NOP utastst hajtunk vgre - ebben az esetben ktciklusos utasts. 1 1,2 BTFSS INCFSZ [cmke] 0 f 127 (f) + 1 (cl) tlps ha az eredmny 0 Nincs 00 1111 dfff ffff INCFSZ f,d STATUS,C ;Carry bit tesztelse, ha 1 a ;kvetkez utasts tugrsa BTFSSf,b

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

Sz: Ciklus: Plda: Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 14 bites kd:

25/82

PIC mikrovezrl utastskszlete (16-os sorozat) Megjegyzs: Feltteles elgazs. Az utasts nveli az 'f' helyen ll fjlregiszter tartalmt eggyel, majd az eredmnyt a cl helyre rja. Amennyiben az eredmny nem egyenl nullval, akkor a kvetkez utasts hajtdik vgre ebben az esetben egyciklusos utasts. Ha az utasts hatsra az eredmny nulla, akkor a kvetkez utastst elhagyjuk s helyette egy NOP utastst hajtunk vgre - ebben az esetben ktciklusos utasts. 1 1,2 INCFSZ COUNT,F ;count regiszter nvelse ;eggyel az eredmny visszakerl ;a count-ba, ha elrtk a nullt a ;kvetkez utastst tugorjuk

Sz: Ciklus: Plda:

Mnemonik: Szintaxis: Operandus:

DECFSZ [cmke] 0 f 127 (f) - 1 (cl) tlps ha az eredmny 0 Nincs 00 1011 dfff ffff Feltteles elgazs. Az utasts cskkenti az 'f' helyen ll fjlregiszter tartalmt eggyel, majd az eredmnyt a clregiszterbe rja. Amennyiben a clregiszter rtke nem egyenl nullval, akkor a kvetkez utasts hajtdik vgre ebben az esetben egyciklusos utasts. Ha az utasts hatsra elrte a nullt, akkor a kvetkez utastst elhagyjuk s helyette egy NOP utastst hajtunk vgre - ebben az esetben ktciklusos utasts. 1 1,2 DECFSZ COUNT,F ;count regiszter cskkentse ;eggyel az eredmny visszakerl ;a count-ba ha elrtk a nullt a ;kvetkez utastst tugorjuk DECFSZ f,d

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

Sz: Ciklus: Plda:

26/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: CALL [cmke] CALL k 0 k 2047 PC TOS (Top Of the Stack) k PC<10:0> PCLATH<4:3> PC<12:11> Nincs 10 0kkk kkkk kkkk Szubrutinhv utasts. Els lpsknt a visszatrsi cmet (PC) a hardveres verem tetejbe (Top Of the Stack) helyezi. Ezutn a megadott 11 bites 'k' cmet a PC-be teszi (PC <10:0>), a fels biteket a PCLATH-bl (PCLATH <4:3>) tlti a PC-be. Ktciklusos utasts. (Az utasts hatsra az SP automatikusan lltdik) 1 2 CALL DELAY RETURN [cmke] Nincs TOS PC Nincs 00 0000 0000 1000 Visszatrs szubrutinbl. A hardveres verem tetejn lv rtket (TOS) a PC-be helyezi. Ktciklusos utasts. (Az utasts hatsra az SP automatikusan lltdik) 1 2 RETURN ;visszatrs szubrutinbl 27/82 RETURN ;delay rutin meghvsa

lltott llapotbitek: 14 bites kd: Megjegyzs:

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

Sz: Ciklus: Plda:

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: lltott llapotbitek: 14 bites kd: Megjegyzs: RETLW [cmke] 0 k 255 k (W) TOS PC Nincs 11 01xx kkkk kkkk Visszatrs szubrutinbl konstans rtkkel. A 'k' helyen ll 8 bites rtket betlti a munkaregiszterbe majd a verem tetejn lv rtket (TOS) betlti a PC-be. (Az utasts hatsra az SP automatikusan lltdik.) 1 2 RETLW RETFIE [cmke] Nincs TOS PC 1 GIE Nincs 00 0000 0000 1001 Visszatrs megszaktsbl. A verem tetejn lv rtket (TOS) betlti a PC-be, majd az INTCON <GIE> bitet egybe lltja. (Az utasts hatsra az SP automatikusan lltdik.) 1 2 RETFIE ;visszatrs megszaktsbl GIE bit egybe ;lltsa 28/82 RETFIE 0 ;az akkumultorba 0 betltse ;visszatrs szubrutinbl RETLW k

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

Sz: Ciklus: Plda:

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: Szimbolikus jells: SLEEP [cmke] Nincs 0 WDT 0 WDT eloszt 1 TO 0 PD TO , PD 00 0000 0110 0011 Energiatakarkos alv md. A CPU oszcilltora megll, az I/O portok rzik llapotukat. A CPU trli a WDT-t s elosztjt is, a PD bitet 0-ba, a TO bitet 1-be vltja. 1 1 SLEEP NOP [cmke] Nincs Nincs mvelet. Nincs 00 0000 0xx0 0000 Nincs mvelet. (1 gpi ciklus idejre a processzor vrakozik.) 1 1 NOP ; nincs utasts, 1 gpi ciklusig resjrat NOP ;alv md, breds esetn kvetkez utasts, ;vagy megszaktsi vektor SLEEP

lltott llapotbitek: 14 bites kd: Megjegyzs:

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

29/82

PIC mikrovezrl utastskszlete (16-os sorozat)

Az itt felsorolt utastsok s az azokra vonatkoz informcik a PIC mikrokontrollerek 16-os csaldjra vonatkoznak.
Lthatjuk, hogy igen kis szm (35 db) utastssal kell megelgednnk a fejleszts sorn. A krds, hogy mit kapunk cserbe?!

Minden utastsunk egyszavas a harvard architektrnak ksznheten. Minden utastsunk 1 gpi ciklus alatt vgrehajtdik kivve, melyben a PC-t lltani kell (ugr s szubrutinhv, -visszatr utastsok). Egyszer cmzs.

PIC mikrovezrlk 18-as csaldjnak vltozsai az utastskszletre vonatkozan:


Megjelennek j utastsok. Megnvelt adatmemria (Fjlregiszter tartomny: 04095). 16 bites utastshossz. A CALL; GOTO; MOVFF; LFSR utastsok 2 szavasak (gy tltjuk a teljes memrit). Az adatmemriban nincs szksg bankvltsra, ha az ACCESS RAM-ot hasznljuk. Az eddig bemutatott utastsok hasznlhatak, kivve az RLF; RRF az RLNCF s az RRNCF utastsok a 18-as megfelelik.

30/82

PIC mikrovezrl utastskszlete (16-os sorozat)

j utastsok s funkciik
Mnemonik Jelents Funkci Adatmozgat utastsok LFSR f,k MOVLB k MOVFF fs,fd TBLRD* TBLRD*+ TBLRD*TBLRD+* TBLWT* TBLWT*+ TBLWT*TBLWT+* move Literal to FSR MOVe Literal to Bsr<3:0> MOVe File to File TaBLe ReaD TaBLe ReaD with post-increment TaBLe ReaD with post-decrement TaBLe ReaD with pre-increment TaBLe WriTe TaBLe WriTe with post-increment TaBLe WriTe with post-decrement TaBLe WriTe with pre-increment Konstans rtk FSR-be helyezse Konstans rtk BSR-be helyezse Fjlregiszterbl (fs) fjlregiszterbe (fd) tlts Tbla olvassa a tblamutat nem vltozik Tbla olvassa a tblamutat utlagos nvelsvel Tbla olvassa a tblamutat utlagos cskkentsvel Tbla olvassa a tblamutat elzetes nvelsvel Tbla rsa a tblamutat nem vltozik Tbla rsa a tblamutat utlagos nvelsvel Tbla rsa a tblamutat utlagos cskkentsvel Tbla rsa a tblamutat elzetes nvelsvel Aritmetikai utastsok Add W and Carry to ADDWFC f,d,a File MULLW k MULWF f,a SUBFWB f,d,a MULtiply Literal with Wreg MULtiply Wreg with File Subtract file from W with Borrow W s Carry hozzadsa a fjlregiszterhez Konstans s W szorzsa Fjlregiszter s W szorzsa W-bl a fjlregiszter s a Borrow kivonsa Fjlregiszterbl W s a Borrow kivonsa 1 1 1 1 C,DC, Z,OV, N C,DC, Z,OV, N C,DC, Z,OV, N 2 2 1 2 2 Gpi ciklus lltott jelz bitek

Subtract W from file SUBWFB f,d,a with Borrow

31/82

PIC mikrovezrl utastskszlete (16-os sorozat) Logikai utastsok BTG f,b,a NEGF f,a RLCF f,d,a RLNCF f,d,a RRCF f,d,a RRNCF f,d,a SETF f,a BC n BN n BNC n BNN n BNOV n BNZ n BOV n BRA n BZ n CPFSEQ f,a CPFSGT f,a CPFSLT f,a DAW DCFSNZ f,d,a INFSNZ f,d,a Bit Toggle File NEGate File Rotate Left through Carry File Rotate Left Not through Carry File Rotate Right through Carry File Rotate Right Not through Carry File SET File Branch if Carry Branch if Negative Branch if Not Carry Branch if Not Negative Branch if Not OVerflow Branch if Not Zero Branch if OVerflow BRAnch unconditionally Branch if Zero ComPare File with wreg Skip if = ComPare File with wreg Skip if > 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

0000 0001 kkkk kkkk 8-bites konstans betltse a BSR (Bank Select Register) regiszterbe. A BSR <7:4> bitek mindig nullk maradnak, tekintet nlkl a k<7:4> 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 255
a [ 0,1]

MULLW

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 0b7
a [ 0,1]

BTG f,b{a}

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

f < b > f <b> Nincs 0111 bbba ffff ffff Az f regiszter b helyn ll bitjnek invertlsa. 1 1

[cmke] 0 f 255
a [ 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 1

42/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: RLCF [cmke] 0 f 255 d [0,1] a [ 0,1] f<n> cl<n+1> f<7> C C cl<0> 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:

Fjlregiszter

Sz: Ciklus: Mnemonik: Szintaxis: Operandus: RLNCF

1 1

[cmke] 0 f 255 d [0,1] a [ 0,1]

RLNCF

f{,d{,a}}

Szimbolikus jells: lltott llapotbitek: 16 bites kd:

f<n> cl<n+1> f<7> cl<0> N, Z 0100 01da ffff ffff

43/82

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

Fjlregiszter

Sz: Ciklus: Mnemonik: Szintaxis: Operandus: RRCF

1 1

[cmke] 0 f 255 d [0,1] a [ 0,1]

RRCF f{,d{,a}}

Szimbolikus jells:

f<n> cl<n-1> f<0> C C cl<7> 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:

Fjlregiszter

Sz: Ciklus:

1 1

44/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: RRNCF [cmke] 0 f 255 d [0,1] a [ 0,1] f<n> cl<n-1> f<0> cl<7> 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:

Fjlregiszter

Sz: Ciklus: Mnemonik: Szintaxis: Operandus: SETF

1 1

[cmke] 0 f 255
a [ 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/82

PIC 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 n

Sz: 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/82

Sz: 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 n

Sz: 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/82

Sz: 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 n

Sz: 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/82

Sz: 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 n

Sz: 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 2

Sz: Ciklus:

49/82

PIC 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 255
a [ 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/82

Sz: Ciklus:

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: CPFSGT [cmke] 0 f 255
a [ 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 255
a [ 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/82

PIC mikrovezrl utastskszlete (16-os sorozat) Sz: Ciklus: Mnemonik: Szintaxis: Operandus: Szimbolikus jells: DAW [cmke] Nincs ha [W<3:0> > 9] vagy [DC = 1] akkor (W<3:0>) + 6 W<3:0> klnben (W<3:0>) = W<3:0>; ha [W<7:4> +DC > 9] vagy [C = 1] akkor (W<7:4>) + 6 + DC W<7:4> klnben (W<7:4>) + DC = W<7:4> C 0000 0000 0000 0111 Az akkumultor decimlis kiegsztse (BCD szmok esetn hasznlatos). 1 1 DCFSNZ [cmke] 0 f 255
d [0,1] a [ 0,1]

1 1 (2, 3)

DAW

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

DCFSNZ

f{,d{,a}}

Szimbolikus jells: lltott llapotbitek: 16 bites kd:

(f) 1 = cl ugrs, ha az eredmny nem nulla. Nincs 0100 11da ffff ffff

52/82

PIC 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 255
d [0,1] a [ 0,1]

Sz: Ciklus: Mnemonik: Szintaxis: Operandus:

INFSNZ

f{,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/82

PIC 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 POP

54/82

PIC 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 RESET

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

55/82

PIC mikrovezrl utastskszlete (16-os sorozat) Mnemonik: Szintaxis: Operandus: TSTFSZ [cmke] 0 f 255
a [ 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/82

MPASM bels makri

MPASM bels makri


Az 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 SETZ

Hossz ugrs A fjregiszter tartalmnak W-be tltse Fjlregiszter kettes komplemensnek kpzse Carry 1-be lltsa Digit Carry 1-be lltsa Zero 1-be lltsa

Z Z -

57/82

MPASM 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 Z

58/82

MPASM direktvk

MPASM direktvk
Az 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/82

MPASM 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/82

MPASM direktvk

Vezrl 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 be

Szintaxis: 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 <kiegszt_forrs> #INCLUDE P16F84.INC #INCLUDE <D:\PIC\BOCI.INC> ;Gyri kiegszt forrs ;megadsa ;Sajt kiegszt forrs megadsa ;elrsi ttal

Szintaxis:

Plda:

61/82

MPASM 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 50

Szintaxis: 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 befordulni

Szintaxis: 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 vge

62/82

MPASM 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 megszaktsbl

ORG:

PROCESSOR: Szintaxis: Plda: RADIX:

Processzor tpusnak meghatrozsa. PROCESSOR processzor_tpus PROCESSOR 16F84 ;16F84 mikrovezrl belltsa

Bellthatjuk 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 szmformtum

Szintaxis:

63/82

MPASM direktvk Plda: RADIX DEC MOVLW 10 ;programrsz MOVLW B'10001111' SET: ;az alaprtelmezett ;szmformtum decimlis ;10d betltse az akkumultorba ;10001111b betltse a W-be

Szimblumot 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 14400d

VARIABLE:

Szintaxis: Plda:

64/82

MPASM direktvk

Feltteles fordts direktvi


ELSE: 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 direktva

Akkor 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/82

MPASM 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<N RRF REG,W RRF REG,F I+=1 ENDW ENDM Amennyiben sok feltteles fordtsi direktvt alkalmazunk a forrskdban, az nehezen kezelhetv, tlthatatlann vlik. ;jobbra lptet macro ;N-szer jobbra lptetnk ;a REG helyen megadott ;regiszteren

IFNDEF:

Szintaxis: Plda: WHILE:

Szintaxis: Plda:

66/82

MPASM direktvk

Adat direktvk
__BADRAM: A direktva segtsgvel bellthatjuk a nem hasznlhat adatmemria terletet. Amennyiben a forrskd erre a RAM terletre hivatkozik, rvnytelen RAM zenetet kapunk a fordttl. A gyri include fjl tartalmazza. __BADRAM kifejezs[-kifejezs] [, kifejezs[-kifejezs]] __BADRAM 0X24-0X26, 0X50 ;programrsz MOVWF 0X25 ;nem hasznlt regiszterek ;rvnytelen RAM veszly zenet ;a fordttl

Szintaxis: Plda:

__BADROM:

A direktva segtsgvel bellthatjuk a nem hasznlhat programmemria terletet. Amennyiben eze(ke)n a cme(ke)n utasts van, ugrs, vagy szubrutin hvs hivatkozik r(juk) a fordt rvnytelen ROM zenetet ad. A gyri include fjl nem tartalmazza. __BADROM kifejezs[-kifejezs] [, kifejezs[-kifejezs]] __BADROM 0X24-0X26, 0X50 ;programrsz GOTO 0X25 ORG 0X50 NOP ;nem hasznlt programmemria ;rvnytelen ROM veszly ;rvnytelen ROM veszly

Szintaxis: Plda:

__CONFIG:

A mikrovezrl konfigurcis bitjeit tudjuk belltani. Minden tpus adatlapjban szerepel a bellthat bitek neve s funkcija. __CONFIG kifejezs ;16-os csald esetn __CONFIG XT_OSC & _WDT_OFF & _CP_OFF ;XT oszcilltor; wdt, kdvdelem kikapcs ;18-as csald esetn __CONFIG _CONFIG0, CP_OFF_0 __CONFIG _CONFIG3, WDT_OFF_3 ;kdvdelem, wdt kikapcs

Szintaxis: Plda:

67/82

MPASM direktvk __IDLOCS: 4 hexa szmjegy processzorazonostt adhatunk meg a forrskdban. 16-os csald esetn programozs sorn, mg 18-as csald esetn futsidben is olvashatjuk. A hasznlata eltt meg kell adnunk a processzor tpust. __IDLOCS kifejezs ;16-os csald esetn __IDLOCS 0X1234 ;18-as csald esetn __IDLOCS _IDLOC0, 0X1 __IDLOCS _IDLOC1, 0X2 __IDLOCS _IDLOC2, 0X3 __IDLOCS _IDLOC3, 0X4 __IDLOCS _IDLOC4, 0X5 __IDLOCS _IDLOC5, 0X6 __IDLOCS _IDLOC6, 0X7 __IDLOCS _IDLOC7, 0X8 ;azonost: 1234 ;azonost: 12345678

Szintaxis: Plda:

__MAXRAM: Szintaxis: Plda: __MAXROM: Szintaxis: Plda:

Segtsgvel megadhatjuk az adatmemria maximlis cmt. A gyri include fjl tartalmazza. __MAXRAM memriacm __MAXRAM H'CF' ;utols regiszter CFh cmen

Segtsgvel megadhatjuk a programmemria maximlis cmt. A gyri include fjl nem tartalmazza. __MAXROM memriacm __MAXROM 1FFF SET LOOP 35 ;ciklus ;LOOP helyre 35 fordul be Konstans blokkot tudunk definilni. Ktelez lezrs: ENDC. CBLOCK kezdcm CBLOCK 0X20 ;LOOP helyett 15 fordul be EGY, KETTO ;EGY: 0X20, KETTO: 0X21 HAROM, NEGY ;HAROM: 0X22, NEGY: 0X23 OT:2 ;OT: ktbjtos regiszter ENDC ;0X24-0X25 ;OT als bjtja: OT fels bjtja: OT+1 68/82

CBLOCK: Szintaxis: Plda:

MPASM direktvk DA: Segtsgvel 7-bites ASCII karaktereket tudunk trolni a programmemriban. A memrit 14 bitenknt foglalja le a direktva, amennyiben pratlan szm karaktert kvnunk trolni, akkor az utols karakterknt a 'NULL' kerl a memriba. Figyelem, mivel az arcitektrnk 8-bites, ezrt nem a tnyleges ASCII kd kerl letrolsra. A kiolvass utn konverzit kell vgrehajtani a helyes karakterek megkapshoz. Szintaxis: Plda: [cmke] DA kifejezs [,kifejezs, , kifejezs] DA abcdef ;a programmemriba 30E2; 31E4; 32E6 kerl ;a: 61h, b: 62h, c: 63h, d: 64h, e: 65h, f: 66h ;a: (0)1100001b, b: (0)1100010b ; letrolt kd: 11000011100010b = 30E2h Szmok s szveges informci letrolsra alkalmas tblzatot generl a programmemriban. A DA direktvhoz hasonlan itt is 14 bites csomagokban trolunk, azonban egy karakterhez rendeljk a 14 bitet. A karaktereket nem vonjuk ssze gy a kiolvasott adat megegyezik a bert rtkkel, csak az res helyeket kell eldobnunk. Szintaxis: Plda: DB: Szintaxis: Plda: DE: [cmke] DATA kifejezs [,kifejezs, , kifejezs] DATA abcdef ;a programmemriba 0061; 0062; 0063; 0064; 0065; 0066 kerl Adatot trolhatunk a programmemriban 1 bjton. [cmke] DATA kifejezs [,kifejezs, , kifejezs] DB ab,'c',def ;letrolt rtkek: 6162h, 6364h, 6566h Segtsgvel a bels adat EEPROM-ban tudunk informcit trolni. Nincs implementlva minden mikrovezrlben. 16-os csald esetn a 2100h, mg 18asnl az F00000h-nl kezddik az EEPROM adatmemria. Szintaxis: Plda: [cmke] DE kifejezs [,kifejezs, , kifejezs] ORG 2100 DE Boci program, '\n' 69/82

DATA:

MPASM direktvk DT: Adattblzatot hozhatunk ltre a programmemriban. Soros RETLW utastst is generl. A W rtke hatrozza meg, hogy melyikkel trnk vissza. Minden karaktert egy RETLW utastshoz rendelnk. Az adatdirektvk kzl ezt clszer alkalmazni. Szintaxis: Plda: [cmke] DT kifejezs [,kifejezs, , kifejezs] DT abcdef ;ADDWF PCL,F ;RETLW 'a' ;RETLW 'b' ;RETLW 'c' ;RETLW 'd' ;RETLW 'e' ;RETLW 'f' Az adatot szavanknt troljuk a programmemriban. Szintaxis: Plda: ENDC: Szintaxis: Plda: FILL: ENDC l. CBLOCK Feltlthetjk n-szer egy rtkkel a programmemrit. 16-os csald esetn szavanknt, 18-as csald esetn bjtonknt. Szintaxis: Plda: RES: cmke FILL kifejezs,n ORG 300 FILL (NOP),6 ;300-305: NOP utasts Adott szt (18-asnl bjtot) tudunk lefoglalni egy ltalunk megadott szimblumnak a programmemriban. Szintaxis: Plda: cmke szimblum RES memriaegysg ORG 50 RES SZAM 2 70/82 ;50: SZAM als bjtja ;51: SZAM fels bjtja cmke DW kifejezs [,kifejezs, , kifejezs] DW abcdef Konstans blokkot lezr direktva.

DW:

MPASM direktvk

Jegyzk direktvk
ERROR: Felttelek segtsgvel fejleszti hibazenetet tudunk kldeni, melyet a fordt a fordts sorn megjelent szmunkra. A szveg minimlisan 1, maximlisan 80 karakter hossz lehet. ERROR szveges karakterlnc IF (BAUD!=D'1200')&&(BAUD!=D'2400')&& (BAUD!=D'4800')&&(BAUD!=D'9600')&& (BAUD!=D'11400')&&(BAUD!=D'19200') ERROR Az ltalad vlasztott Baud nem tmogatott! ENDIF Meg tudjuk adni, hogy mely zeneteket jelentse meg a fordt. ERRORLEVEL {0|1|2|+zenetszm|-zenetszm} ERRORLEVEL 0 ERRORLEVEL {-302} ;zenet, veszly s hiba ;megjelentse ;bank kivlasztsi zenetet ne ;jelentse meg

Szintaxis: Plda:

ERRORLEVEL: Szintaxis: Plda:

;0: zenet, veszly, hiba ;1: veszly, hiba ;2: hiba ;+zenetszm: az zenet megjelentse ;-zenetszm: az zenet elrejtse

71/82

MPASM direktvk LIST: Szintaxis: Plda: A szvegszerkeszt belltsait s a fordtst tudjuk befolysolni ezen direktva segtsgvel. LIST opci=kifejezs [, , opci=kifejezs] LIST P=16F84, F=INHX8M, R=HEX Lers Tabultor szlessgnek meghatrozsa (max. 999) Oszlop szlessgnek meghatrozsa (max. 999) A kimeneti hexa fjl formtuma (INHX8m, INHX32, INHX8S )

Opci Alaprtelmezett rtk b c f free fixed mm n p pe r st t w x 8 132 INHX8M FIXED FIXED ON 60 NONE NONE HEX ON OFF 0 ON

A LIST fjlban a memriatrkp megjelentse (ON, OFF) Sorok szma egy oldalon (max. 999) Processzor kivlasztsa (l. PROCESSOR) Processzor kivlaszts s kiterjesztett utastskszlet engedlyezse Alaprtelmezett szmformtum (OCT, DEC, HEX) A LIST fjlban a szimblumtbla megjelentse (ON, OFF) Csonka sorok kirsa (OFF: kir; WRAP; feltlt) zenetek szintjnek belltsa (l. ERRORLEVEL) Makr kiterjesztsek be s kikapcsolsa (ON; OFF)

A tblzatban szerepl szmok decimlis formtumban rtendk!

MESSG: Szintaxis: Plda:

A fejleszt ltal definil zeneteket tudunk vele megjelenteni. MESSG szveges karakterlnc IF (BAUD!=D'1200')&&(BAUD!=D'2400')&& (BAUD!=D'4800')&&(BAUD!=D'9600')&& (BAUD!=D'11400')&&(BAUD!=D'19200') ERROR Az ltalad vlasztott Baud nem tmogatott! MESSG Tmogatott sebessgek: 1200, 2400, 4800, 9600, 11400, 19200 ENDIF

72/82

MPASM direktvk NOLIST: Szintaxis: PAGE: Szintaxis: SPACE: Szintaxis: Plda: SUBTITLE: Szintaxis: Plda: TITLE: Szintaxis: Plda: SPACE n SPACE 5 ; 5 res sor beillesztse Forrskdunkhoz alcmet rendelhetnk maximlisan 60 karakter hosszsg lehet. SUBTITLE szveges karakterlnc SUBTITLE MECHA Forrskdunkhoz cmet rendelhetnk maximlisan 60 karakter hosszsg lehet. TITLE szveges karakterlnc TITLE Kdzr PAGE res sorok beillesztse a jegyzk fjlba. NOLIST Lapdobs beillesztse a jegyzk fjlba. Segtsgvel kikapcsolhatjuk a kimeneti jegyzk fjlt.

73/82

MPASM direktvk

Makr direktvk
ENDM: Makr vgt jelz direktva. Amennyiben a program erre fut, akkor a makr visszaadja a vezrlst a programnak. ENDM l. MACRO Makrbl trtn feltteles visszatrsre alkalmazzuk. Elfordulhat, hogy olyan makrkat hasznlunk, melyek paramtereinek egy adott tartomnyban kell elhelyezkednik (pl. nem tudunk nullval osztani). A paramterek ellenrzse sorn nem tmogatott rtk esetn hasznljuk az EXITM direktvt. Hatsa azonos az ENDM direktvval. EXITM OSZT MACRO OSZTO,OSZTANDO IF OSZTO==0 EXITM ;oszto makr ENDM A makr egsznek megjelentse a jegyzk fjlban. Ez az alaprtelmezett bellts. EXPAND Helyi makrvltoz deklarlsa. A loklis vltozra csak a makrn bell tudunk hivatkozni. Amennyiben ugyanolyan szimblum van a fprogramban, melyet a makrban is szeretnnk hasznlni, alkalmazzuk a LOCAL direktvt. LOCAL szimblum [,..., szimblum]

Szintaxis: Plda: EXITM:

Szintaxis: Plda:

EXPAND: Szintaxis: LOCAL:

Szintaxis:

74/82

MPASM direktvk MACRO: Makr defincit lehetv tv direktva. A makr defincijnak minden esetben meg kell elznie a makr meghvst. makr_neve MACRO paramter1 [, , paramtern] PLUS MACRO REG1, REG2 ;makr kifejtse ;ENDM ;makr definci ;makr vge

Szintaxis: Plda:

NOEXPAND: Szintaxis: NOEXPAND

Hasznlata esetn a makrk kifejtse nem jelenik meg a jegyzk fjlban.

A makr a szubrutinnal ellenttben a fordtnak szl, mely az ott tallhat utastssorozatot a makr meghvsnak helyre msolja. Makrk helyett clszer szubrutint alkalmazni a kisebb memriahasznlat okn.

75/82

MPASM direktvk

Trgy fjl direktvi


ACCESS_OVR: A 18-as csald esetn alkalmazhat direktva. A kzvetlen elrs memria (ACCESS RAM) hasznlatval megszabadulhatunk a fradsgos bankvltsoktl. Amennyiben ez a memria szmunkra kevs, akkor vagy a BSR regiszter lltsval msik bankba kell lpnnk, vagy ha erre lehetsgnk van az ACCESS adatmemria azonos cmeihez klnbz regisztereket rendelhetnk az overlay (tlapols) technika alkalmazsval. Ebben az esetben a z ACCESS RAM terlet felett rendelkezsnkre ll adatmemrit virtulis memriaknt kezeljk. [cmke] ACCESS_OVR RAM_cm Bankvlaszt direktva indirekt cmzshez. Az RP0, RP1 bitek mellett az IRP bitet is lltja. BANKISEL szimblum BANKISEL REG ;A REG regisztert tartalmaz ;bankba lps, IRP bit set/clear

Szintaxis: BANKISEL: Szintaxis: Plda: BANKSEL: Szintaxis: Plda: CODE: Szintaxis: Plda:

Bankvlaszt direktva kzvetlen cmzs esetn. Az IRP bitet nem lltja! BANKSEL szimblum BANKSEL TRISA ;bankvlaszts az irnyok ;belltshoz a

A programrszt adott cmre helyezhetjk programmemriban (16-os mikrovezrl esetn). [cmke] CODE ROM_cm RESET CODE 0 GOTO START START CODE 0X25 ;RESET cmkre ugrs: 0-s ;cmre ugrs ;START programrsz a 0X25-s ;cmre fordul be

76/82

MPASM direktvk CODE_PACK: Szintaxis: Plda: EXTERN: 18-as csald esetn alkalmazhat. Hatsa megegyezik a CODE direktvval. [cmke] CODE_PACK ROM_cm l. CODE Klnbz asm modulok kztti tjrhatsgot teszi lehetv. Amelyik szimblumot globlisknt definiltuk egy msik modulban, azt az EXTERN direktvval elrhetv tehetjk a sajt modulunkban. EXTERN szimblum1 [, ..., szimblumn] EXTERN DELAY CALL DELAY ;a delay rutin egy msik ;modulban lett megrva, de a ;GLOBAL direktvval a delay ;szimblumot elrhetv tettk ;ms modul szmra is. tehetjk ms asm

Szintaxis: Plda:

GLOBAL: Szintaxis: Plda:

Szimblumainkat elrhetv modulok szmra is. GLOBAL szimblum [, ..., szimblumn] GLOBAL TIME1

;a TIME1 szimblumot ms ;modul is elrheti, feltve, hogy ;hasznlja az EXTERN ;direktvt.

IDATA: Szintaxis: Plda: IDATA_ACS:

Adott cmtl foglalhatjuk le az adatmemrit szimblumaink szmra. Kezdrtket adhatunk. [cmke] IDATA RAM_cm GROUP IDATA 0X20 ;a 20h cmtl ngy hely GROUP_VAR1 DB 1,2,3,4 ;lefoglalva rtkek: 1,2,3,4 18-as csald esetn alkalmazhat direktva. Az adatok kezdcmt tudjuk definilni az ACCESS RAM-ban. Kezdrtket adhatunk. [cmke] IDATA_ACS RAM_cm l. IDATA

Szintaxis: Plda:

77/82

MPASM direktvk PAGESEL: Lapvlaszt direktva. A PCLATH regisztert lltja be a megfelel rtkre. A direktva a BSF, BSF parancsokat alkalmazza az akkumultor rtke nem vltozik. PAGESEL [cmke] PAGESEL RUTINOK ;RUTINOK cmkt tartalmaz ;lapra vlts

Szintaxis: Plda: PAGESELW:

Lapvlaszt direktva. A PCLATH regisztert lltja be a megfelel rtkre. A direktva a MOVLW, MOVWF parancsokat alkalmazza az akkumultor rtke megvltozik. PAGESELW RUTINOK PAGESELW RUTINOK ;RUTINOK cmkt tartalmaz ;lapra vlts, W fellrsa

Szintaxis: Plda: UDATA: Szintaxis: Plda: UDATA_ACS:

Adott cmtl foglalhatjuk le az adatmemrit szimblumaink szmra. Kezdrtket nem adhatunk. [cmke] UDATA RAM_cm GROUP UDATA 0X20 GROUP_VAR1 RES 2 ;a 20h cmtl kt hely ;lefoglalva

18-as csald esetn alkalmazhat direktva. Az adatok kezdcmt tudjuk definilni az ACCESS RAM-ban. Kezdrtket nem adhatunk. [cmke] UDATA_ACS RAM_cm l. UDATA Overlay technikval adatmemriban. [cmke] UDATA_OVR RAM_cm definilhatunk adatokat az

Szintaxis: Plda: UDATA_OVR: Szintaxis:

78/82

MPASM direktvk

Programozs
A programozs sokak szmra csupn egy kdsorozat begpelst jelenti azonban ez egy nagyon helytelen elgondols! A programozs hossz folyamat, mely tbb lpsben jut el a tervezs fzistl a tnyleges kdolsig, majd a mkds ellenrzsig. Programot rni mindenki tud, de hatkony szellemes megoldsok megalkotshoz komoly tapasztalat, s rengeteg gyakorls szksgeltetik. A fejleszts sorn ne kapkodjunk, mindig adjunk magunknak s msoknak is idt a problma rszletes elemzsre. A hangslyt a tervezsre helyezzk a gondos tervezs tbb idt ignyel, ami azonban sokszorosan megtrl a folyamat ksbbi fzisaiban. Programfejleszts lpsei:

Specifikci Problmk definilsa, elemzse A leghatkonyabb megoldsok kivlasztsa Elzetes dokumentci elksztse Kdols Hibakeress, ellenrzs (szimulci, emulci, funkcionlis teszt) Teljes dokumentci elksztse

Specifikci: A termk (itt, s a tovbbiakban program) mkdsi elvnek lersa a megrendel, felhasznl szemszgbl. A specifikci ltalnos ismrveket tartalmaz a program mkdsrl de nem foglalkozik azok informatikai httervel. Csak s kizrlag a megoldand feladatok vannak felsorolva, a hogyan krdsre mr neknk kell vlaszolni. Egy specifikcinak mindig rszletesnek s egyrtelmnek kell lennie. Nem maradhatnak nyitott krdsek, flmondatok, amiket tbbflekppen is lehet rtelmezni. Problmk definilsa, elemzse: A kapott specifikci alapjn a programoz (fejleszt) az adott problmkat elltja informatikai jellemzkkel. Ebben a fzisban mr nem ltalnos megfogalmazsok, kzrthet fogalmak, hanem algoritmusok szerepelnek. Itt kell kiderlnie annak is, ha az adott problm(ka)t a rendelkezsre ll szoftver s/vagy hardver eszkzzel lehetetlen kivitelezni. A leghatkonyabb megoldsok kivlasztsa: Minden problmra szmos megolds ltezik ezek kltsgben (rfordtott munkara, memriaigny, sebessg) jelentsen eltrhetnek. A leghatkonyabb megolds nem minden esetben a legkisebb s leggyorsabb algoritmust takarja. Elszr kivlasztjuk azokat a megoldsokat melyek megfelelnek a specifikciban megadott paramtereknek, majd ezek kzl a szmunkra legegyszerbbet valstjuk meg. Ebben a fzisban a programoz mr adott, de tg hatrok kztt szabadon dnthet a folyamat ksbbi irnyrl.

79/82

Programozs Elzetes dokumentci elksztse: Fradtsgos s taln a programozk szmra a legkellemetlenebb de elengedhetetlen munka. A kdolsnak csak rszletes terv utn kezdhetnk neki. Ez a terv ne csak a fejnkben ltezzen, knnytsk meg sajt magunk szmra a folyamat vgrehajtst azzal, hogy rszletes tmutatt ksztnk. Az egyes algoritmusok, programok lersra tbbfle mdszert is kifejlesztettek. Ezek kzl nem lehet egyetemleges jt kivlasztani a szerznek sem clja letenni egyik mellett sem a voksot. Mindenki a sajt szemszgbl s a problma figyelembevtelvel vlasszon egy neki tetsz megoldst. Legyen az akr folyamatbra, struktogram, Jackson diagram, fa struktra, pszeud-kd, vagy egyb ler mdszer. Kdols: A megtervezett algoritmust most egy ltalunk meghatrozott programnyelv segtsgvel implementljuk. Brmilyen programnyelvet is hasznljunk clszer azt szemantikai megjegyzsekkel elltni ez megknnyti a ksbbi hibakeresst, dokumentlst is.

Hibakeress, ellenrzs: Compiler tpus programnyelvek esetn lehetsgnk van elzetes szintaktikai tesztelst vgrehajtani, mely igen sok segtsget nyjt az alaki (nyelvtani) hibk feldertsben. A logikai hibk megtallsra tbb mdszer is rendelkezsnkre ll. Amennyiben szmkonverzit, egyik kommunikcis protokollbl a msikba trtn talaktst, bonyolult aritmetikai mveleteket vgznk rdemes elszr szimulcis krnyezetben vgrehajtani a tesztelst. Ne feledjk azonban, hogy a szimulci matematikai modellekre pt, a szmunkra bonyolultnak tn matematikai problmk elemzsben komoly segtsg lehet, de a logikai hibakeressre mr nem mindig alkalmas. Mikroprocesszoros rendszerek fejlesztse sorn hasznlhatunk valamilyen debugger (hibakeres), vagy emultor eszkzt is. A hibakeress utols fzisa az ramkrben trtn tesztels vals krlmnyek kztt. Fontos: Az hogy nincs hiba, azt jelenti, hogy mg nem talltuk meg azokat a krlmnyeket, melyek kztt a hiba fellp. A tesztels sorn minden elkpzelhet esemnyt prbljunk meg modellezni ne arra gondoljunk, mi hogyan hasznlnnk az eszkzt. Nincs kellemetlenebb lmny mikor egy ltalunk mkd jelzvel elltott eszkz az tads sorn hibsodik meg. Teljes dokumentci: Hangslyozni szeretnm a teljes szt. A dokumentcinak a fejleszts minden lnyeges momentumt tartalmaznia kell. gy kell megalkotni, hogy abbl egy msik szakember egyrtelm kvetkeztetseket vonjon le, s reproduklni is tudja az eszkzt. A dokumentci rsze a specifikci is.

80/82

Programozs Assembly program felptse

FEJLC

INICIALIZLS

DEFINCIK

MAKRK

FPROGRAM

RUTINOK

MEGSZAKTSOK

TBLK

PROGRAM VGE

81/82

Programozs Fejlc:

Szerz Verziszm Dtum Ismertet

Inicializls:

Processzor tpus Gyri include fjl Konfigurcis bitek Sajt include fjlok Szimblumokat rendelhetnk szmokhoz, s ms szimblumokhoz. Az adatmemria lefoglalsra hasznlhatjuk a CBLOCK s ENDC direktvkat, adott cmre val hivatkozshoz az EQU-t. Szimblumok szimblumokhoz rendelsre a #DEFINE direktva ll rendelkezsnkre. A makr a szubrutinhoz hasonl gyakran ismtelt kdsorozat. Klnbsg, hogy a makr annyiszor fordul be a trgyprogramba, ahnyszor meghvjuk (ezrt nem tartalmazhat cmkt). Elnye, hogy paramterezhet a hasznlata azonban a memria megvsa rdekben kerlend. Itt helyezkedik el a tnyleges trgykd. A fprogram mindig egy vgtelen ciklus. A processzor soha nem llhat meg nem futhat az END direktvra. Gyakran ismtelt programrszek. Meghvsuk a CALL paranccsal trtnik visszatrs a RETURN-el. A rutin meghvsakor a programszmll aktulis rtke elmentdik a hardveres verembe visszatrskor az itt tallhat cm tltdik a programszmllba. A verem mlysge hatrozza meg az egymsba gyazhat rutinok szmt. Valamely bels vagy kls perifria okozhat megszaktst ekkor a beolvasott utasts mg vgrehajtdik, de a kvetkez helyett a PC rtknek mentse utn a megszaktsi vektorra ugrik a program. Visszatrs a RETFIE paranccsal trtnik. A megszakts generlsnak idpillanatrl ltalban nincsenek elzetes informciink, ezrt a kzsen hasznlt regiszterek rtkt el kell mentennk (W, STATUS). PIC mikrovezrlk esetn a megszaktsjelz flag bitet neknk kell szoftveres ton trlni. Itt szeretnm felhvni a figyelmet, ha a fprogramban bankvlts trtnik s engedlyezve van a megszakts, akkor a megszaktsi rutinban ellenriznnk kell az aktulis bankot szksg esetn kivlasztani a megfelel bankot, majd a visszatrs eltt visszalltani az eredeti rtkre. Az assembly programot ktelez lezrni erre a clra hasznljuk az END direktvt.

Defincik:

Makrk:

Fprogram: Rutinok:

Megszaktsok:

Program vge:

82/82

You might also like